diff --git a/.gitattributes b/.gitattributes index 579877f02..17cd3619d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -5,4 +5,4 @@ tests/* linguist-documentation scheme/examples/* linguist-documentation python/numpy.i linguist-vendored src/support/mt19937ar.c linguist-vendored -src/support/meep_mt.h linguist-language=C++ \ No newline at end of file +src/support/meep_mt.h linguist-language=C++ diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..0aada4dc0 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +version: 2 +updates: + - package-ecosystem: "pip" + directory: "/" # Location of package manifests + schedule: + interval: "daily" + + - package-ecosystem: github-actions + directory: / + schedule: + interval: monthly diff --git a/.github/workflows/build-ci.yml b/.github/workflows/build-ci.yml index 9a1c19b5b..72ff0c8a0 100644 --- a/.github/workflows/build-ci.yml +++ b/.github/workflows/build-ci.yml @@ -1,10 +1,10 @@ -name: CI +name: run tests on: - push: - branches: [ master ] pull_request: - branches: [ master ] + push: + schedule: + - cron: 0 2 * * * # run at 2 AM UTC workflow_dispatch: jobs: diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml new file mode 100644 index 000000000..088c7b916 --- /dev/null +++ b/.github/workflows/pre-commit.yml @@ -0,0 +1,16 @@ +--- +name: pre-commit + +on: + pull_request: + push: + +jobs: + pre-commit: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-python@v4 + with: + python-version: 3.9 + - uses: pre-commit/action@v3.0.0 diff --git a/.gitignore b/.gitignore index 4ed1ef7e1..32b98c60e 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,11 @@ _build .vscode .idea +python/examples/.ipynb_checkpoints/ +h5utils/ +hdf5/ +extra/ +configure~ # autotools stuff Makefile diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 000000000..3c7f780f9 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,112 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: "08b4be84be2d74173246b7c9b6c22212a6c15a2d" + hooks: + - id: check-yaml + - id: end-of-file-fixer + - id: trailing-whitespace + + # - repo: https://github.com/hakancelik96/unimport + # rev: df8eb1a4c91acb84da197828af8157708968b596 + # hooks: + # - id: unimport + # args: [--remove, --include-star-import] + # - repo: https://github.com/pycqa/isort + # rev: "12cc5fbd67eebf92eb2213b03c07b138ae1fb448" + # hooks: + # - id: isort + # files: "python/.*" + # args: ["--profile", "black", "--filter-files"] + + - repo: https://github.com/psf/black + rev: "4f1772e2aed8356e57b923eacf45f813ec3324a0" + hooks: + - id: black + + # - repo: https://gitlab.com/pycqa/flake8 + # rev: "21d3c70d676007470908d39b73f0521d39b3b997" + # hooks: + # - id: flake8 + + # - repo: https://github.com/kynan/nbstripout + # rev: 8cafdcc393232045208137698dbeb42d6e0dd9e8 + # hooks: + # - id: nbstripout + # files: ".ipynb" + + - repo: https://github.com/asottile/pyupgrade + rev: v2.37.3 + hooks: + - id: pyupgrade + args: [--py37-plus, --keep-runtime-typing] + + # - repo: https://github.com/codespell-project/codespell + # rev: 4d782511b3999c243feb3858cd7062270eb13291 + # hooks: + # - id: codespell + # args: ["-L TE,TE/TM,te,ba,FPR,fpr_spacing,ro"] + + # - repo: https://github.com/shellcheck-py/shellcheck-py + # rev: f87a493c6596a5338d69395905a4e13ed65584f6 + # hooks: + # - id: shellcheck + + - repo: https://github.com/pre-commit/pygrep-hooks + rev: dc89c436469616a7c48293ec60c8e21e9d95be08 # Use the ref you want to point at + hooks: + - id: python-use-type-annotations + + - repo: https://github.com/PyCQA/bandit + rev: 97501817e621db9975dfa6a2a1d36370942d1812 + hooks: + - id: bandit + args: [--exit-zero] + # ignore all tests, not just tests data + exclude: ^tests/ + - repo: https://github.com/pre-commit/mirrors-clang-format + rev: 'v14.0.6' # Use the sha / tag you want to point at + hooks: + - id: clang-format + # - repo: https://github.com/pre-commit/mirrors-mypy + # rev: "214c33306afe17f1cc7d2d55e4da705b6ebe0627" + # hooks: + # - id: mypy + # exclude: ^(docs/|example-plugin/|tests/fixtures) + # additional_dependencies: + # - "pydantic" + # - repo: https://github.com/terrencepreilly/darglint + # rev: master + # hooks: + # - id: darglint + + # - repo: https://github.com/pycqa/pydocstyle + # rev: "" + # hooks: + # - id: pydocstyle + # - repo: https://github.com/asottile/reorder_python_imports + # rev: 2b2f0c74acdb3de316e23ceb7dd0d7945c354050 + # hooks: + # - id: reorder-python-imports + # - repo: https://github.com/PyCQA/pylint + # rev: v2.14.1 + # hooks: + # - id: pylint + # args: [--exit-zero] + # - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks + # rev: 6565d773ca281682d7062d4c0be74538cc474cc9 + # hooks: + # - id: pretty-format-java + # args: [--autofix] + # - id: pretty-format-kotlin + # args: [--autofix] + # - id: pretty-format-yaml + # args: [--autofix, --indent, "2"] + # - repo: https://github.com/adrienverge/yamllint.git + # rev: v1.21.0 # or higher tag + # hooks: + # - id: yamllint + # args: [--format, parsable, --strict] + # - repo: https://github.com/jumanjihouse/pre-commit-hook-yamlfmt + # rev: 0.1.0 # or specific tag + # hooks: + # - id: yamlfmt diff --git a/.sourcery.yaml b/.sourcery.yaml new file mode 100644 index 000000000..f300aba4e --- /dev/null +++ b/.sourcery.yaml @@ -0,0 +1,2 @@ +refactor: + python_version: '3.7' diff --git a/AUTHORS b/AUTHORS index 67c49fe38..f26a2989f 100644 --- a/AUTHORS +++ b/AUTHORS @@ -17,4 +17,4 @@ Ian Williamson Andreas Hoenselaar Ben Bartlett Krishna Gadepalli -Mo Chen \ No newline at end of file +Mo Chen diff --git a/codemeta.json b/codemeta.json index a6282fb4d..9cef3da74 100644 --- a/codemeta.json +++ b/codemeta.json @@ -2,7 +2,8 @@ "@context": "https://doi.org/10.5063/schema/codemeta-2.0", "@type": "SoftwareSourceCode", "name": "Meep", - "description": "Meep is a free and open-source software package for electromagnetics simulation via the finite-difference time-domain (FDTD) method spanning a broad range of applications.", + "description": + "Meep is a free and open-source software package for electromagnetics simulation via the finite-difference time-domain (FDTD) method spanning a broad range of applications.", "url": "https://github.com/NanoComp/meep", "codeRepository": "https://github.com/NanoComp/meep", "issueTracker": "https://github.com/NanoComp/issues", @@ -87,8 +88,12 @@ ], "developmentStatus": "active", "downloadUrl": "https://github.com/NanoComp/releases", - "version":"1.11", - "dateCreated":"2003-02-12", - "datePublished":"2006-04-01", - "programmingLanguage": ["C++", "Python", "Scheme"] + "version": "1.11", + "dateCreated": "2003-02-12", + "datePublished": "2006-04-01", + "programmingLanguage": [ + "C++", + "Python", + "Scheme" + ] } diff --git a/doc/_api_snippets/class_template.md b/doc/_api_snippets/class_template.md index 35de0fb34..4de4206ec 100644 --- a/doc/_api_snippets/class_template.md +++ b/doc/_api_snippets/class_template.md @@ -12,4 +12,3 @@ class {class_name}({base_classes}): {docstring} - diff --git a/doc/_api_snippets/function_template.md b/doc/_api_snippets/function_template.md index 89c85b739..adcba9c4c 100644 --- a/doc/_api_snippets/function_template.md +++ b/doc/_api_snippets/function_template.md @@ -9,4 +9,4 @@ def {function_name}{parameters}:{other_signatures} {docstring} - \ No newline at end of file + diff --git a/doc/_api_snippets/method_template.md b/doc/_api_snippets/method_template.md index 71cc0ac3d..560b31be2 100644 --- a/doc/_api_snippets/method_template.md +++ b/doc/_api_snippets/method_template.md @@ -13,4 +13,4 @@ def {method_name}{parameters}:{other_signatures} - \ No newline at end of file + diff --git a/doc/docs/2d_Cell_Special_kz.md b/doc/docs/2d_Cell_Special_kz.md index 11cd1fdcc..655881cf0 100644 --- a/doc/docs/2d_Cell_Special_kz.md +++ b/doc/docs/2d_Cell_Special_kz.md @@ -100,4 +100,4 @@ The Meep results are identical to within six decimal digits and agree well with ``` refl:, 0.3272338236967464 (real/imag), 0.3272338244372344 (complex), 0.3272330216564413 (3d), 0.3293821216165117 (analytic) -``` \ No newline at end of file +``` diff --git a/doc/docs/C++_Tutorial.md b/doc/docs/C++_Tutorial.md index 5e158b86b..2e152877a 100644 --- a/doc/docs/C++_Tutorial.md +++ b/doc/docs/C++_Tutorial.md @@ -86,7 +86,7 @@ const double half_cavity_width = d2; const int N = 5; ``` -Meep supports perfectly matching layers (PML) as absorbing boundary conditions. The PML begins at the edge of the computational volume and works inwards. Hence, we specify the size of the cell as follows: +Meep supports perfectly matching layers (PML) as absorbing boundary conditions. The PML begins at the edge of the computational volume and works inwards. Hence, we specify the size of the cell as follows: ```c++ const double pml_thickness = 1.0; diff --git a/doc/docs/Developer_Codes/Makefile.manual b/doc/docs/Developer_Codes/Makefile.manual index 5abb9d261..b0501ad8a 100644 --- a/doc/docs/Developer_Codes/Makefile.manual +++ b/doc/docs/Developer_Codes/Makefile.manual @@ -15,5 +15,5 @@ LIBS = -lmeepgeom -lmeep -lctlgeom WriteChunkInfo: WriteChunkInfo.o $(CXX) $(LDFLAGS) -o $@ $^ $(LIBS) -clean: +clean: rm *.o *.a diff --git a/doc/docs/Developer_Codes/WriteChunkInfo.cpp b/doc/docs/Developer_Codes/WriteChunkInfo.cpp index 43bc40d5b..ad96843d7 100644 --- a/doc/docs/Developer_Codes/WriteChunkInfo.cpp +++ b/doc/docs/Developer_Codes/WriteChunkInfo.cpp @@ -123,8 +123,9 @@ structure create_structure(double resolution, int symmetries) { geometry_lattice.size.z = 0.0; grid_volume gv = voltwo(sx, sy, resolution); gv.center_origin(); - symmetry S = (symmetries == 1 ? mirror(Y, gv) - : symmetries == 2 ? mirror(X, gv) + mirror(Y, gv) : symmetry()); + symmetry S = (symmetries == 1 ? mirror(Y, gv) + : symmetries == 2 ? mirror(X, gv) + mirror(Y, gv) + : symmetry()); structure the_structure(gv, dummy_eps, pml(dpml), S); vector3 e1 = v3(1.0, 0.0, 0.0); diff --git a/doc/docs/Download.md b/doc/docs/Download.md index 730c067c0..deb875b33 100644 --- a/doc/docs/Download.md +++ b/doc/docs/Download.md @@ -28,4 +28,4 @@ You will also be able to install the [parallel version of Meep](https://packages sudo apt-get install python3-meep-openmpi ``` -These upcoming Meep packages for Ubuntu 21.04 are derived from the Debian 11 ("Bullseye") packages ([serial](https://packages.debian.org/bullseye/python3-meep) and [parallel](https://packages.debian.org/bullseye/python3-meep-openmpi)). Debian 11 is currently the testing distribution. \ No newline at end of file +These upcoming Meep packages for Ubuntu 21.04 are derived from the Debian 11 ("Bullseye") packages ([serial](https://packages.debian.org/bullseye/python3-meep) and [parallel](https://packages.debian.org/bullseye/python3-meep-openmpi)). Debian 11 is currently the testing distribution. diff --git a/doc/docs/FAQ.md b/doc/docs/FAQ.md index 6754daa2d..619e9f4b2 100644 --- a/doc/docs/FAQ.md +++ b/doc/docs/FAQ.md @@ -320,7 +320,7 @@ Only the [harmonic mean](https://en.wikipedia.org/wiki/Harmonic_mean) of eigenva ### How do I model graphene or other 2d materials with single-atom thickness? -Typically, graphene and similar "2d" materials are mathematically represented as a [delta function](https://en.wikipedia.org/wiki/Dirac_delta_function) conductivity in Maxwell's equations because their thickness is negligible compared to the wavelength, where the conductivity is furthermore usually anisotropic (producing surface-parallel currents in response to the surface-parallel components of the electric field). In a discretized computer model like Meep, this is approximated by an anisotropic volume conductivity (or other polarizable dispersive material) whose thickness is proportional to (`1/resolution`) *and* whose amplitude is proportional `resolution`. For example, this could be represented by a one-pixel-thick [conductor](Materials.md#conductivity-and-complex) can be represented by e.g. a [`Block`](Python_User_Interface.md#block) with `size=meep.Vector3(x,y,1/resolution)` in a 3d cell, with the value of the conductivity explicitly multiplied by `resolution`. +Typically, graphene and similar "2d" materials are mathematically represented as a [delta function](https://en.wikipedia.org/wiki/Dirac_delta_function) conductivity in Maxwell's equations because their thickness is negligible compared to the wavelength, where the conductivity is furthermore usually anisotropic (producing surface-parallel currents in response to the surface-parallel components of the electric field). In a discretized computer model like Meep, this is approximated by an anisotropic volume conductivity (or other polarizable dispersive material) whose thickness is proportional to (`1/resolution`) *and* whose amplitude is proportional `resolution`. For example, this could be represented by a one-pixel-thick [conductor](Materials.md#conductivity-and-complex) can be represented by e.g. a [`Block`](Python_User_Interface.md#block) with `size=meep.Vector3(x,y,1/resolution)` in a 3d cell, with the value of the conductivity explicitly multiplied by `resolution`. ### How do I model a continuously varying permittivity? You can use a [material function](Python_User_Interface.md#medium) to model any arbitrary, position-dependent permittivity/permeability function $\varepsilon(\vec{r})$/$\mu(\vec{r})$ including anisotropic, [dispersive](Materials.md#material-dispersion), and [nonlinear](Materials.md#nonlinearity) media. For an example involving a non-dispersive, anisotropic material, see [Tutorial/Mode Decomposition/Diffraction Spectrum of Liquid-Crystal Polarization Gratings](Python_Tutorials/Mode_Decomposition.md#diffraction-spectrum-of-liquid-crystal-polarization-gratings). The material function construct can also be used to specify arbitrary *shapes* (e.g., curves such as parabolas, sinusoids, etc.) within: (1) the interior boundary of a [`GeometricObject`](Python_User_Interface.md#geometricobject) (e.g., `Block`, `Sphere`, `Cylinder`, etc.), (2) the entire cell via the [`material_function`](Python_User_Interface.md#material-function) parameter of the `Simulation` constructor, or (3) a combination of the two. diff --git a/doc/docs/Installation.md b/doc/docs/Installation.md index ead7b677b..c99eb1029 100644 --- a/doc/docs/Installation.md +++ b/doc/docs/Installation.md @@ -123,7 +123,7 @@ There are upcoming packages for [Meep version 1.17.1](https://github.com/NanoCom In the meantime, the following dependencies are already available as precompiled packages: BLAS and LAPACK possibly as part of a package for [Atlas BLAS](https://en.wikipedia.org/wiki/Automatically_Tuned_Linear_Algebra_Software), Guile, MPI, and HDF5. One thing to be careful of is that many distributions split packages into two parts: one main package for the libraries and programs, and a **devel** package for [header files](https://en.wikipedia.org/wiki/Header_file) and other things needed to compile software using those libraries. You will need to install **both**. So, for example, you will probably need both a `guile` package (probably installed by default) and a `guile-dev` or `guile-devel` package (probably *not* installed by default), and similarly for HDF5 etcetera. You will probably also want to install a `libpng-dev` or `libpng-devel` package in order to compile the `h5topng` utility in [h5utils](https://github.com/NanoComp/h5utils/blob/master/README.md). -Installation from source on macOS +Installation from source on macOS --------------------------------- Most macOS users will probably want to install via the Conda packages as described above. It is also possible to compile Meep from source, however. diff --git a/doc/docs/Materials.md b/doc/docs/Materials.md index 2c5c131cb..25e6ceda4 100644 --- a/doc/docs/Materials.md +++ b/doc/docs/Materials.md @@ -188,7 +188,7 @@ Similar relationships can be found for systems with more than two atomic levels ### Natural Units for Saturable Media A conversion chart for different choices of parameter nomenclature for the saturable medium. - + There is no standard convention in the literature on lasers and saturable gain media for defining the various constants in the equations above. The following are the relationships among these constants for the three different groups of work discussed in this section: $$ \omega_n \; (\textrm{Meep}) = \omega_{ba} \; (\textrm{Boyd}) = \omega_a \; (\textrm{SALT}) $$ diff --git a/doc/docs/Python_Tutorials/Basics.md b/doc/docs/Python_Tutorials/Basics.md index d2a9c28d7..4ab0fde4c 100644 --- a/doc/docs/Python_Tutorials/Basics.md +++ b/doc/docs/Python_Tutorials/Basics.md @@ -242,7 +242,7 @@ Above, we outputted the full 2d data slice at every 0.6 time units, resulting in To create the movie above, all we really need are the *images* corresponding to each time. Images can be stored much more efficiently than raw arrays of numbers — to exploit this fact, Meep allows you to output PNG images instead of HDF5 files. In particular, instead of `output_efield_z` as above, we can use `mp.output_png(mp.Ez, "-Zc dkbluered")`, where Ez is the component to output and the `"-Zc` `dkbluered"` are options for `h5topng` of [h5utils](https://github.com/NanoComp/h5utils/blob/master/README.md) which is the program that is actually used to create the image files. That is: ```py -sim.run(mp.at_every(0.6 , mp.output_png(mp.Ez, "-Zc dkbluered")), until=200) +sim.run(mp.at_every(0.6 , mp.output_png(mp.Ez, "-Zc dkbluered")), until=200) ``` will output a PNG file file every 0.6 time units, which can then be combined with `convert` as above to create a movie. The movie will be similar to the one before, but not identical because of how the color scale is determined. Before, we used the `-R` option to make h5topng use a uniform color scale for all images, based on the minimum/maximum field values over all time steps. That is not possible because we output an image before knowing the field values at future time steps. Thus, what `output_png` does is to set its color scale based on the minimum/maximum field values from all *past* times — therefore, the color scale will slowly "ramp up" as the source turns on. @@ -258,7 +258,7 @@ This will put *all* of the output files (.h5, .png, etcetera) into a newly-creat What if we want to output an $x \times t$ slice, as above? To do this, we only really wanted the values at $y=-3.5$, and therefore we can exploit another powerful output feature — Meep allows us to output only **a subset of the computational cell**. This is done using the `in_volume` function, which like `at_every` and `to_appended` is another function that modifies the behavior of other output functions. In particular, we can do: ``` -sim.run(mp.in_volume(mp.Volume(mp.Vector3(0,-3.5), size=mp.Vector3(16,0)), mp.to_appended("ez-slice", mp.output_efield_z)), until=200) +sim.run(mp.in_volume(mp.Volume(mp.Vector3(0,-3.5), size=mp.Vector3(16,0)), mp.to_appended("ez-slice", mp.output_efield_z)), until=200) ``` The first argument to `in_volume` is a volume which applies to all of the nested output functions. Note that `to_appended`, `at_every`, and `in_volume` are cumulative regardless of what order you put them in. This creates the output file `ez-slice.h5` which contains a dataset of size 162x330 corresponding to the desired $x \times t$ slice. @@ -334,7 +334,7 @@ sim = mp.Simulation(cell_size=cell, nfreq = 100 # number of frequencies at which to compute flux # reflected flux -refl_fr = mp.FluxRegion(center=mp.Vector3(-0.5*sx+dpml+0.5,wvg_ycen,0), size=mp.Vector3(0,2*w,0)) +refl_fr = mp.FluxRegion(center=mp.Vector3(-0.5*sx+dpml+0.5,wvg_ycen,0), size=mp.Vector3(0,2*w,0)) refl = sim.add_flux(fcen, df, nfreq, refl_fr) # transmitted flux @@ -348,7 +348,7 @@ The fluxes will be computed for `nfreq=100` frequencies centered on `fcen`, from As described in [Introduction/Transmittance/Reflectance Spectra](../Introduction.md#transmittancereflectance-spectra), computing the reflection spectra requires some care because we need to separate the incident and reflected fields. We do this by first saving the Fourier-transformed fields from the normalization run. And then, before we start the second run, we load these fields, *negated*. The latter subtracts the Fourier-transformed incident fields from the Fourier transforms of the scattered fields. Logically, we might subtract these after the run, but it turns out to be more convenient to subtract the incident fields first and then accumulate the Fourier transform. All of this is accomplished with two commands which use the raw simulation data: `get_flux_data` and `load_minus_flux_data`. We run the first simulation as follows: -```py +```py pt = mp.Vector3(0.5*sx-dpml-0.5,wvg_ycen) sim.run(until_after_sources=mp.stop_when_fields_decayed(50,mp.Ez,pt,1e-3)) @@ -372,7 +372,7 @@ We need to run the second simulation which involves the waveguide bend. We reset ```py sim.reset_meep() - + geometry = [mp.Block(mp.Vector3(sx-pad,w,mp.inf), center=mp.Vector3(-0.5*pad,wvg_ycen), material=mp.Medium(epsilon=12)), mp.Block(mp.Vector3(w,sy-pad,mp.inf), center=mp.Vector3(wvg_xcen,0.5*pad), material=mp.Medium(epsilon=12))] @@ -387,7 +387,7 @@ refl = sim.add_flux(fcen, df, nfreq, refl_fr) tran_fr = mp.FluxRegion(center=mp.Vector3(wvg_xcen,0.5*sy-dpml-0.5,0), size=mp.Vector3(2*w,0,0)) tran = sim.add_flux(fcen, df, nfreq, tran_fr) - + # for normal run, load negated fields to subtract incident from refl. fields sim.load_minus_flux_data(refl, straight_refl_data) @@ -402,7 +402,7 @@ flux_freqs = mp.get_flux_freqs(refl) ``` With the flux data, we are ready to compute and plot the reflectance and transmittance. The reflectance is the reflected flux divided by the incident flux. We also have to multiply by -1 because all fluxes in Meep are computed in the positive-coordinate direction by default, and we want the flux in the $-x$ direction. The transmittance is the transmitted flux divided by the incident flux. Finally, the scattered loss is simply $1-transmittance-reflectance$. The results are plotted in the accompanying figure. - + ```py wl = [] Rs = [] @@ -410,7 +410,7 @@ Ts = [] for i in range(nfreq): wl = np.append(wl, 1/flux_freqs[i]) Rs = np.append(Rs,-bend_refl_flux[i]/straight_tran_flux[i]) - Ts = np.append(Ts,bend_tran_flux[i]/straight_tran_flux[i]) + Ts = np.append(Ts,bend_tran_flux[i]/straight_tran_flux[i]) if mp.am_master(): plt.figure() @@ -469,7 +469,7 @@ def main(args): fcen = 0.5*(fmin+fmax) # center frequency df = fmax-fmin # frequency width nfreq = 50 # number of frequency bins - + # rotation angle (in degrees) of source: CCW around Y axis, 0 degrees along +Z axis theta_r = math.radians(args.theta) @@ -481,7 +481,7 @@ def main(args): dimensions = 1 else: dimensions = 3 - + sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df), component=mp.Ex, center=mp.Vector3(0,0,-0.5*sz+dpml))] @@ -495,7 +495,7 @@ def main(args): refl_fr = mp.FluxRegion(center=mp.Vector3(0,0,-0.25*sz)) refl = sim.add_flux(fcen, df, nfreq, refl_fr) - + sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ex, mp.Vector3(0,0,-0.5*sz+dpml), 1e-9)) empty_flux = mp.get_fluxes(refl) @@ -522,10 +522,10 @@ def main(args): refl_flux = mp.get_fluxes(refl) freqs = mp.get_flux_freqs(refl) - + for i in range(nfreq): print("refl:, {}, {}, {}, {}".format(k.x,1/freqs[i],math.degrees(math.asin(k.x/freqs[i])),-refl_flux[i]/empty_flux[i])) - + if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('-res', type=int, default=200, help='resolution (default: 200 pixels/um)') @@ -882,7 +882,7 @@ for n in range(npts): E[n,:] = [np.conj(ff[j]) for j in range(3)] H[n,:] = [ff[j+3] for j in range(3)] -# compute Poynting flux Pr in the radial direction. At large r, +# compute Poynting flux Pr in the radial direction. At large r, # all of the flux is radial so we can simply compute the magnitude of the Poynting vector. Px = np.real(np.multiply(E[:,1],H[:,2])-np.multiply(E[:,2],H[:,1])) Py = np.real(np.multiply(E[:,2],H[:,0])-np.multiply(E[:,0],H[:,2])) @@ -1078,7 +1078,7 @@ Finally, we are ready to run the simulation. The basic idea is to run until the sim = mp.Simulation(cell_size=mp.Vector3(sxy, sxy), geometry=[c1, c2], sources=[src], - resolution=10, + resolution=10, boundary_layers=[mp.PML(dpml)]) sim.run(mp.at_beginning(mp.output_epsilon), diff --git a/doc/docs/Python_Tutorials/Local_Density_of_States.md b/doc/docs/Python_Tutorials/Local_Density_of_States.md index 5ceaae47e..fb66cb29b 100644 --- a/doc/docs/Python_Tutorials/Local_Density_of_States.md +++ b/doc/docs/Python_Tutorials/Local_Density_of_States.md @@ -25,7 +25,7 @@ In 3D, each simulation uses three [mirror symmetries](../Exploiting_Symmetry.md# In cylindrical coordinates, the dipole is polarized in the $r$ direction. Setting up a linearly polarized source in cylindrical coordiantes is demonstrated in [Tutorial/Cylindrical Coordinates/Scattering Cross Section of a Finite Dielectric Cylinder](Cylindrical_Coordinates.md#scattering-cross-section-of-a-finite-dielectric-cylinder). However, all that is necessary in this example which involves a single point dipole rather than a planewave is one simulation involving an $E_r$ source at $r=0$ with $m=-1$. This is actually a circularly polarized source but this is sufficient because the $m=+1$ simulation produces an identical result to the $m=-1$ simulation. It is therefore not necessary to perform two separate simulations for $m=\pm 1$ in order to average the results from the left- and right-circularly polarized sources. -One important parameter when setting up this calculation is the grid resolution. +One important parameter when setting up this calculation is the grid resolution. A key feature of the LDOS in this geometry is that it experiences discontinuities, called [Van Hove singularities](https://en.wikipedia.org/wiki/Van_Hove_singularity), any time the cavity thickness/λ passes through the cutoff for a waveguide mode, which occurs for cavity-thickness/λ values of 0.5, 1.5, 2.5, etc. (Mathematically, Van Hove singularities depend strongly on the dimensionality — it is a discontinuity in this case because the waves are propagating along two dimensions, i.e. each cutoff is a minimum in the 2d dispersion relation $\omega(k_x,k_y)$.) This discontinuity also means that the LDOS *exactly at* the cutoff thickness/λ is ill-defined and convergence with discretization can be problematic at this point. (In consequence, the LDOS *exactly* at the Van Hove discontinuity can behave erratically with resolution, and should be viewed with caution.) diff --git a/doc/docs/Python_Tutorials/Mode_Decomposition.md b/doc/docs/Python_Tutorials/Mode_Decomposition.md index d3e44ebe6..4565f3cb5 100644 --- a/doc/docs/Python_Tutorials/Mode_Decomposition.md +++ b/doc/docs/Python_Tutorials/Mode_Decomposition.md @@ -340,7 +340,7 @@ sx = dpml+dsub+gh+dpad+dpml sy = gp cell_size = mp.Vector3(sx,sy,0) -pml_layers = [mp.PML(thickness=dpml,direction=mp.X)] +pml_layers = [mp.PML(thickness=dpml,direction=mp.X)] wvl = 0.5 # center wavelength fcen = 1/wvl # center frequency diff --git a/doc/docs/Python_Tutorials/Multilevel_Atomic_Susceptibility.md b/doc/docs/Python_Tutorials/Multilevel_Atomic_Susceptibility.md index 64fca8bf6..65825035a 100644 --- a/doc/docs/Python_Tutorials/Multilevel_Atomic_Susceptibility.md +++ b/doc/docs/Python_Tutorials/Multilevel_Atomic_Susceptibility.md @@ -101,7 +101,7 @@ $$ \mathbf{E} \; (\textrm{SALT}) = \frac{2 |\theta|}{\hbar \sqrt{\gamma_\perp \g For two-level gain media, $\gamma_\parallel = \gamma_{12} + \gamma_{21}$. We can also verify that the system is not exhibiting relaxation oscillations by directly plotting the electric field as a function of time and looking for very long time-scale oscillations. In the continuum limit, these modes would appear as Dirac delta functions in the spectra. The discretized model, however, produces peaks with finite width. Thus, we need to integrate a fixed number of points around each peak to calculate the correct modal intensity. -By varying $N_0$ or the pumping rate $R_p$, we can change the total gain available in the cavity. This is used to find the laser's modal intensities as a function of the strength of the gain. We can compare the simulated modal intensity with SALT as well as an independent FDTD solver based on the Maxwell-Bloch equations. All three methods produce results with good agreement close to the first lasing threshold. +By varying $N_0$ or the pumping rate $R_p$, we can change the total gain available in the cavity. This is used to find the laser's modal intensities as a function of the strength of the gain. We can compare the simulated modal intensity with SALT as well as an independent FDTD solver based on the Maxwell-Bloch equations. All three methods produce results with good agreement close to the first lasing threshold.

Near threshold comparison @@ -113,4 +113,3 @@ Further increasing the gain continues to yield good agreement.

Near threshold comparison

- diff --git a/doc/docs/Python_Tutorials/Optical_Forces.md b/doc/docs/Python_Tutorials/Optical_Forces.md index 39433bd3f..28131a30c 100644 --- a/doc/docs/Python_Tutorials/Optical_Forces.md +++ b/doc/docs/Python_Tutorials/Optical_Forces.md @@ -29,12 +29,12 @@ import numpy as np import matplotlib.pyplot as plt resolution = 40 # pixels/μm - + Si = mp.Medium(index=3.45) dpml = 1.0 pml_layers = [mp.PML(dpml)] - + sx = 5 sy = 3 cell = mp.Vector3(sx+2*dpml,sy+2*dpml,0) diff --git a/doc/docs/Python_Tutorials/Resonant_Modes_and_Transmission_in_a_Waveguide_Cavity.md b/doc/docs/Python_Tutorials/Resonant_Modes_and_Transmission_in_a_Waveguide_Cavity.md index e1d291ce6..3fac28958 100644 --- a/doc/docs/Python_Tutorials/Resonant_Modes_and_Transmission_in_a_Waveguide_Cavity.md +++ b/doc/docs/Python_Tutorials/Resonant_Modes_and_Transmission_in_a_Waveguide_Cavity.md @@ -37,7 +37,7 @@ Next, we'll define some parameters of our structure as in the figure above. All ```py resolution = 20 # pixels/um - + eps = 13 # dielectric constant of waveguide w = 1.2 # width of waveguide r = 0.36 # radius of holes @@ -206,7 +206,7 @@ The structure is exactly the same as above, and only the sources and analysis ar ```py if args.resonant_modes: ...new sources and run command... -else: +else: ...sources and run from above, to get spectrum... ``` @@ -260,7 +260,7 @@ unix% convert holey-wvg-cavity-hz-*.png holey-wvg-cavity-hz.gif

-The mode has a frequency of 0.235, just as we saw in the transmission spectrum, and a $Q$ of 373 which we could have also found by fitting the transmission spectrum. This lifetime $Q$ includes two independent decay channels: light can decay from the cavity into the waveguide with lifetime $Q_w$, or it can radiate from the cavity into the surrounding air with lifetime $Q_r$, where +The mode has a frequency of 0.235, just as we saw in the transmission spectrum, and a $Q$ of 373 which we could have also found by fitting the transmission spectrum. This lifetime $Q$ includes two independent decay channels: light can decay from the cavity into the waveguide with lifetime $Q_w$, or it can radiate from the cavity into the surrounding air with lifetime $Q_r$, where $$\frac{1}{Q} = \frac{1}{Q_w} + \frac{1}{Q_r}$$ @@ -387,7 +387,7 @@ unix% grep freqs: holey-wvg-bands.out > fre.dat unix% grep freqs-im: holey-wvg-bands.out > fim.dat ``` -Plotting the real parts of ω, where the light cone ω > *ck* is shaded gray, we find: +Plotting the real parts of ω, where the light cone ω > *ck* is shaded gray, we find:

diff --git a/doc/docs/Python_User_Interface.md b/doc/docs/Python_User_Interface.md index 3df3c2f2d..a6959c85f 100644 --- a/doc/docs/Python_User_Interface.md +++ b/doc/docs/Python_User_Interface.md @@ -80,7 +80,7 @@ control various parameters of the Meep computation. - +

@@ -356,7 +356,7 @@ use. See also [SWIG Wrappers](#swig-wrappers).
- +
diff --git a/doc/docs/Scheme_Tutorials/Basics.md b/doc/docs/Scheme_Tutorials/Basics.md index e45c00837..7fd12258f 100644 --- a/doc/docs/Scheme_Tutorials/Basics.md +++ b/doc/docs/Scheme_Tutorials/Basics.md @@ -108,7 +108,7 @@ This will create `eps-000000.00.png`, where the `-S3` increases the image scale unix% h5topng -S3 -Zc dkbluered -a yarg -A eps-000000.00.h5 ez-000200.00.h5 ``` -Briefly, the `-Zc dkbluered` makes the color scale go from dark blue (negative) to white (zero) to dark red (positive), and the `-a/-A` options overlay the dielectric function as light gray contours. This results in the image: +Briefly, the `-Zc dkbluered` makes the color scale go from dark blue (negative) to white (zero) to dark red (positive), and the `-a/-A` options overlay the dielectric function as light gray contours. This results in the image:
![](../images/Tutorial-wvg-straight-ez-000200.00.png)
@@ -433,7 +433,7 @@ The simulation script is [examples/refl-angular.ctl](https://github.com/NanoComp (define df (- fmax fmin)) ; frequency width of source (define-param nfreq 50) ; number of frequency bins -; rotation angle (in degrees) of source: CCW around Y axis, 0 degrees along +Z axis +; rotation angle (in degrees) of source: CCW around Y axis, 0 degrees along +Z axis (define-param theta 0) (define theta-r (deg->rad theta)) diff --git a/doc/docs/Scheme_Tutorials/Casimir_Forces.md b/doc/docs/Scheme_Tutorials/Casimir_Forces.md index c0e6b2cea..109d0b486 100644 --- a/doc/docs/Scheme_Tutorials/Casimir_Forces.md +++ b/doc/docs/Scheme_Tutorials/Casimir_Forces.md @@ -526,4 +526,3 @@ If you examine periodic-sphere-plate.ctl in the example above, you will notice t As discussed in Part I, the temporal convergence of the force $F(t)$ can be accelerated by picking the right value of the global conductivity $\sigma$. $\sigma$ should be high enough to dampen out oscillations in $F(t)$, but on the other hand a high conductivity reduces the velocity of waves propagating in the medium (see Part I), slowing convergence. We've found that if the characteristic separation between two objects (e.g. the distance between parallel plates) in vacuum is $d$, then picking $\sigma ~\sim~ 0.5/d$. This is illustrated in the function `scale-sigma-T` in periodic-sphere-plate.ctl above. Both the value of $\sigma$ and the total runtime $T$ of the simulation are adjusted depending on the separation between the objects. If the dielectric of the medium is non-zero, then for non-dispersive media the optimal value of $\sigma$ follows from group velocity considerations. For dispersive media, the convergence should be experimented with to determine the best value. Generally, as the dielectric $\epsilon$ of the medium increases, $\sigma$ should decrease. - diff --git a/doc/docs/Scheme_Tutorials/Custom_Source.md b/doc/docs/Scheme_Tutorials/Custom_Source.md index 88c7422f9..7efb6fe62 100644 --- a/doc/docs/Scheme_Tutorials/Custom_Source.md +++ b/doc/docs/Scheme_Tutorials/Custom_Source.md @@ -172,4 +172,4 @@ One situation in which you may need to perform brute-force Monte Carlo simulatio *Note regarding convergence properties of Method 2:* In this demonstration, the number of point dipoles used in Method 2 is one per pixel. However, because this example is a unit-cell calculation involving *periodic* boundaries, the number of point dipoles (equivalent to the number of simulations) that are actually necessary to obtain results with sufficient accuracy can be significantly reduced. For smooth periodic functions, it is well known that a [trapezoidal rule](https://en.wikipedia.org/wiki/Trapezoidal_rule) converges quite fast — generally even faster than a cosine-series expansion and comparable to a cosine+sine Fourier series. See these [tutorial notes](http://math.mit.edu/~stevenj/trap-iap-2011.pdf) for the mathematical details. In this example, placing one dipole at every fifth pixel for a total of 15 rather than 75 simulations produces nearly equivalent results for the flux spectrum. More generally, an alternative approach for Method 2 would be to sample a set of dipole points and repeatedly double the sampling density until it converges. Sampling every grid point is usually not necessary. -*Note regarding polarization:* The previous demonstration involved a single-polarization source. For random polarizations, three separate simulations (for $\mathcal{J}_x$, $\mathcal{J}_y$, and $\mathcal{J}_z$) are required. Since the different polarizations are uncorrelated, the results (i.e., the flux spectrum) from each set of single-polarization simulations (which, in general, will have different convergence properties) are then summed in post processing. If the emitters involve *anisotropic* polarizability then the polarizations are correlated. However, in this case choosing the polarizations to correspond to the three principal axes will again make them uncorrelated. \ No newline at end of file +*Note regarding polarization:* The previous demonstration involved a single-polarization source. For random polarizations, three separate simulations (for $\mathcal{J}_x$, $\mathcal{J}_y$, and $\mathcal{J}_z$) are required. Since the different polarizations are uncorrelated, the results (i.e., the flux spectrum) from each set of single-polarization simulations (which, in general, will have different convergence properties) are then summed in post processing. If the emitters involve *anisotropic* polarizability then the polarizations are correlated. However, in this case choosing the polarizations to correspond to the three principal axes will again make them uncorrelated. diff --git a/doc/docs/Scheme_Tutorials/Cylindrical_Coordinates.md b/doc/docs/Scheme_Tutorials/Cylindrical_Coordinates.md index a15d15f1c..4b6fcc95d 100644 --- a/doc/docs/Scheme_Tutorials/Cylindrical_Coordinates.md +++ b/doc/docs/Scheme_Tutorials/Cylindrical_Coordinates.md @@ -551,4 +551,4 @@ Shown below is the far-field energy-density profile around the focal length for
![](../images/zone_plate_farfield.png) -
\ No newline at end of file + diff --git a/doc/docs/Scheme_Tutorials/Local_Density_of_States.md b/doc/docs/Scheme_Tutorials/Local_Density_of_States.md index ec91d66ca..f900cae5b 100644 --- a/doc/docs/Scheme_Tutorials/Local_Density_of_States.md +++ b/doc/docs/Scheme_Tutorials/Local_Density_of_States.md @@ -85,4 +85,4 @@ We run several simulations spanning a number of different notch sizes and plot t
![](../images/Metalcavity_ldos.png) -
\ No newline at end of file + diff --git a/doc/docs/Scheme_Tutorials/Multilevel_Atomic_Susceptibility.md b/doc/docs/Scheme_Tutorials/Multilevel_Atomic_Susceptibility.md index fc6a08009..490369823 100644 --- a/doc/docs/Scheme_Tutorials/Multilevel_Atomic_Susceptibility.md +++ b/doc/docs/Scheme_Tutorials/Multilevel_Atomic_Susceptibility.md @@ -57,7 +57,7 @@ The term in parenthesis on the right-hand side is the definition of $D_0$ in nor           (initial-populations N0))))) (set! geometry (list (make block (center 0 0 (+ (* -0.5 sz) (* 0.5 Lcav))) -                           (size infinity infinity Lcav) (material two-level)))) +                           (size infinity infinity Lcav) (material two-level)))) ``` Definition of the two-level medium involves the `multilevel-atom` sub-class of the `E-susceptibilities` material type. Each radiative and non-radiative `transition` is specified separately. Note that internally, Meep treats `pumping-rate` and `transition-rate` identically, and you can use them interchangeably, but it is important to specify the `from-level` and `to-level` parameters correctly, otherwise the results will be undefined. The choice of these parameters requires some care. For example, choosing a pumping rate that lies far beyond the first lasing threshold will yield large inversion, and thus large gain, which is not realistic, as most physical devices will overheat before reaching such a regime. Meep will still produce accurate results in this regime though. Additionally, choosing the total simulation time is especially important when operating near the threshold of a lasing mode, as the fields contain relaxation oscillations and require sufficient time to reach steady state. @@ -90,7 +90,7 @@ $$ \mathbf{E} \; (\textrm{SALT}) = \frac{2 |\theta|}{\hbar \sqrt{\gamma_\perp \g For two-level gain media, $\gamma_\parallel = \gamma_{12} + \gamma_{21}$. We can also verify that the system is not exhibiting relaxation oscillations by directly plotting the electric field as a function of time and looking for very long time-scale oscillations. In the continuum limit, these modes would appear as Dirac delta functions in the spectra. The discretized model, however, produces peaks with finite width. Thus, we need to integrate a fixed number of points around each peak to calculate the correct modal intensity. -By varying $N_0$ or the pumping rate $R_p$, we can change the total gain available in the cavity. This is used to find the laser's modal intensities as a function of the strength of the gain. We can compare the simulated modal intensity with SALT as well as an independent FDTD solver based on the Maxwell-Bloch equations. All three methods produce results with good agreement close to the first lasing threshold. +By varying $N_0$ or the pumping rate $R_p$, we can change the total gain available in the cavity. This is used to find the laser's modal intensities as a function of the strength of the gain. We can compare the simulated modal intensity with SALT as well as an independent FDTD solver based on the Maxwell-Bloch equations. All three methods produce results with good agreement close to the first lasing threshold.
![Near threshold comparison](../images/meep_salt_comparison_thresh.png) @@ -100,4 +100,4 @@ Further increasing the gain continues to yield good agreement.
![Near threshold comparison](../images/meep_salt_comparison_full.png) -
\ No newline at end of file +
diff --git a/doc/docs/Scheme_Tutorials/Optical_Forces.md b/doc/docs/Scheme_Tutorials/Optical_Forces.md index 2dd1529e7..d28fc2323 100644 --- a/doc/docs/Scheme_Tutorials/Optical_Forces.md +++ b/doc/docs/Scheme_Tutorials/Optical_Forces.md @@ -188,4 +188,4 @@ function force = compute_force(data) force = -1./f_avg .* df/ds .* 1./vg_avg; return endfunction -``` \ No newline at end of file +``` diff --git a/doc/docs/Scheme_Tutorials/Resonant_Modes_and_Transmission_in_a_Waveguide_Cavity.md b/doc/docs/Scheme_Tutorials/Resonant_Modes_and_Transmission_in_a_Waveguide_Cavity.md index b82a4c24c..9f17e834c 100644 --- a/doc/docs/Scheme_Tutorials/Resonant_Modes_and_Transmission_in_a_Waveguide_Cavity.md +++ b/doc/docs/Scheme_Tutorials/Resonant_Modes_and_Transmission_in_a_Waveguide_Cavity.md @@ -242,7 +242,7 @@ unix% convert holey-wvg-cavity-hz-*.png holey-wvg-cavity-hz.gif ![](../images/Holey-wvg-cavity-hz.gif) -The mode has a frequency of 0.235, just as we saw in the transmission spectrum, and a $Q$ of 373 which we could have also found by fitting the transmission spectrum. This lifetime $Q$ includes two independent decay channels: light can decay from the cavity into the waveguide with lifetime $Q_w$, or it can radiate from the cavity into the surrounding air with lifetime $Q_r$, where +The mode has a frequency of 0.235, just as we saw in the transmission spectrum, and a $Q$ of 373 which we could have also found by fitting the transmission spectrum. This lifetime $Q$ includes two independent decay channels: light can decay from the cavity into the waveguide with lifetime $Q_w$, or it can radiate from the cavity into the surrounding air with lifetime $Q_r$, where $$\frac{1}{Q} = \frac{1}{Q_w} + \frac{1}{Q_r}$$ @@ -363,7 +363,7 @@ unix% grep freqs: holey-wvg-bands.out > fre.dat unix% grep freqs-im: holey-wvg-bands.out > fim.dat ``` -Plotting the real parts of ω, where the light cone ω > *ck* is shaded gray, we find: +Plotting the real parts of ω, where the light cone ω > *ck* is shaded gray, we find:
![](../images/Holey-wvg-bands.png) diff --git a/doc/docs/Subpixel_Smoothing.md b/doc/docs/Subpixel_Smoothing.md index e9fab5122..c03f28e67 100644 --- a/doc/docs/Subpixel_Smoothing.md +++ b/doc/docs/Subpixel_Smoothing.md @@ -85,7 +85,7 @@ for rad in np.arange(1.800,2.001,0.005): radius=rad, height=mp.inf, center=mp.Vector3())] - + sim = mp.Simulation(cell_size=mp.Vector3(sxy,sxy), geometry=geometry, eps_averaging=True, diff --git a/doc/docs/Synchronizing_the_Magnetic_and_Electric_Fields.md b/doc/docs/Synchronizing_the_Magnetic_and_Electric_Fields.md index d1a4cde8b..a230a2f7d 100644 --- a/doc/docs/Synchronizing_the_Magnetic_and_Electric_Fields.md +++ b/doc/docs/Synchronizing_the_Magnetic_and_Electric_Fields.md @@ -41,4 +41,4 @@ it will output the same quantities, but more accurately because the fields will Alternatively, if you want to synchronize the magnetic and electric fields in some context other than that of a step function, e.g. you are doing some computation like `integrate_field_function` (Python) or `integrate-field-function` (Scheme) outside of the timestepping, you can instead call two lower-level functions. Before doing your computations, you should call `meep.Simulation.fields.synchronize_magnetic_fields()` (Python) or `(meep-fields-synchronize-magnetic-fields fields)` (Scheme) to synchronize the magnetic fields with the electric fields, and after your computation you should call `meep.Simulation.fields.restore_magnetic_fields()` (Python) or `(meep-fields-restore-magnetic-fields fields)` (Scheme) to restore the fields to their unsynchronized state for timestepping. In the C++ interface, these correspond to `fields::synchronize_magnetic_fields` and `fields::restore_magnetic_fields`. If you *don't* call `meep.Simulation.fields.restore_magnetic_fields` or `meep-fields-restore-magnetic-fields` before timestepping, then the fields will be re-synchronized after *every* timestep, which will greatly increase the cost of timestepping. -In future versions, the fields may be synchronized automatically whenever you output something like the Poynting vector or do another field computation that involves both magnetic and electric fields, but currently you must do this manually (Issue [#719](https://github.com/NanoComp/meep/issues/719)). In any case, Meep does no additional work when you nest synchronization calls, so it is harmless to insert redundant field synchronizations. The `flux_in_box` (Python) or `flux-in-box` (Scheme) and `field_energy_in_box` (Python) or `field-energy-in-box` (Scheme) routines are already automatically synchronized, however. \ No newline at end of file +In future versions, the fields may be synchronized automatically whenever you output something like the Poynting vector or do another field computation that involves both magnetic and electric fields, but currently you must do this manually (Issue [#719](https://github.com/NanoComp/meep/issues/719)). In any case, Meep does no additional work when you nest synchronization calls, so it is harmless to insert redundant field synchronizations. The `flux_in_box` (Python) or `flux-in-box` (Scheme) and `field_energy_in_box` (Python) or `field-energy-in-box` (Scheme) routines are already automatically synchronized, however. diff --git a/doc/docs/The_Run_Function_Is_Not_A_Loop.md b/doc/docs/The_Run_Function_Is_Not_A_Loop.md index 258bd6681..e7fb49c04 100644 --- a/doc/docs/The_Run_Function_Is_Not_A_Loop.md +++ b/doc/docs/The_Run_Function_Is_Not_A_Loop.md @@ -36,7 +36,7 @@ sim.run(meep.output_efield_z, print("Hello World!"), until=200) **Scheme** ```scm -(run-until 200 output-efield-z (print "Hello World!\n")) +(run-until 200 output-efield-z (print "Hello World!\n")) ``` **This is wrong.** It will output "Hello World!" *once*, then give an error. What is going on? The problem is that you are thinking of `run` (Python) or `run-until` (Scheme) in the wrong way, as if it were a loop: @@ -104,4 +104,4 @@ sim.run(meep.output_efield_z, lambda sim: print("Hello World!"), until=200) (run-until 200 output-efield-z (lambda () (print "Hello World!\n"))) ``` -In Python, `lambda sim: ...` defines a function of one argument `sim`. In Scheme, `(lambda () ...)` defines a function of no arguments `()`. Both functions, when called, execute the `...` statements. \ No newline at end of file +In Python, `lambda sim: ...` defines a function of one argument `sim`. In Scheme, `(lambda () ...)` defines a function of no arguments `()`. Both functions, when called, execute the `...` statements. diff --git a/doc/docs/Yee_Lattice.md b/doc/docs/Yee_Lattice.md index 7464961c9..34864e30d 100644 --- a/doc/docs/Yee_Lattice.md +++ b/doc/docs/Yee_Lattice.md @@ -30,4 +30,4 @@ In two dimensions, the arrangement is similar except that we set $\hat{\mathbf{e The consequence of the Yee lattice is that, whenever you need to access field components, e.g. to find the energy density $(\mathbf{E}^* \cdot \mathbf{D} + |\mathbf{H}|^2)/2$ or the flux $\textrm{Re}\, \mathbf{E}^* \times \mathbf{H}$, then the components need to be **interpolated** to some common point in order to remain second-order accurate. Meep automatically does this [interpolation](Introduction.md#the-illusion-of-continuity) for you wherever necessary — in particular, whenever you compute [energy density](Python_User_Interface.md#energy-density-spectra) or [Poynting flux](Python_User_Interface.md#flux-spectra), or whenever you [output a field to a file](Python_User_Interface.md#output-functions), it is stored at the centers of each grid voxel: $(i+0.5,j+0.5,k+0.5)$. -In a Meep simulation, the coordinates of the Yee lattice can be obtained using a [field function](Field_Functions.md#coordinates-of-the-yee-grid). \ No newline at end of file +In a Meep simulation, the coordinates of the Yee lattice can be obtained using a [field function](Field_Functions.md#coordinates-of-the-yee-grid). diff --git a/doc/docs/mathjaxhelper.js b/doc/docs/mathjaxhelper.js index bec7b177c..96f40a91d 100644 --- a/doc/docs/mathjaxhelper.js +++ b/doc/docs/mathjaxhelper.js @@ -1,5 +1,5 @@ MathJax.Hub.Config({ - config: ["MMLorHTML.js"], - jax: ["input/TeX", "output/HTML-CSS", "output/NativeMML"], - extensions: ["MathMenu.js", "MathZoom.js"] + config : [ "MMLorHTML.js" ], + jax : [ "input/TeX", "output/HTML-CSS", "output/NativeMML" ], + extensions : [ "MathMenu.js", "MathZoom.js" ] }); diff --git a/doc/docs/mdx_math.py b/doc/docs/mdx_math.py index 75ecd3238..ef2cfc0fd 100644 --- a/doc/docs/mdx_math.py +++ b/doc/docs/mdx_math.py @@ -1,57 +1,60 @@ -# -*- coding: utf-8 -*- - -''' +""" Math extension for Python-Markdown ================================== Adds support for displaying math formulas using [MathJax](http://www.mathjax.org/). Author: 2015, Dmitry Shachnev . -''' - +""" import markdown + class MathExtension(markdown.extensions.Extension): def __init__(self, *args, **kwargs): self.config = { - 'enable_dollar_delimiter': [False, 'Enable single-dollar delimiter'], + "enable_dollar_delimiter": [False, "Enable single-dollar delimiter"], } - super(MathExtension, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) def extendMarkdown(self, md, md_globals): def handle_match_inline(m): - node = markdown.util.etree.Element('script') - node.set('type', 'math/tex') + node = markdown.util.etree.Element("script") + node.set("type", "math/tex") node.text = markdown.util.AtomicString(m.group(3)) return node def handle_match(m): - node = markdown.util.etree.Element('script') - node.set('type', 'math/tex; mode=display') - if '\\begin' in m.group(2): - node.text = markdown.util.AtomicString(m.group(2) + m.group(4) + m.group(5)) + node = markdown.util.etree.Element("script") + node.set("type", "math/tex; mode=display") + if "\\begin" in m.group(2): + node.text = markdown.util.AtomicString( + m.group(2) + m.group(4) + m.group(5) + ) else: node.text = markdown.util.AtomicString(m.group(3)) return node configs = self.getConfigs() inlinemathpatterns = ( - markdown.inlinepatterns.Pattern(r'(? 50: params = [] for idx, param in enumerate(parameters): - params.append('('+str(param) if idx==0 else ' '*indent+param) - param_str = ',\n'.join(params) - param_str += ')' + params.append( + "(" + str(param) if idx == 0 else " " * indent + param + ) + param_str = ",\n".join(params) + param_str += ")" return param_str except ValueError as ex: - print("Warning: falling back to old parameter extraction method for {}\n{}".format(self.name, ex)) + print( + "Warning: falling back to old parameter extraction method for {}\n{}".format( + self.name, ex + ) + ) except OSError: # This happens when there is no source for some function/class (like NamedTuples) pass @@ -164,12 +169,13 @@ def get_parameters(self, indent): parameters = list(self.sig.parameters.values()) params = [] for idx, param in enumerate(parameters): - params.append('('+str(param) if idx==0 else ' '*indent+str(param)) - param_str = ',\n'.join(params) - param_str += ')' + params.append( + "(" + str(param) if idx == 0 else " " * indent + str(param) + ) + param_str = ",\n".join(params) + param_str += ")" return param_str - def get_parameters_from_ast(self): # Use Python's ast module to parse the function's code and pull out parameter names and # the text for default values. @@ -185,13 +191,15 @@ def parse_name(node): func = module.body[0] if not isinstance(func, ast.FunctionDef): - raise ValueError('Unsupported node type: {}'.format(type(func))) + raise ValueError(f"Unsupported node type: {type(func)}") # Get the param name and defaults together into a list of tuples args = reversed(func.args.args) defaults = reversed(func.args.defaults) iter = itertools.zip_longest(args, defaults, fillvalue=None) - parameters = [(parse_name(name), default) for name, default in reversed(list(iter))] + parameters = [ + (parse_name(name), default) for name, default in reversed(list(iter)) + ] # Convert each of the parameters (name, ast.node) to valid Python parameter # code, like what would have been in the actual source code. @@ -201,13 +209,13 @@ def parse_name(node): transformed.append(name) else: default = self.transform_node(name, node) - transformed.append("{}={}".format(name, default)) + transformed.append(f"{name}={default}") # Check for vararg (like *foo) and kwarg (like **bar) parameters if func.args.vararg is not None: - transformed.append('*{}'.format(func.args.vararg.arg)) + transformed.append(f"*{func.args.vararg.arg}") if func.args.kwarg is not None: - transformed.append('**{}'.format(func.args.kwarg.arg)) + transformed.append(f"**{func.args.kwarg.arg}") return transformed @@ -239,42 +247,41 @@ def transform_node(self, name, node): # print('Using inspect module for {}={} in {}'.format(name, default, self.name)) return default - def check_other_signatures(self, docstring): - """ Search for alternate function signatures in the docstring """ - SIG = '##sig' - SIG_KEEP = '##sig-keep' - other_signatures = '' + """Search for alternate function signatures in the docstring""" + SIG = "##sig" + SIG_KEEP = "##sig-keep" + other_signatures = "" if SIG in docstring or SIG_KEEP in docstring: other_sigs = [] docstring_lines = [] - for line in docstring.split('\n'): + for line in docstring.split("\n"): if line.endswith(SIG): - line = line.replace(SIG, '') + line = line.replace(SIG, "") line = line.strip() - line = line.replace('`', '') + line = line.replace("`", "") other_sigs.append(line) elif line.endswith(SIG_KEEP): - line = line.replace(SIG_KEEP, '') + line = line.replace(SIG_KEEP, "") line = line.strip() docstring_lines.append(line) - line = line.replace('`', '') + line = line.replace("`", "") other_sigs.append(line) else: docstring_lines.append(line) - docstring = '\n'.join(docstring_lines) - other_signatures = ''.join(['\ndef {}:'.format(item) for item in other_sigs]) + docstring = "\n".join(docstring_lines) + other_signatures = "".join([f"\ndef {item}:" for item in other_sigs]) return docstring, other_signatures def create_markdown(self): # pull relevant attributes into local variables function_name = self.name - function_name_escaped = function_name.replace('_', '\\_') - docstring = self.docstring if self.docstring else '' + function_name_escaped = function_name.replace("_", "\\_") + docstring = self.docstring if self.docstring else "" parameters = self.get_parameters(len(function_name) + 1) docstring, other_signatures = self.check_other_signatures(docstring) @@ -287,20 +294,21 @@ class MethodItem(FunctionItem): An introspected item that is a method of a class. Mostly the same as a FunctionItem, but can do extra stuff for methods if needed. """ - template_name = 'method_template.md' + + template_name = "method_template.md" def __init__(self, name, obj, klass): - super(MethodItem, self).__init__(name, obj) + super().__init__(name, obj) self.klass = klass self.method_name = name - self.name = '{}.{}'.format(klass.name, name) + self.name = f"{klass.name}.{name}" def create_markdown(self): # pull relevant attributes into local variables class_name = self.klass.name method_name = self.method_name - method_name_escaped = method_name.replace('_', '\\_') - docstring = self.docstring if self.docstring else '' + method_name_escaped = method_name.replace("_", "\\_") + docstring = self.docstring if self.docstring else "" parameters = self.get_parameters(4 + len(method_name) + 1) docstring, other_signatures = self.check_other_signatures(docstring) @@ -312,10 +320,11 @@ class ClassItem(Item): """ An introspected item that is a Class. """ - template_name = 'class_template.md' + + template_name = "class_template.md" def __init__(self, name, obj): - super(ClassItem, self).__init__(name, obj) + super().__init__(name, obj) self.add_methods() def add_methods(self): @@ -323,40 +332,45 @@ def add_methods(self): # inherited members def _predicate(value): if inspect.isfunction(value): - class_name = value.__qualname__.split('.')[0] + class_name = value.__qualname__.split(".")[0] return class_name == self.name else: return False self.methods = [] for name, member in inspect.getmembers(self.obj, _predicate): - if inspect.isfunction(member): # unbound methods are just functions at this point + if inspect.isfunction( + member + ): # unbound methods are just functions at this point self.methods.append(MethodItem(name, member, self)) def create_markdown(self): # pull relevant attributes into local variables class_name = self.name - docstring = self.docstring if self.docstring else '' + docstring = self.docstring if self.docstring else "" base_classes = [base.__name__ for base in self.obj.__bases__] - base_classes = ', '.join(base_classes) + base_classes = ", ".join(base_classes) # Substitute values into the template docs = dict() class_doc = self.template.format(**locals()) docs[class_name] = class_doc - docs[class_name+'[all-methods]'] = class_doc + '\n' + self.create_method_markdown(False) - docs[class_name+'[methods-with-docstrings]'] = class_doc + '\n' + self.create_method_markdown(True) + docs[class_name + "[all-methods]"] = ( + class_doc + "\n" + self.create_method_markdown(False) + ) + docs[class_name + "[methods-with-docstrings]"] = ( + class_doc + "\n" + self.create_method_markdown(True) + ) return docs - def create_method_markdown(self, only_with_docstrings=True): method_docs = [] if self.methods: # reorder self.methods so __init__ comes first, if it isn't already methods = self.methods[:] for idx, meth in enumerate(self.methods): - if meth.name == '__init__': + if meth.name == "__init__": if idx != 0: methods.remove(meth) methods.insert(0, meth) @@ -365,22 +379,24 @@ def create_method_markdown(self, only_with_docstrings=True): for item in methods: if only_with_docstrings and not item.docstring: continue - if not check_excluded(item.name) and \ - not check_excluded('{}.{}'.format(self.name, item.name)): - doc = item.create_markdown() - method_docs.append(doc) + if not check_excluded(item.name) and not check_excluded( + f"{self.name}.{item.name}" + ): + doc = item.create_markdown() + method_docs.append(doc) # join the methods into a single string - method_docs = '\n'.join(method_docs) + method_docs = "\n".join(method_docs) return method_docs -#---------------------------------------------------------------------------- +# ---------------------------------------------------------------------------- + def check_excluded(name): if name in EXCLUDES: return True - if name.startswith('_') and not (name.startswith('__') and name.endswith('__')): + if name.startswith("_") and not (name.startswith("__") and name.endswith("__")): # It's probably meant to be private return True return False @@ -428,27 +444,25 @@ def update_api_document(doc_items): to DESTDOC. """ # read - with open(SRCDOC, 'r') as f: + with open(SRCDOC) as f: srcdoc = f.read() # manipulate for name, doc in doc_items.items(): - tag = '@@ {} @@'.format(name) + tag = f"@@ {name} @@" if tag in srcdoc: srcdoc = srcdoc.replace(tag, doc) # write results - with open(DESTDOC, 'w') as f: + with open(DESTDOC, "w") as f: f.write(srcdoc) - def main(args): items = load_module(meep) doc_items = generate_docs(items) update_api_document(doc_items) - -if __name__ == '__main__': - main(sys.argv[1:]) \ No newline at end of file +if __name__ == "__main__": + main(sys.argv[1:]) diff --git a/libpympb/pympb.cpp b/libpympb/pympb.cpp index 639aab4e5..c6033cb99 100644 --- a/libpympb/pympb.cpp +++ b/libpympb/pympb.cpp @@ -27,27 +27,27 @@ extern "C" int mpb_verbosity = 2; int xyz_index = ((i1 * n2 + i2) * n3 + i3); // #else /* HAVE_MPI */ // /* first two dimensions are transposed in MPI output: */ -// #define LOOP_XYZ(md) \ -// { \ -// int n1 = md->nx, n2 = md->ny, n3 = md->nz, i1, i2_, i3; \ -// int local_n2 = md->local_ny, local_y_start = md->local_y_start; \ -// for (i2_ = 0; i2_ < local_n2; ++i2_) \ -// for (i1 = 0; i1 < n1; ++i1) \ -// for (i3 = 0; i3 < n3; ++i3) { \ -// int i2 = i2_ + local_y_start; \ -// int xyz_index = ((i2_ * n1 + i1) * n3 + i3); +// #define LOOP_XYZ(md) \ +// { \ +// int n1 = md->nx, n2 = md->ny, n3 = md->nz, i1, i2_, i3; \ +// int local_n2 = md->local_ny, local_y_start = md->local_y_start; \ +// for (i2_ = 0; i2_ < local_n2; ++i2_) \ +// for (i1 = 0; i1 < n1; ++i1) \ +// for (i3 = 0; i3 < n3; ++i3) { \ +// int i2 = i2_ + local_y_start; \ int xyz_index = ((i2_ * n1 + i1) * n3 + i3); // #endif /* HAVE_MPI */ typedef mpb_real real; // needed for the CASSIGN macros below // support version < 1.12 of MPB #ifndef CASSIGN_CONJ_MULT -#define CASSIGN_CONJ_MULT(a, b, c) { \ - real bbbb_re = (b).re, bbbb_im = (b).im; \ - real cccc_re = (c).re, cccc_im = (c).im; \ - CASSIGN_SCALAR(a, bbbb_re * cccc_re + bbbb_im * cccc_im, \ - bbbb_re * cccc_im - bbbb_im * cccc_re); \ -} +#define CASSIGN_CONJ_MULT(a, b, c) \ + { \ + real bbbb_re = (b).re, bbbb_im = (b).im; \ + real cccc_re = (c).re, cccc_im = (c).im; \ + CASSIGN_SCALAR(a, bbbb_re *cccc_re + bbbb_im * cccc_im, \ + bbbb_re * cccc_im - bbbb_im * cccc_re); \ + } #endif // TODO: Support MPI @@ -73,8 +73,6 @@ typedef mpb_real real; // needed for the CASSIGN macros below namespace py_mpb { - - // TODO: Placeholder int mpb_comm; @@ -127,13 +125,12 @@ void matrix3x3_to_arr(mpb_real arr[3][3], matrix3x3 m) { cnumber cscalar2cnumber(scalar_complex cs) { return make_cnumber(CSCALAR_RE(cs), CSCALAR_IM(cs)); } -cvector3 cscalar32cvector3(const scalar_complex *cs) -{ - cvector3 v; - v.x = cscalar2cnumber(cs[0]); - v.y = cscalar2cnumber(cs[1]); - v.z = cscalar2cnumber(cs[2]); - return v; +cvector3 cscalar32cvector3(const scalar_complex *cs) { + cvector3 v; + v.x = cscalar2cnumber(cs[0]); + v.y = cscalar2cnumber(cs[1]); + v.z = cscalar2cnumber(cs[2]); + return v; } // Return a string describing the current parity, used for frequency and filename @@ -142,13 +139,9 @@ const char *parity_string(maxwell_data *d) { static char s[128]; strcpy(s, ""); if (d->parity & EVEN_Z_PARITY) { strcat(s, (d->nz == 1) ? "te" : "zeven"); } - else if (d->parity & ODD_Z_PARITY) { - strcat(s, (d->nz == 1) ? "tm" : "zodd"); - } + else if (d->parity & ODD_Z_PARITY) { strcat(s, (d->nz == 1) ? "tm" : "zodd"); } if (d->parity & EVEN_Y_PARITY) { strcat(s, "yeven"); } - else if (d->parity & ODD_Y_PARITY) { - strcat(s, "yodd"); - } + else if (d->parity & ODD_Y_PARITY) { strcat(s, "yodd"); } return s; } @@ -225,7 +218,7 @@ mode_solver::mode_solver(int num_bands, double resolution[3], lattice lat, doubl use_simple_preconditioner(use_simple_preconditioner), grid_size(grid_size), nwork_alloc(0), eigensolver_nwork(eigensolver_nwork), eigensolver_block_size(eigensolver_block_size), last_parity(-2), iterations(0), eigensolver_flops(flops), geometry_list{}, - geometry_tree(NULL), vol(0), R{}, G{}, mdata(NULL), mtdata(NULL), + geometry_tree(NULL), vol(0), R{}, G{}, mdata(NULL), mtdata(NULL), curfield_band(0), H{}, Hblock{}, muinvH{}, W{}, freqs(num_bands), verbose(verbose), deterministic(deterministic), kpoint_index(0), curfield(NULL), curfield_type('-'), eps(true) { @@ -394,9 +387,7 @@ int mode_solver::mean_epsilon(symmetric_matrix *meps, symmetric_matrix *meps_inv } if (id1 > id2) { normal = normal_to_fixed_object(vector3_minus(p, shiftby1), *o1); } - else { - normal = normal_to_fixed_object(vector3_minus(p, shiftby2), *o2); - } + else { normal = normal_to_fixed_object(vector3_minus(p, shiftby2), *o2); } n[0] = normal.x / (geometry_lattice.size.x == 0 ? 1e-20 : geometry_lattice.size.x); n[1] = normal.y / (geometry_lattice.size.y == 0 ? 1e-20 : geometry_lattice.size.y); @@ -667,9 +658,7 @@ void mode_solver::get_material_pt(meep_geom::material_type &material, vector3 p) // material read from file: interpolate to get properties at r case meep_geom::material_data::MATERIAL_FILE: if (md->epsilon_data) { meep_geom::epsilon_file_material(md, p); } - else { - material = (meep_geom::material_type)default_material; - } + else { material = (meep_geom::material_type)default_material; } return; // material specified by user-supplied function: call user @@ -701,7 +690,9 @@ void mode_solver::init(int p, bool reset_fields, geometric_object_list *geometry n[1] = grid_size.y; n[2] = grid_size.z; - if (target_freq != 0.0 && mpb_verbosity > 0) { meep::master_printf("Target frequency is %g\n", target_freq); } + if (target_freq != 0.0 && mpb_verbosity > 0) { + meep::master_printf("Target frequency is %g\n", target_freq); + } int true_rank = n[2] > 1 ? 3 : (n[1] > 1 ? 2 : 1); if (true_rank < dimensions) { dimensions = true_rank; } @@ -728,12 +719,9 @@ void mode_solver::init(int p, bool reset_fields, geometric_object_list *geometry block_size = (num_bands - block_size - 1) / (-block_size); block_size = (num_bands + block_size - 1) / block_size; } - if (mpb_verbosity > 0) - meep::master_printf("Solving for %d bands at a time.\n", block_size); - } - else { - block_size = num_bands; + if (mpb_verbosity > 0) meep::master_printf("Solving for %d bands at a time.\n", block_size); } + else { block_size = num_bands; } if (mdata) { if (n[0] == mdata->nx && n[1] == mdata->ny && n[2] == mdata->nz && @@ -757,9 +745,7 @@ void mode_solver::init(int p, bool reset_fields, geometric_object_list *geometry mdata = NULL; curfield_reset(); } - else { - srand(time(NULL)); - } + else { srand(time(NULL)); } if (deterministic) { // seed should be the same for each run, although @@ -769,8 +755,7 @@ void mode_solver::init(int p, bool reset_fields, geometric_object_list *geometry srand(314159); // * (rank + 1)); } - if (mpb_verbosity > 0) - meep::master_printf("Creating Maxwell data...\n"); + if (mpb_verbosity > 0) meep::master_printf("Creating Maxwell data...\n"); mdata = create_maxwell_data(n[0], n[1], n[2], &local_N, &N_start, &alloc_N, block_size, NUM_FFT_BANDS); @@ -781,8 +766,7 @@ void mode_solver::init(int p, bool reset_fields, geometric_object_list *geometry if (check_maxwell_dielectric(mdata, 0)) { meep::abort("invalid dielectric function for MPB"); } if (!have_old_fields) { - if (mpb_verbosity > 0) - meep::master_printf("Allocating fields...\n"); + if (mpb_verbosity > 0) meep::master_printf("Allocating fields...\n"); int N = n[0] * n[1] * n[2]; int c = 2; @@ -797,16 +781,12 @@ void mode_solver::init(int p, bool reset_fields, geometric_object_list *geometry if (block_size < num_bands) { Hblock = create_evectmatrix(N, c, block_size, local_N, N_start, alloc_N); } - else { - Hblock = H; - } + else { Hblock = H; } if (using_mu() && block_size < num_bands) { muinvH = create_evectmatrix(N, c, num_bands, local_N, N_start, alloc_N); } - else { - muinvH = H; - } + else { muinvH = H; } } set_parity(p); @@ -829,8 +809,7 @@ void mode_solver::init_epsilon(geometric_object_list *geometry_in) { mpb_real no_size_y = geometry_lattice.size.y == 0 ? 1 : geometry_lattice.size.y; mpb_real no_size_z = geometry_lattice.size.z == 0 ? 1 : geometry_lattice.size.z; - if (mpb_verbosity > 0) - meep::master_printf("Mesh size is %d.\n", mesh_size); + if (mpb_verbosity > 0) meep::master_printf("Mesh size is %d.\n", mesh_size); Rm.c0 = vector3_scale(no_size_x, geometry_lattice.basis.c0); Rm.c1 = vector3_scale(no_size_y, geometry_lattice.basis.c1); @@ -844,8 +823,7 @@ void mode_solver::init_epsilon(geometric_object_list *geometry_in) { } vol = fabs(matrix3x3_determinant(Rm)); - if (mpb_verbosity > 0) - meep::master_printf("Cell volume = %g\n", vol); + if (mpb_verbosity > 0) meep::master_printf("Cell volume = %g\n", vol); Gm = matrix3x3_inverse(matrix3x3_transpose(Rm)); if (mpb_verbosity > 0) { @@ -860,18 +838,18 @@ void mode_solver::init_epsilon(geometric_object_list *geometry_in) { geom_fix_object_list(geometry_list); - if (mpb_verbosity > 0) - meep::master_printf("Geometric objects:\n"); + if (mpb_verbosity > 0) meep::master_printf("Geometric objects:\n"); if (meep::am_master()) { for (int i = 0; i < geometry_list.num_items; ++i) { #ifndef WITH_HERMITIAN_EPSILON meep_geom::medium_struct *mm; - if (meep_geom::is_medium(geometry_list.items[i].material, &mm)) { mm->check_offdiag_im_zero_or_abort(); } + if (meep_geom::is_medium(geometry_list.items[i].material, &mm)) { + mm->check_offdiag_im_zero_or_abort(); + } #endif - if (mpb_verbosity > 0) - display_geometric_object_info(5, geometry_list.items[i]); + if (mpb_verbosity > 0) display_geometric_object_info(5, geometry_list.items[i]); // meep_geom::medium_struct *mm; // if (meep_geom::is_medium(geometry.items[i].material, &mm)) { @@ -903,8 +881,7 @@ void mode_solver::init_epsilon(geometric_object_list *geometry_in) { } if (verbose && meep::am_master()) { - if (mpb_verbosity > 0) - meep::master_printf("Geometry object bounding box tree:\n"); + if (mpb_verbosity > 0) meep::master_printf("Geometry object bounding box tree:\n"); display_geom_box_tree(5, geometry_tree); } @@ -938,14 +915,12 @@ void mode_solver::reset_epsilon(geometric_object_list *geometry) { // if (!mu_input_file.empty()) { // } - if (mpb_verbosity > 0) - meep::master_printf("Initializing epsilon function...\n"); + if (mpb_verbosity > 0) meep::master_printf("Initializing epsilon function...\n"); set_maxwell_dielectric(mdata, mesh, R, G, dielectric_function, mean_epsilon_func, static_cast(this)); if (has_mu(geometry)) { - if (mpb_verbosity > 0) - meep::master_printf("Initializing mu function...\n"); + if (mpb_verbosity > 0) meep::master_printf("Initializing mu function...\n"); eps = false; set_maxwell_mu(mdata, mesh, R, G, dielectric_function, mean_epsilon_func, static_cast(this)); @@ -1020,8 +995,7 @@ void mode_solver::set_kpoint_index(int i) { kpoint_index = i; } void mode_solver::randomize_fields() { if (!mdata) { return; } - if (mpb_verbosity > 0) - meep::master_printf("Initializing fields to random numbers...\n"); + if (mpb_verbosity > 0) meep::master_printf("Initializing fields to random numbers...\n"); for (int i = 0; i < H.n * H.p; ++i) { ASSIGN_SCALAR(H.data[i], rand() * 1.0 / RAND_MAX, rand() * 1.0 / RAND_MAX); @@ -1039,8 +1013,7 @@ void mode_solver::solve_kpoint(vector3 kvector) { curfield_reset(); if (num_bands == 0) { - if (mpb_verbosity > 0) - meep::master_printf(" num-bands is zero, not solving for any bands\n"); + if (mpb_verbosity > 0) meep::master_printf(" num-bands is zero, not solving for any bands\n"); return; } @@ -1087,9 +1060,7 @@ void mode_solver::solve_kpoint(vector3 kvector) { } evectmatrix_resize(&H, H.p - ib0, 1); } - else { - ib0 = 0; /* solve for all bands */ - } + else { ib0 = 0; /* solve for all bands */ } // Set up deflation data. deflation_data deflation; @@ -1228,11 +1199,9 @@ void mode_solver::solve_kpoint(vector3 kvector) { for (int i = 0; i < num_bands; ++i) { freqs[i] = negative_epsilon_ok ? eigvals[i] : sqrt(eigvals[i]); - if (mpb_verbosity > 0) - meep::master_printf(", %g", freqs[i]); + if (mpb_verbosity > 0) meep::master_printf(", %g", freqs[i]); } - if (mpb_verbosity > 0) - meep::master_printf("\n"); + if (mpb_verbosity > 0) meep::master_printf("\n"); eigensolver_flops = evectmatrix_flops; } @@ -1265,9 +1234,7 @@ void mode_solver::get_epsilon() { for (int i = 0; i < N; ++i) { if (mdata->eps_inv == NULL) { epsilon[i] = 1.0; } - else { - epsilon[i] = mean_medium_from_matrix(mdata->eps_inv + i); - } + else { epsilon[i] = mean_medium_from_matrix(mdata->eps_inv + i); } if (epsilon[i] < eps_low) { eps_low = epsilon[i]; } if (epsilon[i] > eps_high) { eps_high = epsilon[i]; } eps_mean += epsilon[i]; @@ -1286,11 +1253,11 @@ void mode_solver::get_epsilon() { eps_inv_mean = N / eps_inv_mean; if (mpb_verbosity > 0) - meep::master_printf("epsilon: %g-%g, mean %g, harm. mean %g, %g%% > 1, %g%% \"fill\"\n", eps_low, - eps_high, eps_mean, eps_inv_mean, (100.0 * fill_count) / N, + meep::master_printf("epsilon: %g-%g, mean %g, harm. mean %g, %g%% > 1, %g%% \"fill\"\n", + eps_low, eps_high, eps_mean, eps_inv_mean, (100.0 * fill_count) / N, eps_high == eps_low ? 100.0 : 100.0 * (eps_mean - eps_low) / (eps_high - eps_low)); - } +} /* get the mu function, and compute some statistics */ void mode_solver::get_mu() { @@ -1319,9 +1286,7 @@ void mode_solver::get_mu() { for (int i = 0; i < N; ++i) { if (mdata->mu_inv == NULL) { mu[i] = 1.0; } - else { - mu[i] = mean_medium_from_matrix(mdata->mu_inv + i); - } + else { mu[i] = mean_medium_from_matrix(mdata->mu_inv + i); } if (mu[i] < eps_low) { eps_low = mu[i]; } if (mu[i] > eps_high) { eps_high = mu[i]; } @@ -1651,7 +1616,7 @@ double mode_solver::compute_field_energy_internal(mpb_real comp_sum[6]) { void mode_solver::clear_geometry_list() { if (geometry_list.num_items && geometry_list.items) { - for(int i = 0; i < geometry_list.num_items; ++i) { + for (int i = 0; i < geometry_list.num_items; ++i) { material_free((meep_geom::material_data *)geometry_list.items[i].material); geometric_object_destroy(geometry_list.items[i]); } @@ -1681,15 +1646,15 @@ std::vector mode_solver::compute_field_energy() { mpb_real energy_sum = compute_field_energy_internal(comp_sum); if (mpb_verbosity > 0) - meep::master_printf("%c-energy-components:, %d, %d", curfield_type, kpoint_index, curfield_band); + meep::master_printf("%c-energy-components:, %d, %d", curfield_type, kpoint_index, + curfield_band); for (int i = 0; i < 6; ++i) { comp_sum[i] /= (energy_sum == 0 ? 1 : energy_sum); if (i % 2 == 1 && mpb_verbosity > 0) { meep::master_printf(", %g", comp_sum[i] + comp_sum[i - 1]); - } + } } - if (mpb_verbosity > 0) - meep::master_printf("\n"); + if (mpb_verbosity > 0) meep::master_printf("\n"); /* The return value is a list of 7 items: the total energy, followed by the 6 elements of the comp_sum array (the fraction @@ -2250,9 +2215,7 @@ std::vector mode_solver::compute_group_velocity_component(vector3 d) { if (freqs[i] == 0) { /* v is undefined in this case */ group_v[i] = 0.0; /* just set to zero */ } - else { - group_v[i] /= negative_epsilon_ok ? sqrt(fabs(freqs[i])) : freqs[i]; - } + else { group_v[i] /= negative_epsilon_ok ? sqrt(fabs(freqs[i])) : freqs[i]; } } return group_v; @@ -2298,9 +2261,7 @@ mpb_real mode_solver::compute_1_group_velocity_component(vector3 d, int b) { if (freqs[ib] == 0) { /* v is undefined in this case */ group_v = 0.0; /* just set to zero */ } - else { - group_v /= negative_epsilon_ok ? sqrt(fabs(freqs[ib])) : freqs[ib]; - } + else { group_v /= negative_epsilon_ok ? sqrt(fabs(freqs[ib])) : freqs[ib]; } return group_v; } @@ -2702,7 +2663,6 @@ bool with_hermitian_epsilon() { #endif } - /* --- port of mpb's mpb/transform.c --- */ /* If `curfield` is the real-space D-field (of band-index i), computes the overlap @@ -2719,11 +2679,10 @@ bool with_hermitian_epsilon() { * the Bloch included) or the `get_bfield` and `get_dfield` C functions. * Usually, it will be more convenient to use the wrapper `compute_symmetry(i, W, w)` * which defaults to the B-field (since μ = 1 usually) and takes a band-index `i`. */ -cnumber mode_solver::transformed_overlap(matrix3x3 W, vector3 w) -{ +cnumber mode_solver::transformed_overlap(matrix3x3 W, vector3 w) { int n1, n2, n3; mpb_real s1, s2, s3, c1, c2, c3; - cnumber integral = {0,0}, integral_sum; + cnumber integral = {0, 0}, integral_sum; number detW; vector3 kvector = cur_kvector; @@ -2757,7 +2716,9 @@ cnumber mode_solver::transformed_overlap(matrix3x3 W, vector3 w) // #endif /* prepare before looping ... */ - n1 = mdata->nx; n2 = mdata->ny; n3 = mdata->nz; + n1 = mdata->nx; + n2 = mdata->ny; + n3 = mdata->nz; s1 = geometry_lattice.size.x / n1; /* pixel spacings */ s2 = geometry_lattice.size.y / n2; @@ -2781,9 +2742,9 @@ cnumber mode_solver::transformed_overlap(matrix3x3 W, vector3 w) matrix3x3_inverse(geometry_lattice.basis)); /* hoist rescalings outside the loop (maybe licm takes care of it, but do it anyway) */ - kvector.x *= TWOPI/(geometry_lattice.size.x == 0 ? 1e-20 : geometry_lattice.size.x); - kvector.y *= TWOPI/(geometry_lattice.size.y == 0 ? 1e-20 : geometry_lattice.size.y); - kvector.z *= TWOPI/(geometry_lattice.size.z == 0 ? 1e-20 : geometry_lattice.size.z); + kvector.x *= TWOPI / (geometry_lattice.size.x == 0 ? 1e-20 : geometry_lattice.size.x); + kvector.y *= TWOPI / (geometry_lattice.size.y == 0 ? 1e-20 : geometry_lattice.size.y); + kvector.z *= TWOPI / (geometry_lattice.size.z == 0 ? 1e-20 : geometry_lattice.size.z); /* loop over coordinates (introduces int vars `i1`, `i2`, `i3`, `xyz_index`) */ LOOP_XYZ(mdata) { /* implies two opening braces `{{` */ @@ -2805,12 +2766,12 @@ cnumber mode_solver::transformed_overlap(matrix3x3 W, vector3 w) /* define `Ft` as the vector components of `Ftemp` transformed by `Wc`; we just * write out the matrix-product manually here, for both real & imag parts */ - Ft[0].re = Wc.c0.x*Ftemp[0].re + Wc.c1.x*Ftemp[1].re + Wc.c2.x*Ftemp[2].re; - Ft[0].im = Wc.c0.x*Ftemp[0].im + Wc.c1.x*Ftemp[1].im + Wc.c2.x*Ftemp[2].im; - Ft[1].re = Wc.c0.y*Ftemp[0].re + Wc.c1.y*Ftemp[1].re + Wc.c2.y*Ftemp[2].re; - Ft[1].im = Wc.c0.y*Ftemp[0].im + Wc.c1.y*Ftemp[1].im + Wc.c2.y*Ftemp[2].im; - Ft[2].re = Wc.c0.z*Ftemp[0].re + Wc.c1.z*Ftemp[1].re + Wc.c2.z*Ftemp[2].re; - Ft[2].im = Wc.c0.z*Ftemp[0].im + Wc.c1.z*Ftemp[1].im + Wc.c2.z*Ftemp[2].im; + Ft[0].re = Wc.c0.x * Ftemp[0].re + Wc.c1.x * Ftemp[1].re + Wc.c2.x * Ftemp[2].re; + Ft[0].im = Wc.c0.x * Ftemp[0].im + Wc.c1.x * Ftemp[1].im + Wc.c2.x * Ftemp[2].im; + Ft[1].re = Wc.c0.y * Ftemp[0].re + Wc.c1.y * Ftemp[1].re + Wc.c2.y * Ftemp[2].re; + Ft[1].im = Wc.c0.y * Ftemp[0].im + Wc.c1.y * Ftemp[1].im + Wc.c2.y * Ftemp[2].im; + Ft[2].re = Wc.c0.z * Ftemp[0].re + Wc.c1.z * Ftemp[1].re + Wc.c2.z * Ftemp[2].re; + Ft[2].im = Wc.c0.z * Ftemp[0].im + Wc.c1.z * Ftemp[1].im + Wc.c2.z * Ftemp[2].im; /* get the Bloch field value at current point `p` (without eⁱᵏʳ factor). * We multiply the input field `F` (either B or D-field) with μ⁻¹ or ε⁻¹ to get @@ -2818,44 +2779,45 @@ cnumber mode_solver::transformed_overlap(matrix3x3 W, vector3 w) * t-postscript denoting a field transformed by {W|w}. Here, we essentially * adapt some boiler-plate code from compute_field_energy_internal in fields.c */ if (curfield_type == 'd') { - assign_symmatrix_vector(F, mdata->eps_inv[xyz_index], curfield+3*xyz_index); + assign_symmatrix_vector(F, mdata->eps_inv[xyz_index], curfield + 3 * xyz_index); } else if (curfield_type == 'b' && mdata->mu_inv != NULL) { - assign_symmatrix_vector(F, mdata->mu_inv[xyz_index], curfield+3*xyz_index); + assign_symmatrix_vector(F, mdata->mu_inv[xyz_index], curfield + 3 * xyz_index); } else { - F[0] = curfield[3*xyz_index]; - F[1] = curfield[3*xyz_index+1]; - F[2] = curfield[3*xyz_index+2]; + F[0] = curfield[3 * xyz_index]; + F[1] = curfield[3 * xyz_index + 1]; + F[2] = curfield[3 * xyz_index + 2]; } /* inner product of F and Ft={W|w}F in Bloch form */ - CASSIGN_CONJ_MULT(integrand, F[0], Ft[0]); /* add adjoint(F)*Ft to integrand */ + CASSIGN_CONJ_MULT(integrand, F[0], Ft[0]); /* add adjoint(F)*Ft to integrand */ CACCUMULATE_SUM_CONJ_MULT(integrand, F[1], Ft[1]); CACCUMULATE_SUM_CONJ_MULT(integrand, F[2], Ft[2]); /* include Bloch phases */ - deltaphi = kvector.x*(pt.x-p.x) + kvector.y*(pt.y-p.y) + kvector.z*(pt.z-p.z); + deltaphi = kvector.x * (pt.x - p.x) + kvector.y * (pt.y - p.y) + kvector.z * (pt.z - p.z); CASSIGN_SCALAR(phase, cos(deltaphi), sin(deltaphi)); /* add integrand-contribution to integral */ integral.re += CSCALAR_MULT_RE(integrand, phase); integral.im += CSCALAR_MULT_IM(integrand, phase); - }}} - - integral.re *= vol / H.N; - integral.im *= vol / H.N; + } +} +} - mpi_allreduce(&integral, &integral_sum, 2, number, MPI_DOUBLE, MPI_SUM, mpb_comm); +integral.re *= vol / H.N; +integral.im *= vol / H.N; - if (curfield_type == 'b') { /* H & B are pseudovectors => transform includes det(W) */ - integral_sum.re *= detW; - integral_sum.im *= detW; - } +mpi_allreduce(&integral, &integral_sum, 2, number, MPI_DOUBLE, MPI_SUM, mpb_comm); - return integral_sum; +if (curfield_type == 'b') { /* H & B are pseudovectors => transform includes det(W) */ + integral_sum.re *= detW; + integral_sum.im *= detW; } +return integral_sum; +} cnumber mode_solver::compute_symmetry(int which_band, matrix3x3 W, vector3 w) { cnumber symval; diff --git a/libpympb/pympb.hpp b/libpympb/pympb.hpp index 3b5da8cfb..2222015b3 100644 --- a/libpympb/pympb.hpp +++ b/libpympb/pympb.hpp @@ -19,7 +19,6 @@ namespace py_mpb { // This is redeclared here so SWIG will see it. extern "C" int mpb_verbosity; - #define TWOPI 6.2831853071795864769252867665590057683943388 void map_data(mpb_real *d_in_re, int size_in_re, mpb_real *d_in_im, int size_in_im, int n_in[3], diff --git a/m4/ax_check_compiler_flags.m4 b/m4/ax_check_compiler_flags.m4 index 86eaf15ef..ad166dc8f 100644 --- a/m4/ax_check_compiler_flags.m4 +++ b/m4/ax_check_compiler_flags.m4 @@ -20,13 +20,13 @@ AS_LITERAL_IF([$1], [AC_CACHE_VAL(AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1), [ ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$1" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], + AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=yes, AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=no) _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS])], [ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$1" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], + AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=yes, eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=no) _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS]) diff --git a/m4/ax_compiler_vendor.m4 b/m4/ax_compiler_vendor.m4 index 1b8ed401c..6c3db2625 100644 --- a/m4/ax_compiler_vendor.m4 +++ b/m4/ax_compiler_vendor.m4 @@ -4,7 +4,7 @@ dnl @category C dnl @category C++ dnl dnl Determine the vendor of the C/C++ compiler, e.g., gnu, intel, ibm, -dnl sun, hp, borland, comeau, dec, cray, kai, lcc, metrowerks, sgi, +dnl sun, hp, borland, comeau, dec, cray, kai, lcc, metrowerks, sgi, dnl microsoft, watcom, etc. The vendor is returned in the cache variable dnl $ax_cv_c_compiler_vendor for C and $ax_cv_cxx_compiler_vendor for C++. dnl @@ -17,7 +17,7 @@ AC_DEFUN([AX_COMPILER_VENDOR], AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor, [ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown # note: don't check for gcc first since some other compilers define __GNUC__ - for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do + for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ #if !($vencpp) @@ -27,4 +27,3 @@ AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compile done ]) ]) - diff --git a/m4/ax_gcc_x86_cpuid.m4 b/m4/ax_gcc_x86_cpuid.m4 index 50fe009e9..d91509c2c 100644 --- a/m4/ax_gcc_x86_cpuid.m4 +++ b/m4/ax_gcc_x86_cpuid.m4 @@ -57,7 +57,7 @@ AC_CACHE_CHECK(for x86 cpuid $1 output, ax_cv_gcc_x86_cpuid_$1, fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx); fclose(f); return 0; -])], +])], [ax_cv_gcc_x86_cpuid_$1=`cat conftest_cpuid`; rm -f conftest_cpuid], [ax_cv_gcc_x86_cpuid_$1=unknown; rm -f conftest_cpuid], [ax_cv_gcc_x86_cpuid_$1=unknown])]) diff --git a/m4/pkg.m4 b/m4/pkg.m4 index 1b49cd6b6..72139eadf 100644 --- a/m4/pkg.m4 +++ b/m4/pkg.m4 @@ -34,7 +34,7 @@ AC_DEFUN([PKG_CHECK_MODULES], [ else $1_CFLAGS="" $1_LIBS="" - ## If we have a custom action on failure, don't print errors, but + ## If we have a custom action on failure, don't print errors, but ## do set a variable so people can do so. $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` ifelse([$4], ,echo $$1_PKG_ERRORS,) @@ -54,5 +54,3 @@ AC_DEFUN([PKG_CHECK_MODULES], [ ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4]) fi ]) - - diff --git a/python/adjoint/__init__.py b/python/adjoint/__init__.py index 949d3d689..a787e31e7 100644 --- a/python/adjoint/__init__.py +++ b/python/adjoint/__init__.py @@ -10,7 +10,7 @@ from .basis import BilinearInterpolationBasis -from .optimization_problem import (OptimizationProblem) +from .optimization_problem import OptimizationProblem from .filter_source import FilteredSource diff --git a/python/adjoint/basis.py b/python/adjoint/basis.py index ac28d512c..af54f6877 100644 --- a/python/adjoint/basis.py +++ b/python/adjoint/basis.py @@ -1,27 +1,28 @@ -import meep as mp +from abc import ABCMeta, abstractmethod + import numpy as np from scipy import sparse -from abc import ABCMeta, abstractmethod -ABC = ABCMeta('ABC', (object, ), {'__slots__': - ()}) # compatible with Python 2 and 3 +import meep as mp + +ABC = ABCMeta("ABC", (object,), {"__slots__": ()}) # compatible with Python 2 and 3 -#---------------------------------------------------------------------- +# ---------------------------------------------------------------------- # Basis is the abstract base class from which classes describing specific # basis sets should inherit. -#---------------------------------------------------------------------- +# ---------------------------------------------------------------------- class Basis(ABC): - """ - """ + """ """ + def __init__( - self, - rho_vector=None, - volume=None, - size=None, - center=mp.Vector3(), + self, + rho_vector=None, + volume=None, + size=None, + center=mp.Vector3(), ): - self.volume = volume if volume else mp.Volume(center=center, size=size) + self.volume = volume or mp.Volume(center=center, size=size) self.rho_vector = rho_vector def func(self): @@ -32,13 +33,11 @@ def _f(p): @abstractmethod def get_basis_vjp(self): - raise NotImplementedError( - "derived class must implement get_basis_vjp method") + raise NotImplementedError("derived class must implement get_basis_vjp method") @abstractmethod def __call__(self, p=[0.0, 0.0]): - raise NotImplementedError( - "derived class must implement __call__() method") + raise NotImplementedError("derived class must implement __call__() method") def set_rho_vector(self, rho_vector): self.rho_vector = rho_vector @@ -50,61 +49,75 @@ def set_rho_vector(self, rho_vector): class BilinearInterpolationBasis(Basis): - ''' + """ Simple bilinear interpolation basis set. - ''' + """ + def __init__(self, resolution, symmetry=None, **kwargs): self.dim = 2 - super(BilinearInterpolationBasis, self).__init__(**kwargs) + super().__init__(**kwargs) # Generate interpolation grid - if symmetry is None or len(symmetry) == 0: - self.symmetry = [] - else: - self.symmetry = symmetry - + self.symmetry = [] if symmetry is None or len(symmetry) == 0 else symmetry if mp.X in set(self.symmetry): self.Nx = int(resolution * self.volume.size.x / 2) + 1 self.rho_x = np.linspace( self.volume.center.x, - self.volume.center.x + self.volume.size.x / 2, self.Nx) + self.volume.center.x + self.volume.size.x / 2, + self.Nx, + ) self.mirror_X = True else: self.Nx = int(resolution * self.volume.size.x) + 1 self.rho_x = np.linspace( self.volume.center.x - self.volume.size.x / 2, - self.volume.center.x + self.volume.size.x / 2, self.Nx) + self.volume.center.x + self.volume.size.x / 2, + self.Nx, + ) self.mirror_X = False if mp.Y in set(self.symmetry): self.Ny = int(resolution * self.volume.size.y / 2) + 1 self.rho_y = np.linspace( self.volume.center.y, - self.volume.center.y + self.volume.size.y / 2, self.Ny) + self.volume.center.y + self.volume.size.y / 2, + self.Ny, + ) self.mirror_Y = True else: self.Ny = int(resolution * self.volume.size.y) + 1 self.rho_y = np.linspace( self.volume.center.y - self.volume.size.y / 2, - self.volume.center.y + self.volume.size.y / 2, self.Ny) + self.volume.center.y + self.volume.size.y / 2, + self.Ny, + ) self.mirror_Y = False self.num_design_params = self.Nx * self.Ny if self.rho_vector is None: - self.rho_vector = np.ones((self.num_design_params, )) + self.rho_vector = np.ones((self.num_design_params,)) def __call__(self, p): - x = 2 * self.volume.center.x - p.x if self.mirror_X and p.x < self.volume.center.x else p.x - y = 2 * self.volume.center.y - p.y if self.mirror_Y and p.y < self.volume.center.y else p.y + x = ( + 2 * self.volume.center.x - p.x + if self.mirror_X and p.x < self.volume.center.x + else p.x + ) + y = ( + 2 * self.volume.center.y - p.y + if self.mirror_Y and p.y < self.volume.center.y + else p.y + ) weights, interp_idx = self.get_bilinear_row( - x, y, self.rho_x, self.rho_y) # ignore z coordinate + x, y, self.rho_x, self.rho_y + ) # ignore z coordinate return np.dot(self.rho_vector[interp_idx], weights) def get_basis_vjp(self, dJ_deps, design_grid): - ''' get vector jacobian product of interpolator''' + """get vector jacobian product of interpolator""" dg_Nx, dg_Ny, Nz, Nf = dJ_deps.shape # get important design grid dimensions x_grid = design_grid.x @@ -113,32 +126,37 @@ def get_basis_vjp(self, dJ_deps, design_grid): # take care of symmetries if self.mirror_X: - dJ_deps = dJ_deps[int(dg_Nx / 2):, :, :, :] * 2 - x_grid = x_grid[int(dg_Nx / 2):] + dJ_deps = dJ_deps[int(dg_Nx / 2) :, :, :, :] * 2 + x_grid = x_grid[int(dg_Nx / 2) :] if self.mirror_Y: - dJ_deps = dJ_deps[:, int(dg_Ny / 2):, :, :] * 2 - y_grid = y_grid[int(dg_Ny / 2):] + dJ_deps = dJ_deps[:, int(dg_Ny / 2) :, :, :] * 2 + y_grid = y_grid[int(dg_Ny / 2) :] dg_Nx, dg_Ny, Nz, Nf = dJ_deps.shape # recalculate - Nx, Ny = self.rho_x.size, self.rho_y.size # get important interpolator dimensions + Nx, Ny = ( + self.rho_x.size, + self.rho_y.size, + ) # get important interpolator dimensions # same interpolation matrix for all frequencies and all coordinates in Z direction - A = self.gen_interpolation_matrix(self.rho_x, self.rho_y, x_grid, - y_grid, z_grid) + A = self.gen_interpolation_matrix( + self.rho_x, self.rho_y, x_grid, y_grid, z_grid + ) # TODO ditch the for loops dJ_dp = np.zeros((Nx * Ny, Nf)) for fi in range(Nf): for zi in range(Nz): dJ_dp[:, fi] += np.matmul( - dJ_deps[:, :, zi, fi].reshape(dg_Nx * dg_Ny, order='C'), A) + dJ_deps[:, :, zi, fi].reshape(dg_Nx * dg_Ny, order="C"), A + ) return dJ_dp def get_bilinear_coefficients(self, x, x1, x2, y, y1, y2): - ''' + """ Calculates the bilinear interpolation coefficients for a single point at (x,y). Assumes that the user already knows the four closest points and provides the corresponding (x1,x2) and(y1,y2) coordinates. - ''' + """ b11 = ((x - x2) * (y - y2)) / ((x1 - x2) * (y1 - y2)) b12 = -((x - x2) * (y - y1)) / ((x1 - x2) * (y1 - y2)) b21 = -((x - x1) * (y - y2)) / ((x1 - x2) * (y1 - y2)) @@ -146,17 +164,17 @@ def get_bilinear_coefficients(self, x, x1, x2, y, y1, y2): return [b11, b12, b21, b22] def get_bilinear_row(self, rx, ry, rho_x, rho_y): - ''' + """ Calculates a vector of bilinear interpolation weights that can be used in an inner product with the neighboring function values, or placed inside of an interpolation matrix. - ''' + """ Nx = rho_x.size Ny = rho_y.size # binary search in x direction to get x1 and x2 - xi2 = np.searchsorted(rho_x, rx, side='left') + xi2 = np.searchsorted(rho_x, rx, side="left") if xi2 <= 0: # extrapolation (be careful!) xi1 = 0 xi2 = 1 @@ -170,7 +188,7 @@ def get_bilinear_row(self, rx, ry, rho_x, rho_y): x2 = rho_x[xi2] # binary search in y direction to get y1 and y2 - yi2 = np.searchsorted(rho_y, ry, side='left') + yi2 = np.searchsorted(rho_y, ry, side="left") if yi2 <= 0: # extrapolation (be careful!) yi1 = 0 yi2 = 1 @@ -187,10 +205,10 @@ def get_bilinear_row(self, rx, ry, rho_x, rho_y): weights = self.get_bilinear_coefficients(rx, x1, x2, ry, y1, y2) # get location of nearest neigbor interpolation points - interp_idx = np.array([ - xi1 * Ny + yi1, xi1 * Ny + yi2, (xi2) * Ny + yi1, (xi2) * Ny + yi2 - ], - dtype=np.int64) + interp_idx = np.array( + [xi1 * Ny + yi1, xi1 * Ny + yi2, (xi2) * Ny + yi1, (xi2) * Ny + yi2], + dtype=np.int64, + ) return weights, interp_idx @@ -202,7 +220,7 @@ def gen_interpolation_matrix( rho_y_interp, rho_z_interp, ): - ''' + """ Generates a bilinear interpolation matrix. Arguments: @@ -213,7 +231,7 @@ def gen_interpolation_matrix( Returns: A .................... [N,M] sparse matrix - interpolation matrix - ''' + """ Nx = rho_x.size Ny = rho_y.size @@ -232,19 +250,18 @@ def gen_interpolation_matrix( for rx in rho_x_interp: for ry in rho_y_interp: # get weights - weights, interp_idx = self.get_bilinear_row( - rx, ry, rho_x, rho_y) + weights, interp_idx = self.get_bilinear_row(rx, ry, rho_x, rho_y) # populate sparse matrix vectors - interp_weights[4 * ri:4 * (ri + 1)] = weights - row_ind[4 * ri:4 * (ri + 1)] = np.array([ri, ri, ri, ri], - dtype=np.int64) - col_ind[4 * ri:4 * (ri + 1)] = interp_idx + interp_weights[4 * ri : 4 * (ri + 1)] = weights + row_ind[4 * ri : 4 * (ri + 1)] = np.array( + [ri, ri, ri, ri], dtype=np.int64 + ) + col_ind[4 * ri : 4 * (ri + 1)] = interp_idx ri += 1 - # From matrix vectors, populate the sparse matrix - A = sparse.coo_matrix((interp_weights, (row_ind, col_ind)), - shape=(output_dimension, input_dimension)) - - return A + return sparse.coo_matrix( + (interp_weights, (row_ind, col_ind)), + shape=(output_dimension, input_dimension), + ) diff --git a/python/adjoint/connectivity.py b/python/adjoint/connectivity.py index dc2309e94..450e6f4eb 100644 --- a/python/adjoint/connectivity.py +++ b/python/adjoint/connectivity.py @@ -4,88 +4,133 @@ BC: Dirichlet on last slice rho[-Nx*Ny:], 0 outside the first slice, and Neumann on sides. Mo Chen """ - import numpy as np +from scipy.sparse import csc_matrix, csr_matrix, diags, eye, kron, lil_matrix from scipy.sparse.linalg import cg, spsolve -from scipy.sparse import kron, diags, csr_matrix, eye, csc_matrix, lil_matrix - -class ConnectivityConstraint(object): - def __init__(self, nx, ny, nz, k0=1000, zeta=0, sp_solver=cg, alpha=None, alpha0=None, thresh=0.1, p=2): - #zeta is to prevent singularity when damping is zero; with damping, zeta should be zero - #set ny=1 for 2D - self.nx, self.ny, self.nz= nx, ny, nz - self.n = nx*ny*nz - self.m = nx*ny*(nz-1) + + +class ConnectivityConstraint: + def __init__( + self, + nx, + ny, + nz, + k0=1000, + zeta=0, + sp_solver=cg, + alpha=None, + alpha0=None, + thresh=0.1, + p=2, + ): + # zeta is to prevent singularity when damping is zero; with damping, zeta should be zero + # set ny=1 for 2D + self.nx, self.ny, self.nz = nx, ny, nz + self.n = nx * ny * nz + self.m = nx * ny * (nz - 1) self.solver = sp_solver self.k0, self.zeta = k0, zeta self.thresh = thresh self.p = p - #default alpha and alpha0 - if alpha != None: - self.alpha=alpha - else: - self.alpha = 0.1*min(1/nx, 1/ny, 1/nz) - if alpha0 != None: - self.alpha0 = alpha0 - else: - self.alpha0 = -np.log(thresh)/min(nx, nz) + # default alpha and alpha0 + self.alpha = alpha if alpha != None else 0.1 * min(1 / nx, 1 / ny, 1 / nz) + self.alpha0 = alpha0 if alpha0 != None else -np.log(thresh) / min(nx, nz) def forward(self, rho_vector): self.rho_vector = rho_vector # gradient and -div operator - gx = diags([-1,1], [0,1], shape=(self.nx-1, self.nx), format='csr') + gx = diags([-1, 1], [0, 1], shape=(self.nx - 1, self.nx), format="csr") dx = gx.copy().transpose() - gy = diags([-1,1], [0,1], shape=(self.ny-1, self.ny), format='csr') + gy = diags([-1, 1], [0, 1], shape=(self.ny - 1, self.ny), format="csr") dy = gy.copy().transpose() - gz = diags([1,-1], [0, -1], shape=(self.nz, self.nz), format='csr') - dz = diags([1,-1], [0, 1], shape=(self.nz-1, self.nz), format='csr') + gz = diags([1, -1], [0, -1], shape=(self.nz, self.nz), format="csr") + dz = diags([1, -1], [0, 1], shape=(self.nz - 1, self.nz), format="csr") # kron product for 2D - Ix, Iy, Iz = eye(self.nx), eye(self.ny), eye(self.nz-1) - self.gx, self.gy, self.gz = kron(Iz, kron(Iy, gx)), kron(Iz, kron(gy, Ix)), kron(gz, kron(Iy,Ix)) - self.dx, self.dy, self.dz = kron(Iz, kron(Iy, dx)), kron(Iz, kron(dy, Ix)), kron(dz, kron(Iy, Ix)) - - #conductivity based on rho + Ix, Iy, Iz = eye(self.nx), eye(self.ny), eye(self.nz - 1) + self.gx, self.gy, self.gz = ( + kron(Iz, kron(Iy, gx)), + kron(Iz, kron(gy, Ix)), + kron(gz, kron(Iy, Ix)), + ) + self.dx, self.dy, self.dz = ( + kron(Iz, kron(Iy, dx)), + kron(Iz, kron(dy, Ix)), + kron(dz, kron(Iy, Ix)), + ) + + # conductivity based on rho rho_pad = np.reshape(rho_vector, (self.nz, self.ny, self.nx)) - rhox = np.array([0.5*(rho_pad[k, j, i]+rho_pad[k, j, i+1]) for k in range(self.nz-1) for j in range(self.ny) for i in range(self.nx-1)]) + rhox = np.array( + [ + 0.5 * (rho_pad[k, j, i] + rho_pad[k, j, i + 1]) + for k in range(self.nz - 1) + for j in range(self.ny) + for i in range(self.nx - 1) + ] + ) self.rhox = rhox - rhoy = np.array([0.5*(rho_pad[k, j, i]+rho_pad[k, j+1, i]) for k in range(self.nz-1) for j in range(self.ny-1) for i in range(self.nx)]) + rhoy = np.array( + [ + 0.5 * (rho_pad[k, j, i] + rho_pad[k, j + 1, i]) + for k in range(self.nz - 1) + for j in range(self.ny - 1) + for i in range(self.nx) + ] + ) self.rhoy = rhoy - rhoz = np.array([0.5*(rho_pad[k, j, i]+rho_pad[k+1, j, i]) for k in range(self.nz-1) for j in range(self.ny) for i in range(self.nx)]) - rhoz = np.insert(rhoz, [0]*self.nx*self.ny, 0)#0 outside first row + rhoz = np.array( + [ + 0.5 * (rho_pad[k, j, i] + rho_pad[k + 1, j, i]) + for k in range(self.nz - 1) + for j in range(self.ny) + for i in range(self.nx) + ] + ) + rhoz = np.insert(rhoz, [0] * self.nx * self.ny, 0) # 0 outside first row self.rhoz = rhoz - kx, ky, kz = diags((self.zeta+(1-self.zeta)*rhox)*self.k0), diags((self.zeta+(1-self.zeta)*rhoy)*self.k0), diags((self.zeta+(1-self.zeta)*rhoz)*self.k0) + kx, ky, kz = ( + diags((self.zeta + (1 - self.zeta) * rhox) * self.k0), + diags((self.zeta + (1 - self.zeta) * rhoy) * self.k0), + diags((self.zeta + (1 - self.zeta) * rhoz) * self.k0), + ) self.kx, self.ky, self.kz = kx, ky, kz - #matrices in x, y, z - self.Lx, self.Ly, self.Lz = self.dx * kx * self.gx, self.dy * ky * self.gy, self.dz * kz * self.gz + # matrices in x, y, z + self.Lx, self.Ly, self.Lz = ( + self.dx * kx * self.gx, + self.dy * ky * self.gy, + self.dz * kz * self.gz, + ) # Dirichlet condition on the last row becomes term on the RHS - Bz = csc_matrix(self.Lz)[:,-self.nx*self.ny:] + Bz = csc_matrix(self.Lz)[:, -self.nx * self.ny :] rhs = -Bz.sum(axis=1) - self.rhs=rhs - - #LHS operator after moving the boundary term to the RHS - eq = self.Lz[:, :-self.nx*self.ny]+self.Lx+self.Ly - self.eq=eq - #add damping - damping = self.k0*self.alpha**2*diags(1-rho_vector[:-self.nx*self.ny]) + diags([self.alpha0**2], shape=(self.m, self.m)) + self.rhs = rhs + + # LHS operator after moving the boundary term to the RHS + eq = self.Lz[:, : -self.nx * self.ny] + self.Lx + self.Ly + self.eq = eq + # add damping + damping = self.k0 * self.alpha**2 * diags( + 1 - rho_vector[: -self.nx * self.ny] + ) + diags([self.alpha0**2], shape=(self.m, self.m)) self.A = eq + damping self.damping = damping if self.solver == spsolve: self.T = self.solver(csr_matrix(self.A), rhs) else: self.T, sinfo = self.solver(csr_matrix(self.A), rhs) - #exclude last row of rho and calculate weighted average of temperature - self.rho_vec = rho_vector[:-self.nx*self.ny] + # exclude last row of rho and calculate weighted average of temperature + self.rho_vec = rho_vector[: -self.nx * self.ny] - self.Td_p = (1 - self.T)**self.p - self.Td = (sum(self.Td_p * self.rho_vec)/sum(self.rho_vec))**(1/self.p) + self.Td_p = (1 - self.T) ** self.p + self.Td = (sum(self.Td_p * self.rho_vec) / sum(self.rho_vec)) ** (1 / self.p) return self.Td def adjoint(self): - T_p1 = -(self.T-1) ** (self.p-1) - dg_dT = self.Td**(1-self.p) * (T_p1*self.rho_vec)/sum(self.rho_vec) + T_p1 = -((self.T - 1) ** (self.p - 1)) + dg_dT = self.Td ** (1 - self.p) * (T_p1 * self.rho_vec) / sum(self.rho_vec) if self.solver == spsolve: return self.solver(csr_matrix(self.A.transpose()), dg_dT) aT, _ = self.solver(csr_matrix(self.A.transpose()), dg_dT) @@ -93,55 +138,75 @@ def adjoint(self): def calculate_grad(self): dg_dp = np.zeros(self.n) - dg_dp[:-self.nx*self.ny] = (self.Td_p*sum(self.rho_vec))/sum(self.rho_vec)**2 - dg_dp[:-self.nx*self.ny] = dg_dp[:-self.nx*self.ny] - sum(self.Td_p*self.rho_vec)/sum(self.rho_vec)**2 - dg_dp = self.Td ** (1-self.p) * dg_dp / self.p + dg_dp[: -self.nx * self.ny] = (self.Td_p * sum(self.rho_vec)) / sum( + self.rho_vec + ) ** 2 + dg_dp[: -self.nx * self.ny] = ( + dg_dp[: -self.nx * self.ny] + - sum(self.Td_p * self.rho_vec) / sum(self.rho_vec) ** 2 + ) + dg_dp = self.Td ** (1 - self.p) * dg_dp / self.p dAx = lil_matrix((self.m, self.n)) - gxT = np.reshape(self.gx * self.T, (-1,1)) - drhox = kron(eye(self.nz-1), kron(eye(self.ny), diags([0.5,0.5], [0, 1], shape=[self.nx-1,self.nx]))) - dAx[:, :-self.nx*self.ny] = (1-self.zeta)*self.k0*lil_matrix(self.dx * drhox.multiply(gxT)) #element-wise product + gxT = np.reshape(self.gx * self.T, (-1, 1)) + drhox = kron( + eye(self.nz - 1), + kron(eye(self.ny), diags([0.5, 0.5], [0, 1], shape=[self.nx - 1, self.nx])), + ) + dAx[:, : -self.nx * self.ny] = ( + (1 - self.zeta) * self.k0 * lil_matrix(self.dx * drhox.multiply(gxT)) + ) # element-wise product dAy = lil_matrix((self.m, self.n)) - gyT = np.reshape(self.gy * self.T, (-1,1)) - drhoy = kron(kron(eye(self.nz-1), diags([0.5,0.5], [0, 1], shape=[self.ny-1,self.ny])), eye(self.nx)) - dAy[:, :-self.nx*self.ny] = (1-self.zeta)*self.k0*lil_matrix(self.dy * drhoy.multiply(gyT)) #element-wise product - - Tz = np.pad(self.T, (0, self.nx*self.ny), 'constant', constant_values=1) - gzTz = np.reshape(self.gz * Tz, (-1,1)) - drhoz = diags([0.5,0.5], [0, -1], shape=[self.nz,self.nz], format="lil") - drhoz[0,0]=0 - drhoz = kron(drhoz,eye(self.nx*self.ny)) - dAz = (1-self.zeta)*self.k0*self.dz * drhoz.multiply(gzTz) - d_damping = self.k0*self.alpha**2*diags(-self.T, shape=(self.m, self.n)) - - self.grad = dg_dp + self.adjoint().reshape(1, -1) * csr_matrix(dAz + dAx + dAy + d_damping) + gyT = np.reshape(self.gy * self.T, (-1, 1)) + drhoy = kron( + kron( + eye(self.nz - 1), + diags([0.5, 0.5], [0, 1], shape=[self.ny - 1, self.ny]), + ), + eye(self.nx), + ) + dAy[:, : -self.nx * self.ny] = ( + (1 - self.zeta) * self.k0 * lil_matrix(self.dy * drhoy.multiply(gyT)) + ) # element-wise product + + Tz = np.pad(self.T, (0, self.nx * self.ny), "constant", constant_values=1) + gzTz = np.reshape(self.gz * Tz, (-1, 1)) + drhoz = diags([0.5, 0.5], [0, -1], shape=[self.nz, self.nz], format="lil") + drhoz[0, 0] = 0 + drhoz = kron(drhoz, eye(self.nx * self.ny)) + dAz = (1 - self.zeta) * self.k0 * self.dz * drhoz.multiply(gzTz) + d_damping = self.k0 * self.alpha**2 * diags(-self.T, shape=(self.m, self.n)) + + self.grad = dg_dp + self.adjoint().reshape(1, -1) * csr_matrix( + dAz + dAx + dAy + d_damping + ) return self.grad[0] def __call__(self, rho_vector): Td = self.forward(rho_vector) grad = self.calculate_grad() - return Td-self.thresh, grad + return Td - self.thresh, grad def calculate_fd_grad(self, rho_vector, num, db=1e-4): fdidx = np.random.choice(self.n, num) fdgrad = [] for k in fdidx: - rho_vector[k]+=db + rho_vector[k] += db fp = self.forward(rho_vector) - rho_vector[k]-=2*db + rho_vector[k] -= 2 * db fm = self.forward(rho_vector) - fdgrad.append((fp-fm)/(2*db)) - rho_vector[k]+=db + fdgrad.append((fp - fm) / (2 * db)) + rho_vector[k] += db return fdidx, fdgrad def calculate_all_fd_grad(self, rho_vector, db=1e-4): fdgrad = [] for k in range(self.n): - rho_vector[k]+=db + rho_vector[k] += db fp = self.forward(rho_vector) - rho_vector[k]-=2*db + rho_vector[k] -= 2 * db fm = self.forward(rho_vector) - fdgrad.append((fp-fm)/(2*db)) - rho_vector[k]+=db + fdgrad.append((fp - fm) / (2 * db)) + rho_vector[k] += db return range(self.n), np.array(fdgrad) diff --git a/python/adjoint/filter_source.py b/python/adjoint/filter_source.py index 6c82cff27..9c23b3b17 100644 --- a/python/adjoint/filter_source.py +++ b/python/adjoint/filter_source.py @@ -1,5 +1,6 @@ import numpy as np -from scipy import signal, linalg +from scipy import linalg, signal + from meep import CustomSource @@ -32,23 +33,29 @@ def __init__( self.bf = [ lambda t, i=i: 0 - if t > self.T else (self.nuttall(t, self.center_frequencies) / - (self.dt / np.sqrt(2 * np.pi)))[i] + if t > self.T + else ( + self.nuttall(t, self.center_frequencies) + / (self.dt / np.sqrt(2 * np.pi)) + )[i] for i in range(len(self.center_frequencies)) ] self.time_src_bf = [ - CustomSource(src_func=bfi, - center_frequency=center_frequency, - is_integrated=False, - end_time=self.T, - fwidth=fwidth) for bfi in self.bf + CustomSource( + src_func=bfi, + center_frequency=center_frequency, + is_integrated=False, + end_time=self.T, + fwidth=fwidth, + ) + for bfi in self.bf ] if time_src: # get the cutoff of the input signal - signal_t = np.array([ - time_src.swigobj.current(ti, dt) for ti in self.t - ]) # time domain signal + signal_t = np.array( + [time_src.swigobj.current(ti, dt) for ti in self.t] + ) # time domain signal signal_dtft = self.dtft(signal_t, self.frequencies) else: signal_dtft = 1 @@ -60,38 +67,47 @@ def __init__( self.nodes, self.err = self.estimate_impulse_response(H) # initialize super - super(FilteredSource, self).__init__(src_func=f, - center_frequency=center_frequency, - is_integrated=False, - end_time=self.T, - fwidth=fwidth) + super().__init__( + src_func=f, + center_frequency=center_frequency, + is_integrated=False, + end_time=self.T, + fwidth=fwidth, + ) def cos_window_td(self, a, t, f0): - cos_sum = np.sum([(-1)**k * a[k] * np.cos(2 * np.pi * t * k / self.T) - for k in range(len(a))], - axis=0) + cos_sum = np.sum( + [ + (-1) ** k * a[k] * np.cos(2 * np.pi * t * k / self.T) + for k in range(len(a)) + ], + axis=0, + ) return np.exp(-1j * 2 * np.pi * f0 * t) * (cos_sum) def cos_window_fd(self, a, f, f0): df = 1 / (self.N * self.dt) cos_sum = a[0] * self.sinc(f, f0) for k in range(1, len(a)): - cos_sum += (-1)**k * a[k] / 2 * self.sinc(f, f0 - k * df) + ( - -1)**k * a[k] / 2 * self.sinc(f, f0 + k * df) + cos_sum += (-1) ** k * a[k] / 2 * self.sinc(f, f0 - k * df) + (-1) ** k * a[ + k + ] / 2 * self.sinc(f, f0 + k * df) return cos_sum def sinc(self, f, f0): - num = np.where(f == f0, self.N + 1, - (1 - np.exp(1j * (self.N + 1) * (2 * np.pi) * - (f - f0) * self.dt))) - den = np.where(f == f0, 1, - (1 - np.exp(1j * (2 * np.pi) * (f - f0) * self.dt))) + num = np.where( + f == f0, + self.N + 1, + (1 - np.exp(1j * (self.N + 1) * (2 * np.pi) * (f - f0) * self.dt)), + ) + den = np.where(f == f0, 1, (1 - np.exp(1j * (2 * np.pi) * (f - f0) * self.dt))) return num / den def rect(self, t, f0): n = np.rint((t) / self.dt) - return np.where(n.any() < 0.0 or n.any() > self.N, 0, - np.exp(-1j * 2 * np.pi * f0 * t)) + return np.where( + n.any() < 0.0 or n.any() > self.N, 0, np.exp(-1j * 2 * np.pi * f0 * t) + ) def hann(self, t, f0): a = [0.5, 0.5] @@ -115,24 +131,30 @@ def nuttall_dtft(self, f, f0): ## C / f^3 where C is a constant and f is the frequency def nuttall_bandwidth(self): tol = 1e-7 - fwidth = 1/(self.N * self.dt) - frq_inf = 10000*fwidth + fwidth = 1 / (self.N * self.dt) + frq_inf = 10000 * fwidth na_dtft = self.nuttall_dtft(frq_inf, 0) coeff = frq_inf**3 * np.abs(na_dtft) na_dtft_max = self.nuttall_dtft(0, 0) - bw = 2 * np.power(coeff / (tol * na_dtft_max), 1/3) + bw = 2 * np.power(coeff / (tol * na_dtft_max), 1 / 3) return bw.real def dtft(self, y, f): - return np.matmul( - np.exp(1j * 2 * np.pi * f[:, np.newaxis] * np.arange(y.size) * - self.dt), y) * self.dt / np.sqrt(2 * np.pi) + return ( + np.matmul( + np.exp(1j * 2 * np.pi * f[:, np.newaxis] * np.arange(y.size) * self.dt), + y, + ) + * self.dt + / np.sqrt(2 * np.pi) + ) def __call__(self, t): if t > self.T: return 0 vec = self.nuttall(t, self.center_frequencies) / ( - self.dt / np.sqrt(2 * np.pi)) # compensate for meep dtft + self.dt / np.sqrt(2 * np.pi) + ) # compensate for meep dtft return np.inner(vec, self.nodes) def func(self): @@ -145,9 +167,10 @@ def estimate_impulse_response(self, H): # Use vandermonde matrix to calculate weights of each gaussian. Each window is centered at each frequency point. # TODO: come up with a more sophisticated way to choose temporal window size and basis locations # that will minimize l2 estimation error and the node weights (since matrix is ill-conditioned) - vandermonde = self.nuttall_dtft(self.frequencies[:, np.newaxis], - self.center_frequencies[np.newaxis, :]) + vandermonde = self.nuttall_dtft( + self.frequencies[:, np.newaxis], self.center_frequencies[np.newaxis, :] + ) nodes = np.matmul(linalg.pinv(vandermonde), H.T) H_hat = np.matmul(vandermonde, nodes) - l2_err = np.sum(np.abs(H - H_hat.T)**2 / np.abs(H)**2) + l2_err = np.sum(np.abs(H - H_hat.T) ** 2 / np.abs(H) ** 2) return nodes, l2_err diff --git a/python/adjoint/filters.py b/python/adjoint/filters.py index c7eddd688..262f37937 100644 --- a/python/adjoint/filters.py +++ b/python/adjoint/filters.py @@ -1,31 +1,32 @@ """ General filter functions to be used in other projection and morphological transform routines. """ - import numpy as np from autograd import numpy as npa +from scipy import signal, special + import meep as mp -from scipy import special -from scipy import signal -def _proper_pad(x,n): - ''' + +def _proper_pad(x, n): + """ Parameters ---------- x : array_like (2D) Input array. Must be 2D. n : int Total size to be padded to. - ''' + """ N = x.size - k = n - (2*N-1) - return np.concatenate((x,np.zeros((k,)),np.flipud(x[1:]))) + k = n - (2 * N - 1) + return np.concatenate((x, np.zeros((k,)), np.flipud(x[1:]))) + def _centered(arr, newshape): - '''Helper function that reformats the padded array of the fft filter operation. + """Helper function that reformats the padded array of the fft filter operation. Borrowed from scipy: https://github.com/scipy/scipy/blob/v1.4.1/scipy/signal/signaltools.py#L263-L270 - ''' + """ # Return the center newshape portion of the array. newshape = np.asarray(newshape) currshape = np.array(arr.shape) @@ -34,6 +35,7 @@ def _centered(arr, newshape): myslice = [slice(startind[k], endind[k]) for k in range(len(endind))] return arr[tuple(myslice)] + def _edge_pad(arr, pad): # fill sides @@ -46,16 +48,17 @@ def _edge_pad(arr, pad): top_left = npa.tile(arr[0, 0], (pad[0][0], pad[1][0])) # top left top_right = npa.tile(arr[-1, 0], (pad[0][1], pad[1][0])) # top right bottom_left = npa.tile(arr[0, -1], (pad[0][0], pad[1][1])) # bottom left - bottom_right = npa.tile(arr[-1, -1], - (pad[0][1], pad[1][1])) # bottom right + bottom_right = npa.tile(arr[-1, -1], (pad[0][1], pad[1][1])) # bottom right - out = npa.concatenate((npa.concatenate( - (top_left, top, top_right)), npa.concatenate((left, arr, right)), - npa.concatenate( - (bottom_left, bottom, bottom_right))), - axis=1) + return npa.concatenate( + ( + npa.concatenate((top_left, top, top_right)), + npa.concatenate((left, arr, right)), + npa.concatenate((bottom_left, bottom, bottom_right)), + ), + axis=1, + ) - return out def simple_2d_filter(x, h): """A simple 2d filter algorithm that is differentiable with autograd. @@ -77,11 +80,14 @@ def simple_2d_filter(x, h): The output of the 2d convolution. """ (kx, ky) = x.shape - x = _edge_pad(x,((kx, kx), (ky, ky))) - return _centered(npa.real(npa.fft.ifft2(npa.fft.fft2(x)*npa.fft.fft2(h))),(kx, ky)) + x = _edge_pad(x, ((kx, kx), (ky, ky))) + return _centered( + npa.real(npa.fft.ifft2(npa.fft.fft2(x) * npa.fft.fft2(h))), (kx, ky) + ) + def cylindrical_filter(x, radius, Lx, Ly, resolution): - '''A uniform cylindrical filter [1]. Typically allows for sharper transitions. + """A uniform cylindrical filter [1]. Typically allows for sharper transitions. Parameters ---------- @@ -105,19 +111,19 @@ def cylindrical_filter(x, radius, Lx, Ly, resolution): ---------- [1] Lazarov, B. S., Wang, F., & Sigmund, O. (2016). Length scale and manufacturability in density-based topology optimization. Archive of Applied Mechanics, 86(1-2), 189-218. - ''' - Nx = int(Lx*resolution) - Ny = int(Ly*resolution) - x = x.reshape(Nx, Ny) # Ensure the input is 2D + """ + Nx = int(Lx * resolution) + Ny = int(Ly * resolution) + x = x.reshape(Nx, Ny) # Ensure the input is 2D - xv = np.arange(0,Lx/2,1/resolution) - yv = np.arange(0,Ly/2,1/resolution) + xv = np.arange(0, Lx / 2, 1 / resolution) + yv = np.arange(0, Ly / 2, 1 / resolution) cylindrical = lambda a: np.where(a <= radius, 1, 0) hx = cylindrical(xv) hy = cylindrical(yv) - h = np.outer(_proper_pad(hx,3*Nx),_proper_pad(hy,3*Ny)) + h = np.outer(_proper_pad(hx, 3 * Nx), _proper_pad(hy, 3 * Ny)) # Normalize kernel h = h / np.sum(h.flatten()) # Normalize the filter @@ -127,7 +133,7 @@ def cylindrical_filter(x, radius, Lx, Ly, resolution): def conic_filter(x, radius, Lx, Ly, resolution): - '''A linear conic filter, also known as a "Hat" filter in the literature [1]. + """A linear conic filter, also known as a "Hat" filter in the literature [1]. Parameters ---------- @@ -151,19 +157,19 @@ def conic_filter(x, radius, Lx, Ly, resolution): ---------- [1] Lazarov, B. S., Wang, F., & Sigmund, O. (2016). Length scale and manufacturability in density-based topology optimization. Archive of Applied Mechanics, 86(1-2), 189-218. - ''' - Nx = int(Lx*resolution) - Ny = int(Ly*resolution) - x = x.reshape(Nx, Ny) # Ensure the input is 2D + """ + Nx = int(Lx * resolution) + Ny = int(Ly * resolution) + x = x.reshape(Nx, Ny) # Ensure the input is 2D - xv = np.arange(0,Lx/2,1/resolution) - yv = np.arange(0,Ly/2,1/resolution) + xv = np.arange(0, Lx / 2, 1 / resolution) + yv = np.arange(0, Ly / 2, 1 / resolution) conic = lambda a: np.where(np.abs(a**2) <= radius**2, (1 - a / radius), 0) hx = conic(xv) hy = conic(yv) - h = np.outer(_proper_pad(hx,3*Nx),_proper_pad(hy,3*Ny)) + h = np.outer(_proper_pad(hx, 3 * Nx), _proper_pad(hy, 3 * Ny)) # Normalize kernel h = h / np.sum(h.flatten()) # Normalize the filter @@ -173,7 +179,7 @@ def conic_filter(x, radius, Lx, Ly, resolution): def gaussian_filter(x, sigma, Lx, Ly, resolution): - '''A simple gaussian filter of the form exp(-x **2 / sigma ** 2) [1]. + """A simple gaussian filter of the form exp(-x **2 / sigma ** 2) [1]. Parameters ---------- @@ -197,19 +203,19 @@ def gaussian_filter(x, sigma, Lx, Ly, resolution): ---------- [1] Wang, E. W., Sell, D., Phan, T., & Fan, J. A. (2019). Robust design of topology-optimized metasurfaces. Optical Materials Express, 9(2), 469-482. - ''' - Nx = int(Lx*resolution) - Ny = int(Ly*resolution) - x = x.reshape(Nx, Ny) # Ensure the input is 2D + """ + Nx = int(Lx * resolution) + Ny = int(Ly * resolution) + x = x.reshape(Nx, Ny) # Ensure the input is 2D - xv = np.arange(0,Lx/2,1/resolution) - yv = np.arange(0,Ly/2,1/resolution) + xv = np.arange(0, Lx / 2, 1 / resolution) + yv = np.arange(0, Ly / 2, 1 / resolution) - gaussian = lambda a: np.exp(-a**2 / sigma**2) + gaussian = lambda a: np.exp(-(a**2) / sigma**2) hx = gaussian(xv) hy = gaussian(yv) - h = np.outer(_proper_pad(hx,3*Nx),_proper_pad(hy,3*Ny)) + h = np.outer(_proper_pad(hx, 3 * Nx), _proper_pad(hy, 3 * Ny)) # Normalize kernel h = h / np.sum(h.flatten()) # Normalize the filter @@ -217,14 +223,15 @@ def gaussian_filter(x, sigma, Lx, Ly, resolution): # Filter the response return simple_2d_filter(x, h) -''' + +""" # ------------------------------------------------------------------------------------ # Erosion and dilation operators -''' +""" def exponential_erosion(x, radius, beta, Lx, Ly, resolution): - ''' Performs and exponential erosion operation. + """Performs and exponential erosion operation. Parameters ---------- @@ -253,15 +260,18 @@ def exponential_erosion(x, radius, beta, Lx, Ly, resolution): [2] Schevenels, M., & Sigmund, O. (2016). On the implementation and effectiveness of morphological close-open and open-close filters for topology optimization. Structural and Multidisciplinary Optimization, 54(1), 15-21. - ''' + """ x_hat = npa.exp(beta * (1 - x)) - return 1 - npa.log( - cylindrical_filter(x_hat, radius, Lx, Ly, resolution).flatten()) / beta + return ( + 1 + - npa.log(cylindrical_filter(x_hat, radius, Lx, Ly, resolution).flatten()) + / beta + ) def exponential_dilation(x, radius, beta, Lx, Ly, resolution): - ''' Performs a exponential dilation operation. + """Performs a exponential dilation operation. Parameters ---------- @@ -290,15 +300,16 @@ def exponential_dilation(x, radius, beta, Lx, Ly, resolution): [2] Schevenels, M., & Sigmund, O. (2016). On the implementation and effectiveness of morphological close-open and open-close filters for topology optimization. Structural and Multidisciplinary Optimization, 54(1), 15-21. - ''' + """ x_hat = npa.exp(beta * x) - return npa.log( - cylindrical_filter(x_hat, radius, Lx, Ly, resolution).flatten()) / beta + return ( + npa.log(cylindrical_filter(x_hat, radius, Lx, Ly, resolution).flatten()) / beta + ) def heaviside_erosion(x, radius, beta, Lx, Ly, resolution): - ''' Performs a heaviside erosion operation. + """Performs a heaviside erosion operation. Parameters ---------- @@ -325,14 +336,14 @@ def heaviside_erosion(x, radius, beta, Lx, Ly, resolution): [1] Guest, J. K., Prévost, J. H., & Belytschko, T. (2004). Achieving minimum length scale in topology optimization using nodal design variables and projection functions. International journal for numerical methods in engineering, 61(2), 238-254. - ''' + """ x_hat = cylindrical_filter(x, radius, Lx, Ly, resolution).flatten() return npa.exp(-beta * (1 - x_hat)) + npa.exp(-beta) * (1 - x_hat) def heaviside_dilation(x, radius, beta, Lx, Ly, resolution): - ''' Performs a heaviside dilation operation. + """Performs a heaviside dilation operation. Parameters ---------- @@ -359,14 +370,14 @@ def heaviside_dilation(x, radius, beta, Lx, Ly, resolution): [1] Guest, J. K., Prévost, J. H., & Belytschko, T. (2004). Achieving minimum length scale in topology optimization using nodal design variables and projection functions. International journal for numerical methods in engineering, 61(2), 238-254. - ''' + """ x_hat = cylindrical_filter(x, radius, Lx, Ly, resolution).flatten() return 1 - npa.exp(-beta * x_hat) + npa.exp(-beta) * x_hat def geometric_erosion(x, radius, alpha, Lx, Ly, resolution): - ''' Performs a geometric erosion operation. + """Performs a geometric erosion operation. Parameters ---------- @@ -392,14 +403,15 @@ def geometric_erosion(x, radius, alpha, Lx, Ly, resolution): ---------- [1] Svanberg, K., & Svärd, H. (2013). Density filters for topology optimization based on the Pythagorean means. Structural and Multidisciplinary Optimization, 48(5), 859-875. - ''' + """ x_hat = npa.log(x + alpha) - return npa.exp(cylindrical_filter(x_hat, radius, Lx, Ly, - resolution)).flatten() - alpha + return ( + npa.exp(cylindrical_filter(x_hat, radius, Lx, Ly, resolution)).flatten() - alpha + ) def geometric_dilation(x, radius, alpha, Lx, Ly, resolution): - ''' Performs a geometric dilation operation. + """Performs a geometric dilation operation. Parameters ---------- @@ -425,15 +437,18 @@ def geometric_dilation(x, radius, alpha, Lx, Ly, resolution): ---------- [1] Svanberg, K., & Svärd, H. (2013). Density filters for topology optimization based on the Pythagorean means. Structural and Multidisciplinary Optimization, 48(5), 859-875. - ''' + """ x_hat = npa.log(1 - x + alpha) - return -npa.exp(cylindrical_filter(x_hat, radius, Lx, Ly, - resolution)).flatten() + alpha + 1 + return ( + -npa.exp(cylindrical_filter(x_hat, radius, Lx, Ly, resolution)).flatten() + + alpha + + 1 + ) def harmonic_erosion(x, radius, alpha, Lx, Ly, resolution): - ''' Performs a harmonic erosion operation. + """Performs a harmonic erosion operation. Parameters ---------- @@ -459,15 +474,14 @@ def harmonic_erosion(x, radius, alpha, Lx, Ly, resolution): ---------- [1] Svanberg, K., & Svärd, H. (2013). Density filters for topology optimization based on the Pythagorean means. Structural and Multidisciplinary Optimization, 48(5), 859-875. - ''' + """ x_hat = 1 / (x + alpha) - return 1 / cylindrical_filter(x_hat, radius, Lx, Ly, - resolution).flatten() - alpha + return 1 / cylindrical_filter(x_hat, radius, Lx, Ly, resolution).flatten() - alpha def harmonic_dilation(x, radius, alpha, Lx, Ly, resolution): - ''' Performs a harmonic dilation operation. + """Performs a harmonic dilation operation. Parameters ---------- @@ -493,21 +507,22 @@ def harmonic_dilation(x, radius, alpha, Lx, Ly, resolution): ---------- [1] Svanberg, K., & Svärd, H. (2013). Density filters for topology optimization based on the Pythagorean means. Structural and Multidisciplinary Optimization, 48(5), 859-875. - ''' + """ x_hat = 1 / (1 - x + alpha) - return 1 - 1 / cylindrical_filter(x_hat, radius, Lx, Ly, - resolution).flatten() + alpha + return ( + 1 - 1 / cylindrical_filter(x_hat, radius, Lx, Ly, resolution).flatten() + alpha + ) -''' +""" # ------------------------------------------------------------------------------------ # Projection filters -''' +""" def tanh_projection(x, beta, eta): - '''Projection filter that thresholds the input parameters between 0 and 1. Typically + """Projection filter that thresholds the input parameters between 0 and 1. Typically the "strongest" projection. Parameters @@ -527,16 +542,15 @@ def tanh_projection(x, beta, eta): ---------- [1] Wang, F., Lazarov, B. S., & Sigmund, O. (2011). On projection methods, convergence and robust formulations in topology optimization. Structural and Multidisciplinary Optimization, 43(6), 767-784. - ''' + """ - return (npa.tanh(beta * eta) + - npa.tanh(beta * - (x - eta))) / (npa.tanh(beta * eta) + npa.tanh(beta * - (1 - eta))) + return (npa.tanh(beta * eta) + npa.tanh(beta * (x - eta))) / ( + npa.tanh(beta * eta) + npa.tanh(beta * (1 - eta)) + ) def heaviside_projection(x, beta, eta): - '''Projection filter that thresholds the input parameters between 0 and 1. + """Projection filter that thresholds the input parameters between 0 and 1. Parameters ---------- @@ -556,22 +570,25 @@ def heaviside_projection(x, beta, eta): ---------- [1] Lazarov, B. S., Wang, F., & Sigmund, O. (2016). Length scale and manufacturability in density-based topology optimization. Archive of Applied Mechanics, 86(1-2), 189-218. - ''' + """ case1 = eta * npa.exp(-beta * (eta - x) / eta) - (eta - x) * npa.exp(-beta) - case2 = 1 - (1 - eta) * npa.exp(-beta * (x - eta) / - (1 - eta)) - (eta - x) * npa.exp(-beta) + case2 = ( + 1 + - (1 - eta) * npa.exp(-beta * (x - eta) / (1 - eta)) + - (eta - x) * npa.exp(-beta) + ) return npa.where(x < eta, case1, case2) -''' +""" # ------------------------------------------------------------------------------------ # Length scale operations -''' +""" def get_threshold_wang(delta, sigma): - '''Calculates the threshold point according to the gaussian filter radius (`sigma`) and + """Calculates the threshold point according to the gaussian filter radius (`sigma`) and the perturbation parameter (`sigma`) needed to ensure the proper length scale and morphological transformation according to Wang et. al. [2]. @@ -593,13 +610,13 @@ def get_threshold_wang(delta, sigma): photonic crystal waveguides with tailored dispersion properties. JOSA B, 28(3), 387-397. [2] Wang, E. W., Sell, D., Phan, T., & Fan, J. A. (2019). Robust design of topology-optimized metasurfaces. Optical Materials Express, 9(2), 469-482. - ''' + """ return 0.5 - special.erf(delta / sigma) def get_eta_from_conic(b, R): - ''' Extracts the eroded threshold point (`eta_e`) for a conic filter given the desired + """Extracts the eroded threshold point (`eta_e`) for a conic filter given the desired minimum length (`b`) and the filter radius (`R`). This only works for conic filters. Note that the units for `b` and `R` can be arbitrary so long as they are consistent. @@ -628,18 +645,17 @@ def get_eta_from_conic(b, R): Optimization, 43(6), 767-784. [3] Lazarov, B. S., Wang, F., & Sigmund, O. (2016). Length scale and manufacturability in density-based topology optimization. Archive of Applied Mechanics, 86(1-2), 189-218. - ''' + """ norm_length = b / R if norm_length < 0: - eta_e = 0 + return 0 elif norm_length < 1: - eta_e = 0.25 * norm_length**2 + 0.5 + return 0.25 * norm_length**2 + 0.5 elif norm_length < 2: - eta_e = -0.25 * norm_length**2 + norm_length + return -0.25 * norm_length**2 + norm_length else: - eta_e = 1 - return eta_e + return 1 def get_conic_radius_from_eta_e(b, eta_e): @@ -675,11 +691,12 @@ def get_conic_radius_from_eta_e(b, eta_e): return b / (2 - 2 * np.sqrt(1 - eta_e)) else: raise ValueError( - "The erosion threshold point (eta_e) must be between 0.5 and 1.") + "The erosion threshold point (eta_e) must be between 0.5 and 1." + ) def indicator_solid(x, c, filter_f, threshold_f, resolution): - '''Calculates the indicator function for the void phase needed for minimum length optimization [1]. + """Calculates the indicator function for the void phase needed for minimum length optimization [1]. Parameters ---------- @@ -703,23 +720,23 @@ def indicator_solid(x, c, filter_f, threshold_f, resolution): ---------- [1] Zhou, M., Lazarov, B. S., Wang, F., & Sigmund, O. (2015). Minimum length scale in topology optimization by geometric constraints. Computer Methods in Applied Mechanics and Engineering, 293, 266-282. - ''' + """ filtered_field = filter_f(x) design_field = threshold_f(filtered_field) gradient_filtered_field = npa.gradient(filtered_field) - grad_mag = (gradient_filtered_field[0] * - resolution)**2 + (gradient_filtered_field[1] * resolution)**2 + grad_mag = (gradient_filtered_field[0] * resolution) ** 2 + ( + gradient_filtered_field[1] * resolution + ) ** 2 if grad_mag.ndim != 2: raise ValueError( "The gradient fields must be 2 dimensional. Check input array and filter functions." ) - I_s = design_field * npa.exp(-c * grad_mag) - return I_s + return design_field * npa.exp(-c * grad_mag) def constraint_solid(x, c, eta_e, filter_f, threshold_f, resolution): - '''Calculates the constraint function of the solid phase needed for minimum length optimization [1]. + """Calculates the constraint function of the solid phase needed for minimum length optimization [1]. Parameters ---------- @@ -748,16 +765,17 @@ def constraint_solid(x, c, eta_e, filter_f, threshold_f, resolution): ---------- [1] Zhou, M., Lazarov, B. S., Wang, F., & Sigmund, O. (2015). Minimum length scale in topology optimization by geometric constraints. Computer Methods in Applied Mechanics and Engineering, 293, 266-282. - ''' + """ filtered_field = filter_f(x) - I_s = indicator_solid(x.reshape(filtered_field.shape), c, filter_f, - threshold_f, resolution).flatten() - return npa.mean(I_s * npa.minimum(filtered_field.flatten() - eta_e, 0)**2) + I_s = indicator_solid( + x.reshape(filtered_field.shape), c, filter_f, threshold_f, resolution + ).flatten() + return npa.mean(I_s * npa.minimum(filtered_field.flatten() - eta_e, 0) ** 2) def indicator_void(x, c, filter_f, threshold_f, resolution): - '''Calculates the indicator function for the void phase needed for minimum length optimization [1]. + """Calculates the indicator function for the void phase needed for minimum length optimization [1]. Parameters ---------- @@ -781,13 +799,14 @@ def indicator_void(x, c, filter_f, threshold_f, resolution): ---------- [1] Zhou, M., Lazarov, B. S., Wang, F., & Sigmund, O. (2015). Minimum length scale in topology optimization by geometric constraints. Computer Methods in Applied Mechanics and Engineering, 293, 266-282. - ''' + """ filtered_field = filter_f(x).reshape(x.shape) design_field = threshold_f(filtered_field) gradient_filtered_field = npa.gradient(filtered_field) - grad_mag = (gradient_filtered_field[0] * - resolution)**2 + (gradient_filtered_field[1] * resolution)**2 + grad_mag = (gradient_filtered_field[0] * resolution) ** 2 + ( + gradient_filtered_field[1] * resolution + ) ** 2 if grad_mag.ndim != 2: raise ValueError( "The gradient fields must be 2 dimensional. Check input array and filter functions." @@ -796,7 +815,7 @@ def indicator_void(x, c, filter_f, threshold_f, resolution): def constraint_void(x, c, eta_d, filter_f, threshold_f, resolution): - '''Calculates the constraint function of the void phase needed for minimum length optimization [1]. + """Calculates the constraint function of the void phase needed for minimum length optimization [1]. Parameters ---------- @@ -825,16 +844,17 @@ def constraint_void(x, c, eta_d, filter_f, threshold_f, resolution): ---------- [1] Zhou, M., Lazarov, B. S., Wang, F., & Sigmund, O. (2015). Minimum length scale in topology optimization by geometric constraints. Computer Methods in Applied Mechanics and Engineering, 293, 266-282. - ''' + """ filtered_field = filter_f(x) - I_v = indicator_void(x.reshape(filtered_field.shape), c, filter_f, - threshold_f, resolution).flatten() - return npa.mean(I_v * npa.minimum(eta_d - filtered_field.flatten(), 0)**2) + I_v = indicator_void( + x.reshape(filtered_field.shape), c, filter_f, threshold_f, resolution + ).flatten() + return npa.mean(I_v * npa.minimum(eta_d - filtered_field.flatten(), 0) ** 2) def gray_indicator(x): - '''Calculates a measure of "grayness" according to [1]. + """Calculates a measure of "grayness" according to [1]. Lower numbers ( < 2%) indicate a good amount of binarization [1]. @@ -852,5 +872,5 @@ def gray_indicator(x): ---------- [1] Lazarov, B. S., Wang, F., & Sigmund, O. (2016). Length scale and manufacturability in density-based topology optimization. Archive of Applied Mechanics, 86(1-2), 189-218. - ''' + """ return npa.mean(4 * x.flatten() * (1 - x.flatten())) * 100 diff --git a/python/adjoint/objective.py b/python/adjoint/objective.py index 7bfa010d4..07aeea618 100644 --- a/python/adjoint/objective.py +++ b/python/adjoint/objective.py @@ -1,13 +1,16 @@ """Handling of objective functions and objective quantities.""" - import abc +from collections import namedtuple + import numpy as np +from meep.simulation import py_v3_to_vec + import meep as mp + from .filter_source import FilteredSource -from meep.simulation import py_v3_to_vec -from collections import namedtuple -Grid = namedtuple('Grid', ['x', 'y', 'z', 'w']) +Grid = namedtuple("Grid", ["x", "y", "z", "w"]) + class ObjectiveQuantity(abc.ABC): """A differentiable objective quantity. @@ -17,6 +20,7 @@ class ObjectiveQuantity(abc.ABC): frequencies: the frequencies at which the objective quantity is evaluated. num_freq: the number of frequencies at which the objective quantity is evaluated. """ + def __init__(self, sim): self.sim = sim self._eval = None @@ -48,7 +52,7 @@ def get_evaluation(self): return self._eval else: raise RuntimeError( - 'You must first run a forward simulation before requesting the evaluation of an objective quantity.' + "You must first run a forward simulation before requesting the evaluation of an objective quantity." ) def _adj_src_scale(self, include_resolution=True): @@ -68,23 +72,47 @@ def _adj_src_scale(self, include_resolution=True): ) # scaled frequency factor with discrete time derivative fix # an ugly way to calcuate the scaled dtft of the forward source - y = np.array([src.swigobj.current(t, dt) - for t in np.arange(0, T, dt)]) # time domain signal - fwd_dtft = np.matmul( - np.exp(1j * 2 * np.pi * self._frequencies[:, np.newaxis] * - np.arange(y.size) * dt), y) * dt / np.sqrt( - 2 * np.pi) # dtft + y = np.array( + [src.swigobj.current(t, dt) for t in np.arange(0, T, dt)] + ) # time domain signal + fwd_dtft = ( + np.matmul( + np.exp( + 1j + * 2 + * np.pi + * self._frequencies[:, np.newaxis] + * np.arange(y.size) + * dt + ), + y, + ) + * dt + / np.sqrt(2 * np.pi) + ) # dtft # Interestingly, the real parts of the DTFT and fourier transform match, but the imaginary parts are very different... - #fwd_dtft = src.fourier_transform(src.frequency) - ''' + # fwd_dtft = src.fourier_transform(src.frequency) + """ For some reason, there seems to be an additional phase factor at the center frequency that needs to be applied to *all* frequencies... - ''' - src_center_dtft = np.matmul( - np.exp(1j * 2 * np.pi * np.array([src.frequency])[:, np.newaxis] * - np.arange(y.size) * dt), y) * dt / np.sqrt(2 * np.pi) + """ + src_center_dtft = ( + np.matmul( + np.exp( + 1j + * 2 + * np.pi + * np.array([src.frequency])[:, np.newaxis] + * np.arange(y.size) + * dt + ), + y, + ) + * dt + / np.sqrt(2 * np.pi) + ) adj_src_phase = np.exp(1j * np.angle(src_center_dtft)) * self.fwidth_scale if self._frequencies.size == 1: @@ -109,10 +137,11 @@ def _create_time_profile(self, fwidth_frac=0.1, adj_cutoff=5): The user may specify a scalar valued objective function across multiple frequencies (e.g. MSE) in which case we should check that all the frequencies fit in the specified bandwidth. """ - self.fwidth_scale = np.exp(-2j*np.pi*adj_cutoff/fwidth_frac) + self.fwidth_scale = np.exp(-2j * np.pi * adj_cutoff / fwidth_frac) return mp.GaussianSource( np.mean(self._frequencies), - fwidth=fwidth_frac * np.mean(self._frequencies),cutoff=adj_cutoff + fwidth=fwidth_frac * np.mean(self._frequencies), + cutoff=adj_cutoff, ) @@ -129,20 +158,24 @@ class EigenmodeCoefficient(ObjectiveQuantity): specifying `kpoint_func`. When specified, this overrides the effect of `forward` and should have a value of either 0 or 1. """ - def __init__(self, - sim, - volume, - mode, - forward=True, - kpoint_func=None, - kpoint_func_overlap_idx=0, - decimation_factor=0, - **kwargs): + + def __init__( + self, + sim, + volume, + mode, + forward=True, + kpoint_func=None, + kpoint_func_overlap_idx=0, + decimation_factor=0, + **kwargs + ): super().__init__(sim) if kpoint_func_overlap_idx not in [0, 1]: raise ValueError( - '`kpoint_func_overlap_idx` should be either 0 or 1, but got %d' - % (kpoint_func_overlap_idx, )) + "`kpoint_func_overlap_idx` should be either 0 or 1, but got %d" + % (kpoint_func_overlap_idx,) + ) self.volume = volume self.mode = mode self.forward = forward @@ -174,13 +207,14 @@ def place_adjoint_source(self, dJ): if self.kpoint_func: eig_kpoint = -1 * self.kpoint_func(time_src.frequency, self.mode) else: - center_frequency = 0.5 * (np.min(self.frequencies) + np.max( - self.frequencies)) + center_frequency = 0.5 * ( + np.min(self.frequencies) + np.max(self.frequencies) + ) direction = mp.Vector3( - *(np.eye(3)[self._monitor.normal_direction] * - np.abs(center_frequency))) + *(np.eye(3)[self._monitor.normal_direction] * np.abs(center_frequency)) + ) eig_kpoint = -1 * direction if self.forward else direction - + if self._frequencies.size == 1: amp = da_dE * dJ * scale src = time_src @@ -211,10 +245,12 @@ def __call__(self): kpoint_func = self.kpoint_func overlap_idx = self.kpoint_func_overlap_idx else: - center_frequency = 0.5 * (np.min(self.frequencies) + np.max( - self.frequencies)) - kpoint = mp.Vector3(*(np.eye(3)[self._monitor.normal_direction] * - np.abs(center_frequency))) + center_frequency = 0.5 * ( + np.min(self.frequencies) + np.max(self.frequencies) + ) + kpoint = mp.Vector3( + *(np.eye(3)[self._monitor.normal_direction] * np.abs(center_frequency)) + ) kpoint_func = lambda *not_used: kpoint if self.forward else -1 * kpoint overlap_idx = 0 ob = self.sim.get_eigenmode_coefficients( @@ -242,22 +278,32 @@ def __init__(self, sim, volume, component, yee_grid=False, decimation_factor=0): def register_monitors(self, frequencies): self._frequencies = np.asarray(frequencies) self._monitor = self.sim.add_dft_fields( - [self.component], self._frequencies, where=self.volume, yee_grid=self.yee_grid, decimation_factor=self.decimation_factor) + [self.component], + self._frequencies, + where=self.volume, + yee_grid=self.yee_grid, + decimation_factor=self.decimation_factor, + ) return self._monitor def place_adjoint_source(self, dJ): time_src = self._create_time_profile() sources = [] - mon_size = self.sim.fields.dft_monitor_size(self._monitor.swigobj, self.volume.swigobj, self.component) + mon_size = self.sim.fields.dft_monitor_size( + self._monitor.swigobj, self.volume.swigobj, self.component + ) dJ = dJ.astype(np.complex128) - if np.prod(mon_size)*self.num_freq != dJ.size and np.prod(mon_size)*self.num_freq**2 != dJ.size: - raise ValueError('The format of J is incorrect!') + if ( + np.prod(mon_size) * self.num_freq != dJ.size + and np.prod(mon_size) * self.num_freq**2 != dJ.size + ): + raise ValueError("The format of J is incorrect!") # The objective function J is a vector. Each component corresponds to a frequency. - if np.prod(mon_size)*self.num_freq**2 == dJ.size and self.num_freq > 1: - dJ = np.sum(dJ,axis=1) - '''The adjoint solver requires the objective function + if np.prod(mon_size) * self.num_freq**2 == dJ.size and self.num_freq > 1: + dJ = np.sum(dJ, axis=1) + """The adjoint solver requires the objective function to be scalar valued with regard to objective arguments and position, but the function may be vector valued with regard to frequency. In this case, the Jacobian @@ -265,28 +311,45 @@ def place_adjoint_source(self, dJ): frequencies. Because of linearity, we can sum across the second frequency dimension to calculate a frequency scale factor for each point (rather than a scale vector). - ''' + """ - self.all_fouriersrcdata = self._monitor.swigobj.fourier_sourcedata(self.volume.swigobj, self.component, self.sim.fields, dJ) + self.all_fouriersrcdata = self._monitor.swigobj.fourier_sourcedata( + self.volume.swigobj, self.component, self.sim.fields, dJ + ) for fourier_data in self.all_fouriersrcdata: amp_arr = np.array(fourier_data.amp_arr).reshape(-1, self.num_freq) scale = amp_arr * self._adj_src_scale(include_resolution=False) - + if self.num_freq == 1: - sources += [mp.IndexedSource(time_src, fourier_data, scale[:,0], not self.yee_grid)] + sources += [ + mp.IndexedSource( + time_src, fourier_data, scale[:, 0], not self.yee_grid + ) + ] else: - src = FilteredSource(time_src.frequency,self._frequencies,scale,self.sim.fields.dt) + src = FilteredSource( + time_src.frequency, self._frequencies, scale, self.sim.fields.dt + ) (num_basis, num_pts) = src.nodes.shape for basis_i in range(num_basis): - sources += [mp.IndexedSource(src.time_src_bf[basis_i], fourier_data, src.nodes[basis_i], not self.yee_grid)] + sources += [ + mp.IndexedSource( + src.time_src_bf[basis_i], + fourier_data, + src.nodes[basis_i], + not self.yee_grid, + ) + ] return sources def __call__(self): - self._eval = np.array([ - self.sim.get_dft_array(self._monitor, self.component, i) - for i in range(self.num_freq) - ]) + self._eval = np.array( + [ + self.sim.get_dft_array(self._monitor, self.component, i) + for i in range(self.num_freq) + ] + ) return self._eval @@ -294,7 +357,7 @@ class Near2FarFields(ObjectiveQuantity): def __init__(self, sim, Near2FarRegions, far_pts, decimation_factor=0): super().__init__(sim) self.Near2FarRegions = Near2FarRegions - self.far_pts = far_pts #list of far pts + self.far_pts = far_pts # list of far pts self._nfar_pts = len(far_pts) self.decimation_factor = decimation_factor @@ -322,7 +385,8 @@ def place_adjoint_source(self, dJ): ) all_nearsrcdata = self._monitor.swigobj.near_sourcedata( - far_pt_vec, farpt_list, self._nfar_pts, dJ) + far_pt_vec, farpt_list, self._nfar_pts, dJ + ) for near_data in all_nearsrcdata: cur_comp = near_data.near_fd_comp amp_arr = np.array(near_data.amp_arr).reshape(-1, self.num_freq) @@ -349,12 +413,12 @@ def place_adjoint_source(self, dJ): return sources def __call__(self): - self._eval = np.array([ - self.sim.get_farfield(self._monitor, far_pt) - for far_pt in self.far_pts - ]).reshape((self._nfar_pts, self.num_freq, 6)) + self._eval = np.array( + [self.sim.get_farfield(self._monitor, far_pt) for far_pt in self.far_pts] + ).reshape((self._nfar_pts, self.num_freq, 6)) return self._eval - + + class LDOS(ObjectiveQuantity): def __init__(self, sim, decimation_factor=0, **kwargs): super().__init__(sim) @@ -372,7 +436,9 @@ def place_adjoint_source(self, dJ): dJ = np.sum(dJ, axis=1) dJ = dJ.flatten() sources = [] - forward_f_scale = np.array([self.ldos_scale/self.ldos_Jdata[k] for k in range(self.num_freq)]) + forward_f_scale = np.array( + [self.ldos_scale / self.ldos_Jdata[k] for k in range(self.num_freq)] + ) if self._frequencies.size == 1: amp = (dJ * self._adj_src_scale(False) * forward_f_scale)[0] src = time_src @@ -387,13 +453,29 @@ def place_adjoint_source(self, dJ): amp = 1 for forward_src_i in self.forward_src: if isinstance(forward_src_i, mp.EigenModeSource): - src_i = mp.EigenModeSource(src, component=forward_src_i.component, eig_kpoint = forward_src_i.eig_kpoint, amplitude=amp, eig_band=forward_src_i.eig_band, size = forward_src_i.size,center=forward_src_i.center, **self.srckwarg) + src_i = mp.EigenModeSource( + src, + component=forward_src_i.component, + eig_kpoint=forward_src_i.eig_kpoint, + amplitude=amp, + eig_band=forward_src_i.eig_band, + size=forward_src_i.size, + center=forward_src_i.center, + **self.srckwarg, + ) else: - src_i = mp.Source(src, component=forward_src_i.component, amplitude=amp, size = forward_src_i.size,center=forward_src_i.center, **self.srckwarg) + src_i = mp.Source( + src, + component=forward_src_i.component, + amplitude=amp, + size=forward_src_i.size, + center=forward_src_i.center, + **self.srckwarg, + ) if mp.is_electric(src_i.component): src_i.amplitude *= -1 sources += [src_i] - + return sources def __call__(self): diff --git a/python/adjoint/optimization_problem.py b/python/adjoint/optimization_problem.py index a9b0b656a..707eb8beb 100644 --- a/python/adjoint/optimization_problem.py +++ b/python/adjoint/optimization_problem.py @@ -1,11 +1,14 @@ -import meep as mp +from collections import namedtuple + import numpy as np from autograd import grad, jacobian -from collections import namedtuple -from . import utils, DesignRegion, LDOS +import meep as mp + +from . import LDOS, DesignRegion, utils -class OptimizationProblem(object): + +class OptimizationProblem: """Top-level class in the MEEP adjoint module. Intended to be instantiated from user scripts with mandatory constructor @@ -18,6 +21,7 @@ class OptimizationProblem(object): This is done by the __call__ method. """ + def __init__( self, simulation, @@ -32,7 +36,7 @@ def __init__( decimation_factor=0, minimum_run_time=0, maximum_run_time=None, - finite_difference_step=utils.FD_DEFAULT + finite_difference_step=utils.FD_DEFAULT, ): self.sim = simulation @@ -49,30 +53,27 @@ def __init__( else: self.design_regions = [design_regions] - self.num_design_params = [ - ni.num_design_params for ni in self.design_regions - ] + self.num_design_params = [ni.num_design_params for ni in self.design_regions] self.num_design_regions = len(self.design_regions) # TODO typecheck frequency choices if frequencies is not None: self.frequencies = frequencies self.nf = np.array(frequencies).size + elif nf == 1: + self.nf = nf + self.frequencies = [fcen] else: - if nf == 1: - self.nf = nf - self.frequencies = [fcen] - else: - fmax = fcen + 0.5 * df - fmin = fcen - 0.5 * df - dfreq = (fmax - fmin) / (nf - 1) - self.frequencies = np.linspace( - fmin, - fmin + dfreq * nf, - num=nf, - endpoint=False, - ) - self.nf = nf + fmax = fcen + 0.5 * df + fmin = fcen - 0.5 * df + dfreq = (fmax - fmin) / (nf - 1) + self.frequencies = np.linspace( + fmin, + fmin + dfreq * nf, + num=nf, + endpoint=False, + ) + self.nf = nf if self.nf == 1: self.fcen_idx = 0 @@ -80,15 +81,20 @@ def __init__( self.fcen_idx = int( np.argmin( np.abs( - np.asarray(self.frequencies) - - np.mean(np.asarray(self.frequencies)))** - 2)) # index of center frequency + np.asarray(self.frequencies) + - np.mean(np.asarray(self.frequencies)) + ) + ** 2 + ) + ) # index of center frequency self.decay_by = decay_by self.decimation_factor = decimation_factor self.minimum_run_time = minimum_run_time self.maximum_run_time = maximum_run_time - self.finite_difference_step = finite_difference_step # step size used in Aᵤ computation + self.finite_difference_step = ( + finite_difference_step # step size used in Aᵤ computation + ) # store sources for finite difference estimations self.forward_sources = self.sim.sources @@ -102,8 +108,7 @@ def __init__( self.gradient = [] def __call__(self, rho_vector=None, need_value=True, need_gradient=True, beta=None): - """Evaluate value and/or gradient of objective function. - """ + """Evaluate value and/or gradient of objective function.""" if rho_vector: self.update_design(rho_vector=rho_vector, beta=beta) @@ -128,8 +133,9 @@ def __call__(self, rho_vector=None, need_value=True, need_gradient=True, beta=No print("Calculating gradient...") self.calculate_gradient() else: - raise ValueError("Incorrect solver state detected: {}".format( - self.current_state)) + raise ValueError( + f"Incorrect solver state detected: {self.current_state}" + ) return self.f0, self.gradient @@ -142,6 +148,7 @@ def get_fdf_funcs(self): f_func(beta) = objective function value for design variables beta df_func(beta) = objective function gradient for design variables beta """ + def _f(x=None): (fq, _) = self.__call__(rho_vector=x, need_gradient=False) return fq @@ -161,9 +168,8 @@ def prepare_forward_run(self): # register user specified monitors self.forward_monitors = [ - ] # save reference to monitors so we can track dft convergence - for m in self.objective_arguments: - self.forward_monitors.append(m.register_monitors(self.frequencies)) + m.register_monitors(self.frequencies) for m in self.objective_arguments + ] # register design region self.forward_design_region_monitors = utils.install_design_region_monitors( @@ -176,26 +182,26 @@ def forward_run(self): # Forward run if any(isinstance(m, LDOS) for m in self.objective_arguments): - self.sim.run(mp.dft_ldos(self.frequencies), until_after_sources=mp.stop_when_dft_decayed( - self.decay_by, - self.minimum_run_time, - self.maximum_run_time)) + self.sim.run( + mp.dft_ldos(self.frequencies), + until_after_sources=mp.stop_when_dft_decayed( + self.decay_by, self.minimum_run_time, self.maximum_run_time + ), + ) else: - self.sim.run(until_after_sources=mp.stop_when_dft_decayed( - self.decay_by, - self.minimum_run_time, - self.maximum_run_time)) + self.sim.run( + until_after_sources=mp.stop_when_dft_decayed( + self.decay_by, self.minimum_run_time, self.maximum_run_time + ) + ) # record objective quantities from user specified monitors - self.results_list = [] - for m in self.objective_arguments: - self.results_list.append(m()) - + self.results_list = [m() for m in self.objective_arguments] # evaluate objectives self.f0 = [fi(*self.results_list) for fi in self.objective_functions] if len(self.f0) == 1: self.f0 = self.f0[0] - + # store objective function evaluation in memory self.f_bank.append(self.f0) @@ -204,16 +210,15 @@ def forward_run(self): def prepare_adjoint_run(self): # Compute adjoint sources - self.adjoint_sources = [[] - for i in range(len(self.objective_functions))] + self.adjoint_sources = [[] for _ in range(len(self.objective_functions))] for ar in range(len(self.objective_functions)): for mi, m in enumerate(self.objective_arguments): - dJ = jacobian(self.objective_functions[ar], - mi)(*self.results_list) + dJ = jacobian(self.objective_functions[ar], mi)(*self.results_list) # get gradient of objective w.r.t. monitor if np.any(dJ): self.adjoint_sources[ar] += m.place_adjoint_source( - dJ) # place the appropriate adjoint sources + dJ + ) # place the appropriate adjoint sources def adjoint_run(self): # set up adjoint sources and monitors @@ -225,7 +230,7 @@ def adjoint_run(self): # flip the k point if self.sim.k_point: - self.sim.change_k_point(-1*self.sim.k_point) + self.sim.change_k_point(-1 * self.sim.k_point) self.adjoint_design_region_monitors = [] for ar in range(len(self.objective_functions)): @@ -237,51 +242,61 @@ def adjoint_run(self): self.sim.change_sources(self.adjoint_sources[ar]) # register design dft fields - self.adjoint_design_region_monitors.append(utils.install_design_region_monitors( - self.sim, self.design_regions, self.frequencies, self.decimation_factor - )) + self.adjoint_design_region_monitors.append( + utils.install_design_region_monitors( + self.sim, + self.design_regions, + self.frequencies, + self.decimation_factor, + ) + ) self.sim._evaluate_dft_objects() # Adjoint run - self.sim.run(until_after_sources=mp.stop_when_dft_decayed( - self.decay_by, - self.minimum_run_time, - self.maximum_run_time - )) + self.sim.run( + until_after_sources=mp.stop_when_dft_decayed( + self.decay_by, self.minimum_run_time, self.maximum_run_time + ) + ) # reset the m number if utils._check_if_cylindrical(self.sim): self.sim.m = -self.sim.m # reset the k point - if self.sim.k_point: self.sim.k_point *= -1 + if self.sim.k_point: + self.sim.k_point *= -1 # update optimizer's state self.current_state = "ADJ" def calculate_gradient(self): # Iterate through all design regions and calculate gradient - self.gradient = [[ - dr.get_gradient( - self.sim, - self.adjoint_design_region_monitors[ar][dri], - self.forward_design_region_monitors[dri], - self.frequencies, - self.finite_difference_step - ) for dri, dr in enumerate(self.design_regions) - ] for ar in range(len(self.objective_functions))] + self.gradient = [ + [ + dr.get_gradient( + self.sim, + self.adjoint_design_region_monitors[ar][dri], + self.forward_design_region_monitors[dri], + self.frequencies, + self.finite_difference_step, + ) + for dri, dr in enumerate(self.design_regions) + ] + for ar in range(len(self.objective_functions)) + ] # Cleanup list of lists if len(self.gradient) == 1: self.gradient = self.gradient[0] # only one objective function if len(self.gradient) == 1: self.gradient = self.gradient[ - 0] # only one objective function and one design region - else: - if len(self.gradient[0]) == 1: - self.gradient = [ - g[0] for g in self.gradient - ] # multiple objective functions bu one design region + 0 + ] # only one objective function and one design region + elif len(self.gradient[0]) == 1: + self.gradient = [ + g[0] for g in self.gradient + ] # multiple objective functions bu one design region # Return optimizer's state to initialization self.current_state = "INIT" @@ -292,7 +307,7 @@ def calculate_fd_gradient( design_variables_idx=0, filter=None, ): - ''' + """ Estimate central difference gradients. Parameters @@ -309,7 +324,7 @@ def calculate_fd_gradient( fd_gradient ... : lists [number of objective functions][number of gradients] - ''' + """ if filter is None: filter = lambda x: x if num_gradients < self.num_design_params[design_variables_idx]: @@ -326,7 +341,7 @@ def calculate_fd_gradient( "The requested number of gradients must be less than or equal to the total number of design parameters." ) - assert db < 0.2, "The step size of finite difference is too large." + assert db < 0.2, "The step size of finite difference is too large." # cleanup simulation object self.sim.reset_meep() @@ -337,9 +352,8 @@ def calculate_fd_gradient( for k in fd_gradient_idx: - b0 = np.ones((self.num_design_params[design_variables_idx], )) - b0[:] = (self.design_regions[design_variables_idx]. - design_parameters.weights) + b0 = np.ones((self.num_design_params[design_variables_idx],)) + b0[:] = self.design_regions[design_variables_idx].design_parameters.weights # -------------------------------------------- # # left function evaluation # -------------------------------------------- # @@ -347,30 +361,34 @@ def calculate_fd_gradient( # assign new design vector in_interior = True # b0[k] is not too close to the boundaries 0 and 1 - if b0[k] < db or b0[k]+db > 1: in_interior = False # b0[k] is too close to 0 or 1 + if b0[k] < db or b0[k] + db > 1: + in_interior = False # b0[k] is too close to 0 or 1 - if b0[k] >= db: b0[k] -= db - self.design_regions[design_variables_idx].update_design_parameters( - b0) + if b0[k] >= db: + b0[k] -= db + self.design_regions[design_variables_idx].update_design_parameters(b0) # initialize design monitors - self.forward_monitors = [] - for m in self.objective_arguments: - self.forward_monitors.append( - m.register_monitors(self.frequencies)) + self.forward_monitors = [ + m.register_monitors(self.frequencies) for m in self.objective_arguments + ] if any(isinstance(m, LDOS) for m in self.objective_arguments): - self.sim.run(mp.dft_ldos(self.frequencies), until_after_sources=mp.stop_when_energy_decayed(dt=1, decay_by=1e-11)) + self.sim.run( + mp.dft_ldos(self.frequencies), + until_after_sources=mp.stop_when_energy_decayed( + dt=1, decay_by=1e-11 + ), + ) else: - self.sim.run(until_after_sources=mp.stop_when_dft_decayed( - self.decay_by, - self.minimum_run_time, - self.maximum_run_time)) + self.sim.run( + until_after_sources=mp.stop_when_dft_decayed( + self.decay_by, self.minimum_run_time, self.maximum_run_time + ) + ) # record final objective function value - results_list = [] - for m in self.objective_arguments: - results_list.append(m()) + results_list = [m() for m in self.objective_arguments] fm = [fi(*results_list) for fi in self.objective_functions] # -------------------------------------------- # @@ -379,40 +397,42 @@ def calculate_fd_gradient( self.sim.reset_meep() # assign new design vector - if in_interior: b0[k] += 2 * db # central difference rule... - else: b0[k] += db # forward or backward difference... - - self.design_regions[design_variables_idx].update_design_parameters( - b0) + b0[k] += 2 * db if in_interior else db + self.design_regions[design_variables_idx].update_design_parameters(b0) # initialize design monitors - self.forward_monitors = [] - for m in self.objective_arguments: - self.forward_monitors.append( - m.register_monitors(self.frequencies)) + self.forward_monitors = [ + m.register_monitors(self.frequencies) for m in self.objective_arguments + ] # add monitor used to track dft convergence if any(isinstance(m, LDOS) for m in self.objective_arguments): - self.sim.run(mp.dft_ldos(self.frequencies), until_after_sources=mp.stop_when_energy_decayed(dt=1, decay_by=1e-11)) + self.sim.run( + mp.dft_ldos(self.frequencies), + until_after_sources=mp.stop_when_energy_decayed( + dt=1, decay_by=1e-11 + ), + ) else: - self.sim.run(until_after_sources=mp.stop_when_dft_decayed( - self.decay_by, - self.minimum_run_time, - self.maximum_run_time)) + self.sim.run( + until_after_sources=mp.stop_when_dft_decayed( + self.decay_by, self.minimum_run_time, self.maximum_run_time + ) + ) # record final objective function value - results_list = [] - for m in self.objective_arguments: - results_list.append(m()) + results_list = [m() for m in self.objective_arguments] fp = [fi(*results_list) for fi in self.objective_functions] # -------------------------------------------- # # estimate derivative # -------------------------------------------- # - fd_gradient.append([ - np.squeeze((fp[fi] - fm[fi]) / db / (2 if in_interior else 1)) - for fi in range(len(self.objective_functions)) - ]) + fd_gradient.append( + [ + np.squeeze((fp[fi] - fm[fi]) / db / (2 if in_interior else 1)) + for fi in range(len(self.objective_functions)) + ] + ) # Cleanup singleton dimensions if len(fd_gradient) == 1: @@ -438,17 +458,13 @@ def update_design(self, rho_vector, beta=None): self.current_state = "INIT" def get_objective_arguments(self): - '''Return list of evaluated objective arguments. - ''' - objective_args_evaluation = [ - m.get_evaluation() for m in self.objective_arguments - ] - return objective_args_evaluation + """Return list of evaluated objective arguments.""" + return [m.get_evaluation() for m in self.objective_arguments] def plot2D(self, init_opt=False, **kwargs): """Produce a graphical visualization of the geometry and/or fields, - as appropriately autodetermined based on the current state of - progress. + as appropriately autodetermined based on the current state of + progress. """ if init_opt: @@ -456,9 +472,11 @@ def plot2D(self, init_opt=False, **kwargs): self.sim.plot2D(**kwargs) + def atleast_3d(*arys): from numpy import array, asanyarray, newaxis - ''' + + """ Modified version of numpy's `atleast_3d` Keeps one dimensional array data in first dimension, as @@ -480,7 +498,7 @@ def atleast_3d(*arys): returned. For example, a 1-D array of shape ``(N,)`` becomes a view of shape ``(N, 1, 1)``, and a 2-D array of shape ``(M, N)`` becomes a view of shape ``(M, N, 1)``. - ''' + """ res = [] for ary in arys: ary = asanyarray(ary) @@ -493,7 +511,4 @@ def atleast_3d(*arys): else: result = ary res.append(result) - if len(res) == 1: - return res[0] - else: - return res + return res[0] if len(res) == 1 else res diff --git a/python/adjoint/utils.py b/python/adjoint/utils.py index ef4a94aee..fb37d2b0b 100644 --- a/python/adjoint/utils.py +++ b/python/adjoint/utils.py @@ -1,8 +1,9 @@ -from typing import List, Iterable, Tuple +from typing import Iterable, List, Tuple -import meep as mp import numpy as onp +import meep as mp + from . import ObjectiveQuantity # Meep field components used to compute adjoint sensitivities @@ -21,15 +22,10 @@ # default finite difference step size when calculating Aᵤ FD_DEFAULT = 1e-3 -class DesignRegion(object): - def __init__( - self, - design_parameters, - volume=None, - size=None, - center=mp.Vector3() - ): - self.volume = volume if volume else mp.Volume(center=center, size=size) + +class DesignRegion: + def __init__(self, design_parameters, volume=None, size=None, center=mp.Vector3()): + self.volume = volume or mp.Volume(center=center, size=size) self.size = self.volume.size self.center = self.volume.center self.design_parameters = design_parameters @@ -38,35 +34,54 @@ def __init__( def update_design_parameters(self, design_parameters): self.design_parameters.update_weights(design_parameters) - def update_beta(self,beta): - self.design_parameters.beta=beta + def update_beta(self, beta): + self.design_parameters.beta = beta - def get_gradient(self, sim, fields_a, fields_f, frequencies, finite_difference_step): + def get_gradient( + self, sim, fields_a, fields_f, frequencies, finite_difference_step + ): num_freqs = onp.array(frequencies).size - '''We have the option to linearly scale the gradients up front + """We have the option to linearly scale the gradients up front using the scalegrad parameter (leftover from MPB API). Not currently needed for any existing feature (but available for - future use)''' + future use)""" scalegrad = 1 grad = onp.zeros((num_freqs, self.num_design_params)) # preallocate vol = sim._fit_volume_to_simulation(self.volume) # compute the gradient - mp._get_gradient(grad,scalegrad, - fields_a[0].swigobj,fields_a[1].swigobj,fields_a[2].swigobj, - fields_f[0].swigobj,fields_f[1].swigobj,fields_f[2].swigobj, - sim.gv,vol.swigobj,onp.array(frequencies), - sim.geps,finite_difference_step) + mp._get_gradient( + grad, + scalegrad, + fields_a[0].swigobj, + fields_a[1].swigobj, + fields_a[2].swigobj, + fields_f[0].swigobj, + fields_f[1].swigobj, + fields_f[2].swigobj, + sim.gv, + vol.swigobj, + onp.array(frequencies), + sim.geps, + finite_difference_step, + ) return onp.squeeze(grad).T + def _check_if_cylindrical(sim): return sim.is_cylindrical or (sim.dimensions == mp.CYLINDRICAL) + def _compute_components(sim): - return _ADJOINT_FIELD_COMPONENTS_CYL if _check_if_cylindrical(sim) else _ADJOINT_FIELD_COMPONENTS + return ( + _ADJOINT_FIELD_COMPONENTS_CYL + if _check_if_cylindrical(sim) + else _ADJOINT_FIELD_COMPONENTS + ) + def _make_at_least_nd(x: onp.ndarray, dims: int = 3) -> onp.ndarray: """Makes an array have at least the specified number of dimensions.""" - return onp.reshape(x, x.shape + onp.maximum(dims - x.ndim, 0) * (1, )) + return onp.reshape(x, x.shape + onp.maximum(dims - x.ndim, 0) * (1,)) def calculate_vjps( @@ -77,7 +92,7 @@ def calculate_vjps( adj_fields: List[List[onp.ndarray]], design_variable_shapes: List[Tuple[int, ...]], sum_freq_partials: bool = True, - finite_difference_step: float = FD_DEFAULT + finite_difference_step: float = FD_DEFAULT, ) -> List[onp.ndarray]: """Calculates the VJP for a given set of forward and adjoint fields.""" vjps = [ @@ -87,7 +102,8 @@ def calculate_vjps( fwd_fields[i], frequencies, finite_difference_step, - ) for i, design_region in enumerate(design_regions) + ) + for i, design_region in enumerate(design_regions) ] if sum_freq_partials: vjps = [ @@ -96,7 +112,7 @@ def calculate_vjps( ] else: vjps = [ - vjp.reshape(shape + (-1, )) + vjp.reshape(shape + (-1,)) for vjp, shape in zip(vjps, design_variable_shapes) ] return vjps @@ -118,17 +134,20 @@ def install_design_region_monitors( decimation_factor: int = 0, ) -> List[mp.DftFields]: """Installs DFT field monitors at the design regions of the simulation.""" - design_region_monitors = [[ - simulation.add_dft_fields( - [comp], - frequencies, - where=design_region.volume, - yee_grid=True, - decimation_factor=decimation_factor, - persist=True - ) for comp in _compute_components(simulation) - ] for design_region in design_regions ] - return design_region_monitors + return [ + [ + simulation.add_dft_fields( + [comp], + frequencies, + where=design_region.volume, + yee_grid=True, + decimation_factor=decimation_factor, + persist=True, + ) + for comp in _compute_components(simulation) + ] + for design_region in design_regions + ] def gather_monitor_values(monitors: List[ObjectiveQuantity]) -> onp.ndarray: @@ -142,9 +161,7 @@ def gather_monitor_values(monitors: List[ObjectiveQuantity]) -> onp.ndarray: complex128. Note that these values refer to the mode as oriented (i.e. they are unidirectional). """ - monitor_values = [] - for monitor in monitors: - monitor_values.append(monitor()) + monitor_values = [monitor() for monitor in monitors] monitor_values = onp.array(monitor_values) assert monitor_values.ndim in [1, 2] monitor_values = _make_at_least_nd(monitor_values, 2) @@ -187,8 +204,8 @@ def gather_design_region_fields( def validate_and_update_design( - design_regions: List[DesignRegion], - design_variables: Iterable[onp.ndarray]) -> None: + design_regions: List[DesignRegion], design_variables: Iterable[onp.ndarray] +) -> None: """Validate the design regions and variables. In particular the design variable should be 1,2,3-D and the design region @@ -202,48 +219,55 @@ def validate_and_update_design( Raises: ValueError if the validation of dimensions fails. """ - for i, (design_region, - design_variable) in enumerate(zip(design_regions, - design_variables)): + for i, (design_region, design_variable) in enumerate( + zip(design_regions, design_variables) + ): if design_variable.ndim not in [1, 2, 3]: raise ValueError( - 'Design variables should be 1D, 2D, or 3D, but the design variable ' - 'at index {} had a shape of {}.'.format( - i, design_variable.shape)) + f"Design variables should be 1D, 2D, or 3D, but the design variable at index {i} had a shape of {design_variable.shape}." + ) + design_region_shape = tuple( - int(x) for x in design_region.design_parameters.grid_size) - design_variable_padded_shape = design_variable.shape + (1, ) * ( - 3 - design_variable.ndim) + int(x) for x in design_region.design_parameters.grid_size + ) + design_variable_padded_shape = design_variable.shape + (1,) * ( + 3 - design_variable.ndim + ) if design_variable_padded_shape != design_region_shape: raise ValueError( - 'The design variable at index {} with a shape of {} is ' - 'incompatible with the associated design region, which has a shape ' - 'of {}.'.format(i, design_variable.shape, design_region_shape)) + f"The design variable at index {i} with a shape of {design_variable.shape} is incompatible with the associated design region, which has a shape of {design_region_shape}." + ) + design_variable = onp.asarray(design_variable, dtype=onp.float64) # Update the design variable in Meep design_region.update_design_parameters(design_variable.flatten()) def create_adjoint_sources( - monitors: Iterable[ObjectiveQuantity], - monitor_values_grad: onp.ndarray) -> List[mp.Source]: - monitor_values_grad = onp.asarray(monitor_values_grad, - dtype=onp.complex64 if mp.is_single_precision() else onp.complex128) + monitors: Iterable[ObjectiveQuantity], monitor_values_grad: onp.ndarray +) -> List[mp.Source]: + monitor_values_grad = onp.asarray( + monitor_values_grad, + dtype=onp.complex64 if mp.is_single_precision() else onp.complex128, + ) if not onp.any(monitor_values_grad): raise RuntimeError( - 'The gradient of all monitor values is zero, which ' - 'means that no adjoint sources can be placed to set ' - 'up an adjoint simulation in Meep. Possible causes ' - 'could be:\n\n' - ' * the forward simulation was not run for long enough ' - 'to allow the input pulse(s) to reach the monitors' - ' * the monitor values are disconnected from the ' - 'objective function output.') + "The gradient of all monitor values is zero, which " + "means that no adjoint sources can be placed to set " + "up an adjoint simulation in Meep. Possible causes " + "could be:\n\n" + " * the forward simulation was not run for long enough " + "to allow the input pulse(s) to reach the monitors" + " * the monitor values are disconnected from the " + "objective function output." + ) adjoint_sources = [] for monitor_idx, monitor in enumerate(monitors): # `dj` for each monitor will have a shape of (num frequencies,) - dj = onp.asarray(monitor_values_grad[monitor_idx], - dtype=onp.complex64 if mp.is_single_precision() else onp.complex128) + dj = onp.asarray( + monitor_values_grad[monitor_idx], + dtype=onp.complex64 if mp.is_single_precision() else onp.complex128, + ) if onp.any(dj): adjoint_sources += monitor.place_adjoint_source(dj) assert adjoint_sources diff --git a/python/adjoint/wrapper.py b/python/adjoint/wrapper.py index 8ecd38a3f..06d9ad96e 100644 --- a/python/adjoint/wrapper.py +++ b/python/adjoint/wrapper.py @@ -46,16 +46,15 @@ def loss(x): value, grad = jax.value_and_grad(loss)(x) ``` """ - from typing import Callable, List, Tuple import jax import jax.numpy as jnp -import meep as mp import numpy as onp -from . import utils -from . import DesignRegion, EigenmodeCoefficient +import meep as mp + +from . import DesignRegion, EigenmodeCoefficient, utils _norm_fn = onp.linalg.norm _reduce_fn = onp.max @@ -90,6 +89,7 @@ class MeepJaxWrapper: https://meep.readthedocs.io/en/latest/Python_User_Interface/#Simulation for more information. The default is true. """ + _log_fn = print def __init__( @@ -103,7 +103,7 @@ def __init__( minimum_run_time: float = 0, maximum_run_time: float = onp.inf, until_after_sources: bool = True, - finite_difference_step: float = utils.FD_DEFAULT + finite_difference_step: float = utils.FD_DEFAULT, ): self.simulation = simulation self.sources = sources @@ -150,23 +150,27 @@ def _run_fwd_simulation(self, design_variables): ) self.simulation.init_sim() sim_run_args = { - 'until_after_sources' if self.until_after_sources else 'until': - mp.stop_when_dft_decayed(self.dft_threshold,self.minimum_run_time,self.maximum_run_time) + "until_after_sources" + if self.until_after_sources + else "until": mp.stop_when_dft_decayed( + self.dft_threshold, self.minimum_run_time, self.maximum_run_time + ) } self.simulation.run(**sim_run_args) monitor_values = utils.gather_monitor_values(self.monitors) - return (jnp.asarray(monitor_values), - fwd_design_region_monitors) + return (jnp.asarray(monitor_values), fwd_design_region_monitors) def _run_adjoint_simulation(self, monitor_values_grad): """Runs adjoint simulation, returning design region fields.""" if not self.design_regions: raise RuntimeError( - 'An adjoint simulation was attempted when no design ' - 'regions are present.') - adjoint_sources = utils.create_adjoint_sources(self.monitors, - monitor_values_grad) + "An adjoint simulation was attempted when no design " + "regions are present." + ) + adjoint_sources = utils.create_adjoint_sources( + self.monitors, monitor_values_grad + ) # TODO refactor with optimization_problem.py # self.simulation.restart_fields() self.simulation.clear_dft_monitors() @@ -179,8 +183,11 @@ def _run_adjoint_simulation(self, monitor_values_grad): ) self.simulation.init_sim() sim_run_args = { - 'until_after_sources' if self.until_after_sources else 'until': - mp.stop_when_dft_decayed(self.dft_threshold,self.minimum_run_time,self.maximum_run_time) + "until_after_sources" + if self.until_after_sources + else "until": mp.stop_when_dft_decayed( + self.dft_threshold, self.minimum_run_time, self.maximum_run_time + ) } self.simulation.run(**sim_run_args) @@ -202,12 +209,12 @@ def _calculate_vjps( adj_fields, design_variable_shapes, sum_freq_partials=sum_freq_partials, - finite_difference_step=self.finite_difference_step + finite_difference_step=self.finite_difference_step, ) - def _initialize_callable( - self) -> Callable[[List[jnp.ndarray]], jnp.ndarray]: + def _initialize_callable(self) -> Callable[[List[jnp.ndarray]], jnp.ndarray]: """Initializes the callable JAX function and registers its VJP.""" + @jax.custom_vjp def simulate(design_variables: List[jnp.ndarray]) -> jnp.ndarray: monitor_values, _ = self._run_fwd_simulation(design_variables) @@ -216,17 +223,23 @@ def simulate(design_variables: List[jnp.ndarray]) -> jnp.ndarray: def _simulate_fwd(design_variables): """Runs forward simulation, returning monitor values and fields.""" monitor_values, self.fwd_design_region_monitors = self._run_fwd_simulation( - design_variables) + design_variables + ) design_variable_shapes = [x.shape for x in design_variables] return monitor_values, (design_variable_shapes) def _simulate_rev(res, monitor_values_grad): """Runs adjoint simulation, returning VJP of design wrt monitor values.""" design_variable_shapes = res - self.adj_design_region_monitors = self._run_adjoint_simulation(monitor_values_grad) - vjps = self._calculate_vjps(self.fwd_design_region_monitors, self.adj_design_region_monitors, - design_variable_shapes) - return ([jnp.asarray(vjp) for vjp in vjps], ) + self.adj_design_region_monitors = self._run_adjoint_simulation( + monitor_values_grad + ) + vjps = self._calculate_vjps( + self.fwd_design_region_monitors, + self.adj_design_region_monitors, + design_variable_shapes, + ) + return ([jnp.asarray(vjp) for vjp in vjps],) simulate.defvjp(_simulate_fwd, _simulate_rev) diff --git a/python/binary_partition_utils.py b/python/binary_partition_utils.py index c37a5d07f..53f1d65b5 100644 --- a/python/binary_partition_utils.py +++ b/python/binary_partition_utils.py @@ -1,9 +1,10 @@ -from typing import Dict, Generator, List, Tuple import warnings +from typing import Dict, Generator, List, Tuple -import meep as mp import numpy as onp +import meep as mp + def is_leaf_node(partition: mp.BinaryPartition) -> bool: """Returns True if the partition has no children. @@ -18,7 +19,8 @@ def is_leaf_node(partition: mp.BinaryPartition) -> bool: def enumerate_leaf_nodes( - partition: mp.BinaryPartition) -> Generator[mp.BinaryPartition, None, None]: + partition: mp.BinaryPartition, +) -> Generator[mp.BinaryPartition, None, None]: """Enumerates all leaf nodes of a partition. Args: @@ -30,10 +32,8 @@ def enumerate_leaf_nodes( if is_leaf_node(partition): yield partition else: - for child in enumerate_leaf_nodes(partition.left): - yield child - for child in enumerate_leaf_nodes(partition.right): - yield child + yield from enumerate_leaf_nodes(partition.left) + yield from enumerate_leaf_nodes(partition.right) def partition_has_duplicate_proc_ids(partition: mp.BinaryPartition) -> bool: @@ -49,8 +49,9 @@ def partition_has_duplicate_proc_ids(partition: mp.BinaryPartition) -> bool: return len(set(proc_ids)) != len(proc_ids) -def get_total_weight(partition: mp.BinaryPartition, - weights_by_proc_id: List[float]) -> float: +def get_total_weight( + partition: mp.BinaryPartition, weights_by_proc_id: List[float] +) -> float: """Computes the total weights contained within a BinaryPartition subtree. Args: @@ -64,7 +65,7 @@ def get_total_weight(partition: mp.BinaryPartition, ValueError: if sim.chunk_layout includes nodes with duplicate proc_ids """ if partition_has_duplicate_proc_ids(partition): - raise ValueError('Duplicate proc_ids found in chunk_layout!') + raise ValueError("Duplicate proc_ids found in chunk_layout!") if partition.proc_id is not None: return weights_by_proc_id[partition.proc_id] elif partition.left is not None and partition.right is not None: @@ -72,12 +73,12 @@ def get_total_weight(partition: mp.BinaryPartition, right_weight = get_total_weight(partition.right, weights_by_proc_id) return left_weight + right_weight else: - raise ValueError('Partition missing proc_id or left, right attributes!') + raise ValueError("Partition missing proc_id or left, right attributes!") def get_left_right_total_weights( - partition: mp.BinaryPartition, - weights_by_proc_id: List[float]) -> Tuple[float, float]: + partition: mp.BinaryPartition, weights_by_proc_id: List[float] +) -> Tuple[float, float]: """Computes the total weights contained in left and right subtrees. Args: @@ -96,7 +97,7 @@ def get_left_right_total_weights( right_weight = get_total_weight(partition.right, weights_by_proc_id) return (left_weight, right_weight) else: - raise ValueError('Partition missing left, right attributes!') + raise ValueError("Partition missing left, right attributes!") def pixel_volume(grid_volume: mp.grid_volume) -> int: @@ -116,9 +117,11 @@ def pixel_volume(grid_volume: mp.grid_volume) -> int: return grid_volume.nx() * grid_volume.ny() -def get_total_volume(partition: mp.BinaryPartition, - chunk_volumes: Tuple[mp.grid_volume], - chunk_owners: onp.ndarray) -> float: +def get_total_volume( + partition: mp.BinaryPartition, + chunk_volumes: Tuple[mp.grid_volume], + chunk_owners: onp.ndarray, +) -> float: """Computes the total pixel volume in a subtree from associated chunk volumes. NOTE: If multiple chunks are owned by the same process, this function may @@ -135,14 +138,15 @@ def get_total_volume(partition: mp.BinaryPartition, Returns: The total pixel volume occupied by all chunks owned by the partition. """ - my_grid_volumes = get_grid_volumes_in_tree(partition, chunk_volumes, - chunk_owners) + my_grid_volumes = get_grid_volumes_in_tree(partition, chunk_volumes, chunk_owners) return sum(pixel_volume(vol) for vol in my_grid_volumes) def get_left_right_total_volumes( - partition: mp.BinaryPartition, chunk_volumes: Tuple[mp.grid_volume], - chunk_owners: onp.ndarray) -> Tuple[float, float]: + partition: mp.BinaryPartition, + chunk_volumes: Tuple[mp.grid_volume], + chunk_owners: onp.ndarray, +) -> Tuple[float, float]: """Computes the total pixel volume in left and right subtrees. Args: @@ -161,16 +165,17 @@ def get_left_right_total_volumes( """ if partition.left is not None and partition.right is not None: left_volume = get_total_volume(partition.left, chunk_volumes, chunk_owners) - right_volume = get_total_volume(partition.right, chunk_volumes, - chunk_owners) + right_volume = get_total_volume(partition.right, chunk_volumes, chunk_owners) return (left_volume, right_volume) else: - raise ValueError('Partition missing left, right attributes!') + raise ValueError("Partition missing left, right attributes!") -def get_grid_volumes_in_tree(partition: mp.BinaryPartition, - chunk_volumes: Tuple[mp.grid_volume], - chunk_owners: onp.ndarray) -> List[mp.grid_volume]: +def get_grid_volumes_in_tree( + partition: mp.BinaryPartition, + chunk_volumes: Tuple[mp.grid_volume], + chunk_owners: onp.ndarray, +) -> List[mp.grid_volume]: """Fetches a list of grid_volumes contained in a BinaryPartition subtree. NOTE: If multiple chunks are owned by the same process, this function may @@ -189,7 +194,7 @@ def get_grid_volumes_in_tree(partition: mp.BinaryPartition, the partition. The list is not necessarily ordered by proc_id values. """ if partition_has_duplicate_proc_ids(partition): - warnings.warn('Partition has duplicate proc_ids, overcounting possible!') + warnings.warn("Partition has duplicate proc_ids, overcounting possible!") my_proc_ids = [node.proc_id for node in enumerate_leaf_nodes(partition)] @@ -200,9 +205,11 @@ def get_grid_volumes_in_tree(partition: mp.BinaryPartition, ] -def get_total_volume_per_process(partition: mp.BinaryPartition, - chunk_volumes: Tuple[mp.grid_volume], - chunk_owners: onp.ndarray) -> Dict[int, float]: +def get_total_volume_per_process( + partition: mp.BinaryPartition, + chunk_volumes: Tuple[mp.grid_volume], + chunk_owners: onp.ndarray, +) -> Dict[int, float]: """Computes the total pixel volume per process contained in a BinaryPartition. Args: @@ -219,17 +226,20 @@ def get_total_volume_per_process(partition: mp.BinaryPartition, volumes_per_process = {} leaf_nodes_in_tree = enumerate_leaf_nodes(partition) for leaf in leaf_nodes_in_tree: - total_volume = 0 - for i, owner in enumerate(chunk_owners): - if owner == leaf.proc_id: - total_volume += pixel_volume(chunk_volumes[i]) + total_volume = sum( + pixel_volume(chunk_volumes[i]) + for i, owner in enumerate(chunk_owners) + if owner == leaf.proc_id + ) + volumes_per_process[leaf.proc_id] = total_volume return volumes_per_process def get_box_ranges( - partition: mp.BinaryPartition, chunk_volumes: Tuple[mp.grid_volume], - chunk_owners: onp.ndarray + partition: mp.BinaryPartition, + chunk_volumes: Tuple[mp.grid_volume], + chunk_owners: onp.ndarray, ) -> Tuple[float, float, float, float, float, float]: """Gets the max and min x, y, z dimensions spanned by a partition. @@ -272,12 +282,10 @@ def get_box_ranges( xmaxs.append(vol.surroundings().get_max_corner().x()) ymaxs.append(vol.surroundings().get_max_corner().y()) zmaxs.append(vol.surroundings().get_max_corner().z()) - return (min(xmins), max(xmaxs), min(ymins), max(ymaxs), min(zmins), - max(zmaxs)) + return (min(xmins), max(xmaxs), min(ymins), max(ymaxs), min(zmins), max(zmaxs)) -def partitions_are_equal(bp1: mp.BinaryPartition, - bp2: mp.BinaryPartition) -> bool: +def partitions_are_equal(bp1: mp.BinaryPartition, bp2: mp.BinaryPartition) -> bool: """Determines if two partitions have all nodes with identical attributes. Args: @@ -290,10 +298,13 @@ def partitions_are_equal(bp1: mp.BinaryPartition, if is_leaf_node(bp1) and is_leaf_node(bp2): return bp1.proc_id == bp2.proc_id elif (not is_leaf_node(bp1)) and (not is_leaf_node(bp2)): - return all([ - bp1.split_dir == bp2.split_dir, bp1.split_pos == bp2.split_pos, - partitions_are_equal(bp1.left, bp2.left), - partitions_are_equal(bp1.right, bp2.right) - ]) + return all( + [ + bp1.split_dir == bp2.split_dir, + bp1.split_pos == bp2.split_pos, + partitions_are_equal(bp1.left, bp2.left), + partitions_are_equal(bp1.right, bp2.right), + ] + ) else: return False diff --git a/python/chunk_balancer.py b/python/chunk_balancer.py index 956ba979c..8162ca7bc 100644 --- a/python/chunk_balancer.py +++ b/python/chunk_balancer.py @@ -2,11 +2,11 @@ import copy from typing import Optional, Tuple, Union -import meep as mp -from meep import binary_partition_utils as bpu +import numpy as np from meep.timing_measurements import MeepTimingMeasurements -import numpy as np +import meep as mp +from meep import binary_partition_utils as bpu class AbstractChunkBalancer(abc.ABC): @@ -25,7 +25,8 @@ class AbstractChunkBalancer(abc.ABC): """ def make_initial_chunk_layout( - self, sim: mp.Simulation) -> Union[mp.BinaryPartition, None]: + self, sim: mp.Simulation + ) -> Union[mp.BinaryPartition, None]: """Generates an initial chunk layout based on expected compute costs. Args: @@ -66,21 +67,26 @@ def adjust_chunk_layout(self, sim: mp.Simulation, **kwargs) -> None: timing_measurements = MeepTimingMeasurements.new_from_simulation(sim, -1) - new_chunk_layout = self.compute_new_chunk_layout(timing_measurements, - old_chunk_layout, - chunk_volumes, - chunk_owners, **kwargs) + new_chunk_layout = self.compute_new_chunk_layout( + timing_measurements, + old_chunk_layout, + chunk_volumes, + chunk_owners, + **kwargs, + ) sim.reset_meep() sim.chunk_layout = new_chunk_layout sim.init_sim() @abc.abstractmethod - def compute_new_chunk_layout(self, - timing_measurements: MeepTimingMeasurements, - old_partition: mp.BinaryPartition, - chunk_volumes: Tuple[mp.grid_volume], - chunk_owners: np.ndarray) -> mp.BinaryPartition: + def compute_new_chunk_layout( + self, + timing_measurements: MeepTimingMeasurements, + old_partition: mp.BinaryPartition, + chunk_volumes: Tuple[mp.grid_volume], + chunk_owners: np.ndarray, + ) -> mp.BinaryPartition: """Rebalances the partition to equalize simulation time for node's children. Args: @@ -123,16 +129,14 @@ def _validate_sim(self, sim: mp.Simulation): """ # Check that chunk_layout does not contain duplicate nodes for same process if bpu.partition_has_duplicate_proc_ids(sim.chunk_layout): - raise ValueError('Duplicate proc_ids found in chunk_layout!') + raise ValueError("Duplicate proc_ids found in chunk_layout!") # Check that proc_ids in chunk_layout are assigned properly to grid owners chunk_owners = sim.structure.get_chunk_owners() - proc_ids = [ - node.proc_id for node in bpu.enumerate_leaf_nodes(sim.chunk_layout) - ] + proc_ids = [node.proc_id for node in bpu.enumerate_leaf_nodes(sim.chunk_layout)] if set(chunk_owners) != set(proc_ids): raise ValueError( - 'Processes {} present in chunk_layout but not grid_owners!'.format( - set(proc_ids) - set(chunk_owners))) + f"Processes {set(proc_ids) - set(chunk_owners)} present in chunk_layout but not grid_owners!" + ) class ChunkBalancer(AbstractChunkBalancer): @@ -156,16 +160,16 @@ class ChunkBalancer(AbstractChunkBalancer): """ def compute_new_chunk_layout( - self, - timing_measurements: MeepTimingMeasurements, - partition: mp.BinaryPartition, - chunk_volumes: Tuple[mp.grid_volume], - chunk_owners: np.ndarray, - new_partition: Optional[mp.BinaryPartition] = None, - new_partition_root: Optional[mp.BinaryPartition] = None, - xyz_bounds: Optional[Tuple[float, float, float, float, float, - float]] = None, - sensitivity: float = 0.5) -> mp.BinaryPartition: + self, + timing_measurements: MeepTimingMeasurements, + partition: mp.BinaryPartition, + chunk_volumes: Tuple[mp.grid_volume], + chunk_owners: np.ndarray, + new_partition: Optional[mp.BinaryPartition] = None, + new_partition_root: Optional[mp.BinaryPartition] = None, + xyz_bounds: Optional[Tuple[float, float, float, float, float, float]] = None, + sensitivity: float = 0.5, + ) -> mp.BinaryPartition: """Rebalances the partition to equalize simulation time for node's children. Args: @@ -204,17 +208,17 @@ def compute_new_chunk_layout( elif partition.split_dir == mp.Z: _, _, _, _, d_min, d_max = xyz_bounds else: - raise ValueError('Split direction must be mp.X, mp.Y, or mp.Z!') + raise ValueError("Split direction must be mp.X, mp.Y, or mp.Z!") - sim_times = list( - self._compute_working_times_per_process(timing_measurements)) + sim_times = list(self._compute_working_times_per_process(timing_measurements)) n_left = partition.left.numchunks() n_right = partition.right.numchunks() t_left, t_right = bpu.get_left_right_total_weights(partition, sim_times) - v_left, v_right = bpu.get_left_right_total_volumes(partition, chunk_volumes, - chunk_owners) + v_left, v_right = bpu.get_left_right_total_volumes( + partition, chunk_volumes, chunk_owners + ) v_left_new = v_left * t_right * n_left v_right_new = v_right * t_left * n_right @@ -223,8 +227,7 @@ def compute_new_chunk_layout( old_split_pos = partition.split_pos new_split_pos = (d_max - d_min) * split_frac + d_min - new_split_pos = sensitivity * new_split_pos + (1 - - sensitivity) * old_split_pos + new_split_pos = sensitivity * new_split_pos + (1 - sensitivity) * old_split_pos # Adjust the split pos on new_partition. We can't modify the old partition # because it could affect left/right volume ratios for subsequent calls @@ -250,7 +253,8 @@ def compute_new_chunk_layout( new_partition=new_partition.left, new_partition_root=new_partition_root, xyz_bounds=left_xyz_bounds, - sensitivity=sensitivity) + sensitivity=sensitivity, + ) self.compute_new_chunk_layout( timing_measurements, partition.right, @@ -259,24 +263,26 @@ def compute_new_chunk_layout( new_partition=new_partition.right, new_partition_root=new_partition_root, xyz_bounds=right_xyz_bounds, - sensitivity=sensitivity) + sensitivity=sensitivity, + ) return new_partition def _compute_working_times_per_process( - self, timing_measurements: MeepTimingMeasurements) -> np.ndarray: + self, timing_measurements: MeepTimingMeasurements + ) -> np.ndarray: """Computes the time spent by each MPI process actively working.""" time_sinks_to_include = [ - 'time_stepping', - 'boundaries_copying', - 'field_output', - 'fourier_transform', - 'mpb', - 'near_to_farfield_transform', + "time_stepping", + "boundaries_copying", + "field_output", + "fourier_transform", + "mpb", + "near_to_farfield_transform", ] - num_processes = len(timing_measurements.measurements['time_stepping']) + num_processes = len(timing_measurements.measurements["time_stepping"]) working_times = np.zeros(num_processes) for category in time_sinks_to_include: working_times += np.array(timing_measurements.measurements[category]) diff --git a/python/examples/3rd-harm-1d.py b/python/examples/3rd-harm-1d.py index 5ac0f5dd3..022efaac5 100644 --- a/python/examples/3rd-harm-1d.py +++ b/python/examples/3rd-harm-1d.py @@ -1,19 +1,18 @@ # 1d simulation of a plane wave propagating through a Kerr medium # and generating the third-harmonic frequency component. - -from __future__ import division +import argparse import meep as mp -import argparse + def main(args): - sz = 100 # size of cell in z direction - fcen = 1 / 3.0 # center frequency of source + sz = 100 # size of cell in z direction + fcen = 1 / 3.0 # center frequency of source df = fcen / 20.0 # frequency width of source - amp = args.amp # amplitude of source - k = 10**args.logk # Kerr susceptibility - dpml = 1.0 # PML thickness + amp = args.amp # amplitude of source + k = 10**args.logk # Kerr susceptibility + dpml = 1.0 # PML thickness # We'll use an explicitly 1d simulation. Setting dimensions=1 will actually # result in faster execution than just using two no-size dimensions. However, @@ -28,38 +27,54 @@ def main(args): # and pass it to the Simulation constructor default_material = mp.Medium(index=1, chi3=k) - sources = mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ex, - center=mp.Vector3(0, 0, -0.5*sz + dpml), amplitude=amp) + sources = mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=mp.Ex, + center=mp.Vector3(0, 0, -0.5 * sz + dpml), + amplitude=amp, + ) # frequency range for flux calculation nfreq = 400 fmin = fcen / 2.0 fmax = fcen * 4 - sim = mp.Simulation(cell_size=cell, - geometry=[], - sources=[sources], - boundary_layers=[pml_layers], - default_material=default_material, - resolution=resolution, - dimensions=dimensions) + sim = mp.Simulation( + cell_size=cell, + geometry=[], + sources=[sources], + boundary_layers=[pml_layers], + default_material=default_material, + resolution=resolution, + dimensions=dimensions, + ) # trans = sim.add_flux(0.5 * (fmin + fmax), fmax - fmin, nfreq, # mp.FluxRegion(mp.Vector3(0, 0, 0.5*sz - dpml - 0.5))) - trans1 = sim.add_flux(fcen, 0, 1, - mp.FluxRegion(mp.Vector3(0, 0, 0.5*sz - dpml - 0.5))) - trans3 = sim.add_flux(3 * fcen, 0, 1, - mp.FluxRegion(mp.Vector3(0, 0, 0.5*sz - dpml - 0.5))) + trans1 = sim.add_flux( + fcen, 0, 1, mp.FluxRegion(mp.Vector3(0, 0, 0.5 * sz - dpml - 0.5)) + ) + trans3 = sim.add_flux( + 3 * fcen, 0, 1, mp.FluxRegion(mp.Vector3(0, 0, 0.5 * sz - dpml - 0.5)) + ) - sim.run(until_after_sources=mp.stop_when_fields_decayed( - 50, mp.Ex, mp.Vector3(0, 0, 0.5*sz - dpml - 0.5), 1e-6)) + sim.run( + until_after_sources=mp.stop_when_fields_decayed( + 50, mp.Ex, mp.Vector3(0, 0, 0.5 * sz - dpml - 0.5), 1e-6 + ) + ) # sim.display_fluxes(trans) - print("harmonics:, {}, {}, {}, {}".format(k, amp, mp.get_fluxes(trans1)[0], mp.get_fluxes(trans3)[0])) + print( + f"harmonics:, {k}, {amp}, {mp.get_fluxes(trans1)[0]}, {mp.get_fluxes(trans3)[0]}" + ) + -if __name__ == '__main__': +if __name__ == "__main__": parser = argparse.ArgumentParser() - parser.add_argument('-amp', type=float, default=1.0, help='amplitude of source') - parser.add_argument('-logk', type=float, default=0, help='logarithm of Kerr susceptibility') + parser.add_argument("-amp", type=float, default=1.0, help="amplitude of source") + parser.add_argument( + "-logk", type=float, default=0, help="logarithm of Kerr susceptibility" + ) args = parser.parse_args() main(args) diff --git a/python/examples/README.md b/python/examples/README.md index 13e1e2d4f..e7aac224f 100644 --- a/python/examples/README.md +++ b/python/examples/README.md @@ -4,7 +4,7 @@ Meep simulations are Python scripts which involve specifying the device geometry Python libraries such as NumPy, SciPy, and Matplotlib can be used to augment the simulation functionality and will also be demonstrated. Much of the functionality of the low-level C++ interface has been abstracted in Python which means that you don't need to be an experienced programmer to set up simulations. Reasonable defaults are available where necessary. -Several tutorials and examples are found here. These tutorials are meant to illustrate Meep's various features in an interactive and application-oriented manner. +Several tutorials and examples are found here. These tutorials are meant to illustrate Meep's various features in an interactive and application-oriented manner. ## iPython/Jupyter Notebooks @@ -16,7 +16,7 @@ The recommended method to run the tutorial notebooks is by 1.) installing `meep` ### nbviewer -`nbviewer` is a web platform that can render interactive features found inside Jupyter notebooks openly stored on web-servers. While `nbviewer` can't run python code, it can execute stored javascript code used to animate the simulations. +`nbviewer` is a web platform that can render interactive features found inside Jupyter notebooks openly stored on web-servers. While `nbviewer` can't run python code, it can execute stored javascript code used to animate the simulations. ### GitHub @@ -26,7 +26,7 @@ GitHub is able to render some of the smaller notebooks as plain text. However, t Below are summaries for each tutorial, along with the features the tutorials highlight. While there is no particular order to the tutorials, they progressively incorporate more complicated features. -#### Basics +#### Basics * __`straight-waveguide.ipynb`__ - A simple 2D straight waveguide tutorial that explores basic meep features like `geometry`, `sources`, and `PML` layers. The tutorial also explores basic visualization and animation features. @@ -47,12 +47,12 @@ Computes the resonant mode frequencies of a 2D ring resonator using `harminv`. * __`holey-wg-cavity.ipynb`__ - Calculates the transmission and resonant modes of a waveguide photonic crystal cavity. Demonstrates the `harminv` routines and how to estimate the $Q$ of cavities. -* __`holey-wg-bands.ipynb`__ - +* __`holey-wg-bands.ipynb`__ - Computes the band diagram of the infinite periodic waveguide by itself with no defects in the time domain. Explores the `k_point`, `run_k_point`, and periodic boundary conditions features. #### MPB and Band diagrams -* __`mpb_strip.ipynb`__ - +* __`mpb_strip.ipynb`__ - #### Eigenmode Source @@ -79,12 +79,12 @@ Computes the band diagram of the infinite periodic waveguide by itself with no d #### Nonlinear Optics -* __`3rd-harm-1d.ipynb`__ - +* __`3rd-harm-1d.ipynb`__ - Examines 3rd harmonic generation in a $\chi^{(3)}$ material. Explores the proper way to do 1d simulations, how to include nonlinearities in materials, and compares experimental results to theory. #### Near to Far Field Spectra -* __`antenna-radiation.ipynb`__ - +* __`antenna-radiation.ipynb`__ - Computes the radiation pattern of a simple point source "antenna". Explores `add_near2far`, `add_flux`, `get_fluxes`, and `get_farfield` features. * __`metasurface_lens.ipynb`__ - diff --git a/python/examples/absorbed_power_density.py b/python/examples/absorbed_power_density.py index 8072a56b9..7e82f8489 100644 --- a/python/examples/absorbed_power_density.py +++ b/python/examples/absorbed_power_density.py @@ -1,90 +1,113 @@ -import numpy as np import matplotlib -matplotlib.use('agg') +import numpy as np + +matplotlib.use("agg") import matplotlib.pyplot as plt +from meep.materials import SiO2 import meep as mp -from meep.materials import SiO2 resolution = 100 # pixels/um dpml = 1.0 pml_layers = [mp.PML(thickness=dpml)] -r = 1.0 # radius of cylinder +r = 1.0 # radius of cylinder dair = 2.0 # air padding thickness -s = 2*(dpml+dair+r) -cell_size = mp.Vector3(s,s) +s = 2 * (dpml + dair + r) +cell_size = mp.Vector3(s, s) wvl = 1.0 -fcen = 1/wvl +fcen = 1 / wvl # is_integrated=True necessary for any planewave source extending into PML -sources = [mp.Source(mp.GaussianSource(fcen,fwidth=0.1*fcen,is_integrated=True), - center=mp.Vector3(-0.5*s+dpml), - size=mp.Vector3(0,s), - component=mp.Ez)] +sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=0.1 * fcen, is_integrated=True), + center=mp.Vector3(-0.5 * s + dpml), + size=mp.Vector3(0, s), + component=mp.Ez, + ) +] symmetries = [mp.Mirror(mp.Y)] -geometry = [mp.Cylinder(material=SiO2, - center=mp.Vector3(), - radius=r, - height=mp.inf)] - -sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - sources=sources, - k_point=mp.Vector3(), - symmetries=symmetries, - geometry=geometry) - -dft_fields = sim.add_dft_fields([mp.Dz,mp.Ez], - fcen,0,1, - center=mp.Vector3(), - size=mp.Vector3(2*r,2*r), - yee_grid=True) +geometry = [mp.Cylinder(material=SiO2, center=mp.Vector3(), radius=r, height=mp.inf)] + +sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + sources=sources, + k_point=mp.Vector3(), + symmetries=symmetries, + geometry=geometry, +) + +dft_fields = sim.add_dft_fields( + [mp.Dz, mp.Ez], + fcen, + 0, + 1, + center=mp.Vector3(), + size=mp.Vector3(2 * r, 2 * r), + yee_grid=True, +) # closed box surrounding cylinder for computing total incoming flux -flux_box = sim.add_flux(fcen, 0, 1, - mp.FluxRegion(center=mp.Vector3(x=-r),size=mp.Vector3(0,2*r),weight=+1), - mp.FluxRegion(center=mp.Vector3(x=+r),size=mp.Vector3(0,2*r),weight=-1), - mp.FluxRegion(center=mp.Vector3(y=+r),size=mp.Vector3(2*r,0),weight=-1), - mp.FluxRegion(center=mp.Vector3(y=-r),size=mp.Vector3(2*r,0),weight=+1)) +flux_box = sim.add_flux( + fcen, + 0, + 1, + mp.FluxRegion(center=mp.Vector3(x=-r), size=mp.Vector3(0, 2 * r), weight=+1), + mp.FluxRegion(center=mp.Vector3(x=+r), size=mp.Vector3(0, 2 * r), weight=-1), + mp.FluxRegion(center=mp.Vector3(y=+r), size=mp.Vector3(2 * r, 0), weight=-1), + mp.FluxRegion(center=mp.Vector3(y=-r), size=mp.Vector3(2 * r, 0), weight=+1), +) sim.run(until_after_sources=100) -Dz = sim.get_dft_array(dft_fields,mp.Dz,0) -Ez = sim.get_dft_array(dft_fields,mp.Ez,0) -absorbed_power_density = 2*np.pi*fcen * np.imag(np.conj(Ez)*Dz) +Dz = sim.get_dft_array(dft_fields, mp.Dz, 0) +Ez = sim.get_dft_array(dft_fields, mp.Ez, 0) +absorbed_power_density = 2 * np.pi * fcen * np.imag(np.conj(Ez) * Dz) -dxy = 1/resolution**2 -absorbed_power = np.sum(absorbed_power_density)*dxy +dxy = 1 / resolution**2 +absorbed_power = np.sum(absorbed_power_density) * dxy absorbed_flux = mp.get_fluxes(flux_box)[0] -err = abs(absorbed_power-absorbed_flux)/absorbed_flux -print("flux:, {} (dft_fields), {} (dft_flux), {} (error)".format(absorbed_power,absorbed_flux,err)) +err = abs(absorbed_power - absorbed_flux) / absorbed_flux +print( + f"flux:, {absorbed_power} (dft_fields), {absorbed_flux} (dft_flux), {err} (error)" +) + plt.figure() sim.plot2D() -plt.savefig('power_density_cell.png',dpi=150,bbox_inches='tight') +plt.savefig("power_density_cell.png", dpi=150, bbox_inches="tight") plt.figure() -x = np.linspace(-r,r,Dz.shape[0]) -y = np.linspace(-r,r,Dz.shape[1]) -plt.pcolormesh(x, - y, - np.transpose(absorbed_power_density), - cmap='inferno_r', - shading='gouraud', - vmin=0, - vmax=np.amax(absorbed_power_density)) +x = np.linspace(-r, r, Dz.shape[0]) +y = np.linspace(-r, r, Dz.shape[1]) +plt.pcolormesh( + x, + y, + np.transpose(absorbed_power_density), + cmap="inferno_r", + shading="gouraud", + vmin=0, + vmax=np.amax(absorbed_power_density), +) plt.xlabel("x (μm)") -plt.xticks(np.linspace(-r,r,5)) +plt.xticks(np.linspace(-r, r, 5)) plt.ylabel("y (μm)") -plt.yticks(np.linspace(-r,r,5)) -plt.gca().set_aspect('equal') -plt.title("absorbed power density" + "\n" +"SiO2 Labs(λ={} μm) = {:.2f} μm".format(wvl,wvl/np.imag(np.sqrt(SiO2.epsilon(fcen)[0][0])))) +plt.yticks(np.linspace(-r, r, 5)) +plt.gca().set_aspect("equal") +plt.title( + "absorbed power density" + + "\n" + + "SiO2 Labs(λ={} μm) = {:.2f} μm".format( + wvl, wvl / np.imag(np.sqrt(SiO2.epsilon(fcen)[0][0])) + ) +) plt.colorbar() -plt.savefig('power_density_map.png',dpi=150,bbox_inches='tight') +plt.savefig("power_density_map.png", dpi=150, bbox_inches="tight") diff --git a/python/examples/absorber-1d.py b/python/examples/absorber-1d.py index e6d93633c..49fb6a862 100644 --- a/python/examples/absorber-1d.py +++ b/python/examples/absorber-1d.py @@ -1,38 +1,50 @@ -from __future__ import division - import argparse -import meep as mp + from meep.materials import Al +import meep as mp + def main(args): resolution = 40 cell_size = mp.Vector3(z=10) - boundary_layers = [mp.PML(1, direction=mp.Z) if args.pml else mp.Absorber(1, direction=mp.Z)] + boundary_layers = [ + mp.PML(1, direction=mp.Z) if args.pml else mp.Absorber(1, direction=mp.Z) + ] - sources = [mp.Source(src=mp.GaussianSource(1 / 0.803, fwidth=0.1), - center=mp.Vector3(), - component=mp.Ex)] + sources = [ + mp.Source( + src=mp.GaussianSource(1 / 0.803, fwidth=0.1), + center=mp.Vector3(), + component=mp.Ex, + ) + ] def print_stuff(sim): p = sim.get_field_point(mp.Ex, mp.Vector3()) - print("ex:, {}, {}".format(sim.meep_time(), p.real)) + print(f"ex:, {sim.meep_time()}, {p.real}") - sim = mp.Simulation(cell_size=cell_size, - resolution=resolution, - dimensions=1, - default_material=Al, - boundary_layers=boundary_layers, - sources=sources) + sim = mp.Simulation( + cell_size=cell_size, + resolution=resolution, + dimensions=1, + default_material=Al, + boundary_layers=boundary_layers, + sources=sources, + ) - sim.run(mp.at_every(10, print_stuff), - until_after_sources=mp.stop_when_fields_decayed(50, mp.Ex, mp.Vector3(), 1e-6)) + sim.run( + mp.at_every(10, print_stuff), + until_after_sources=mp.stop_when_fields_decayed(50, mp.Ex, mp.Vector3(), 1e-6), + ) -if __name__ == '__main__': +if __name__ == "__main__": parser = argparse.ArgumentParser() - parser.add_argument('-pml', action='store_true', default=False, help='Use PML as boundary layer') + parser.add_argument( + "-pml", action="store_true", default=False, help="Use PML as boundary layer" + ) args = parser.parse_args() main(args) diff --git a/python/examples/adjoint_optimization/.ipynb_checkpoints/01-Introduction-checkpoint.ipynb b/python/examples/adjoint_optimization/.ipynb_checkpoints/01-Introduction-checkpoint.ipynb index 321cf70de..311f3b285 100644 --- a/python/examples/adjoint_optimization/.ipynb_checkpoints/01-Introduction-checkpoint.ipynb +++ b/python/examples/adjoint_optimization/.ipynb_checkpoints/01-Introduction-checkpoint.ipynb @@ -17,27 +17,16 @@ }, { "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "ename": "ModuleNotFoundError", - "evalue": "No module named 'meep'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", - "Input \u001b[0;32mIn [1]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mmeep\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mmp\u001b[39;00m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mmeep\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01madjoint\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mmpa\u001b[39;00m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m\n", - "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'meep'" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "import meep as mp\n", "import meep.adjoint as mpa\n", "import numpy as np\n", "from autograd import numpy as npa\n", "from matplotlib import pyplot as plt\n", + "\n", "mp.quiet(quietval=True)\n", "seed = 240\n", "np.random.seed(seed)\n", @@ -54,7 +43,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -62,7 +51,7 @@ "\n", "Sx = 6\n", "Sy = 5\n", - "cell_size = mp.Vector3(Sx,Sy)\n", + "cell_size = mp.Vector3(Sx, Sy)\n", "\n", "pml_layers = [mp.PML(1.0)]" ] @@ -76,23 +65,27 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "fcen = 1/1.55\n", + "fcen = 1 / 1.55\n", "width = 0.2\n", "fwidth = width * fcen\n", - "source_center = [-1,0,0]\n", - "source_size = mp.Vector3(0,2,0)\n", - "kpoint = mp.Vector3(1,0,0)\n", - "src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)\n", - "source = [mp.EigenModeSource(src,\n", - " eig_band = 1,\n", - " direction=mp.NO_DIRECTION,\n", - " eig_kpoint=kpoint,\n", - " size = source_size,\n", - " center=source_center)]" + "source_center = [-1, 0, 0]\n", + "source_size = mp.Vector3(0, 2, 0)\n", + "kpoint = mp.Vector3(1, 0, 0)\n", + "src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)\n", + "source = [\n", + " mp.EigenModeSource(\n", + " src,\n", + " eig_band=1,\n", + " direction=mp.NO_DIRECTION,\n", + " eig_kpoint=kpoint,\n", + " size=source_size,\n", + " center=source_center,\n", + " )\n", + "]" ] }, { @@ -106,7 +99,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -114,16 +107,29 @@ "Nx = design_region_resolution\n", "Ny = design_region_resolution\n", "\n", - "design_variables = mp.MaterialGrid(mp.Vector3(Nx,Ny),SiO2,Si,grid_type='U_MEAN')\n", - "design_region = mpa.DesignRegion(design_variables,volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(1, 1, 0)))\n", + "design_variables = mp.MaterialGrid(mp.Vector3(Nx, Ny), SiO2, Si, grid_type=\"U_MEAN\")\n", + "design_region = mpa.DesignRegion(\n", + " design_variables, volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(1, 1, 0))\n", + ")\n", "\n", "\n", "geometry = [\n", - " mp.Block(center=mp.Vector3(x=-Sx/4), material=Si, size=mp.Vector3(Sx/2, 0.5, 0)), # horizontal waveguide\n", - " mp.Block(center=mp.Vector3(y=Sy/4), material=Si, size=mp.Vector3(0.5, Sy/2, 0)), # vertical waveguide\n", - " mp.Block(center=design_region.center, size=design_region.size, material=design_variables), # design region\n", - " mp.Block(center=design_region.center, size=design_region.size, material=design_variables,\n", - " e1=mp.Vector3(x=-1).rotate(mp.Vector3(z=1), np.pi/2), e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), np.pi/2))\n", + " mp.Block(\n", + " center=mp.Vector3(x=-Sx / 4), material=Si, size=mp.Vector3(Sx / 2, 0.5, 0)\n", + " ), # horizontal waveguide\n", + " mp.Block(\n", + " center=mp.Vector3(y=Sy / 4), material=Si, size=mp.Vector3(0.5, Sy / 2, 0)\n", + " ), # vertical waveguide\n", + " mp.Block(\n", + " center=design_region.center, size=design_region.size, material=design_variables\n", + " ), # design region\n", + " mp.Block(\n", + " center=design_region.center,\n", + " size=design_region.size,\n", + " material=design_variables,\n", + " e1=mp.Vector3(x=-1).rotate(mp.Vector3(z=1), np.pi / 2),\n", + " e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), np.pi / 2),\n", + " ),\n", "]" ] }, @@ -141,10 +147,10 @@ "outputs": [], "source": [ "def mapping(x):\n", - " x = x.reshape(Nx,Ny)\n", - " x = (npa.flipud(x) + x)/2 # left-right symmetry\n", - " x = (npa.fliplr(x) + x)/2 # up-down symmetry\n", - " x = (npa.rot90(x) + x) # 90-degree symmetry\n", + " x = x.reshape(Nx, Ny)\n", + " x = (npa.flipud(x) + x) / 2 # left-right symmetry\n", + " x = (npa.fliplr(x) + x) / 2 # up-down symmetry\n", + " x = npa.rot90(x) + x # 90-degree symmetry\n", " return x" ] }, @@ -157,16 +163,18 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "sim = mp.Simulation(cell_size=cell_size,\n", - " boundary_layers=pml_layers,\n", - " geometry=geometry,\n", - " sources=source,\n", - " eps_averaging=False,\n", - " resolution=resolution)" + "sim = mp.Simulation(\n", + " cell_size=cell_size,\n", + " boundary_layers=pml_layers,\n", + " geometry=geometry,\n", + " sources=source,\n", + " eps_averaging=False,\n", + " resolution=resolution,\n", + ")" ] }, { @@ -180,11 +188,13 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "TE0 = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(0,1,0),size=mp.Vector3(x=2)),mode=1)\n", + "TE0 = mpa.EigenmodeCoefficient(\n", + " sim, mp.Volume(center=mp.Vector3(0, 1, 0), size=mp.Vector3(x=2)), mode=1\n", + ")\n", "ob_list = [TE0]" ] }, @@ -197,7 +207,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -214,7 +224,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -224,9 +234,9 @@ " objective_arguments=ob_list,\n", " design_regions=[design_region],\n", " fcen=fcen,\n", - " df = 0,\n", - " nf = 1,\n", - " decay_fields=[mp.Ez]\n", + " df=0,\n", + " nf=1,\n", + " decay_fields=[mp.Ez],\n", ")" ] }, @@ -239,11 +249,11 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "x0 = np.random.rand(Nx*Ny)\n", + "x0 = np.random.rand(Nx * Ny)\n", "opt.update_design([x0])" ] }, @@ -256,24 +266,11 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "opt.plot2D(True,frequency=1/1.55)\n", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "opt.plot2D(True, frequency=1 / 1.55)\n", "plt.show()" ] }, @@ -288,19 +285,9 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "f0, dJ_du = opt()" ] @@ -314,35 +301,12 @@ }, { "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "plt.figure()\n", - "plt.imshow(np.rot90(dJ_du.reshape(Nx,Ny)))" + "plt.imshow(np.rot90(dJ_du.reshape(Nx, Ny)))" ] }, { @@ -356,13 +320,13 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "db = 1e-3\n", "choose = 10\n", - "g_discrete, idx = opt.calculate_fd_gradient(num_gradients=choose,db=db)" + "g_discrete, idx = opt.calculate_fd_gradient(num_gradients=choose, db=db)" ] }, { @@ -374,7 +338,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -390,47 +354,38 @@ }, { "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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8eu3wGKFJRGRPbdP2AWIiIhI7TOzNUQuKDs85FJEROo1nZInIiIiIiJSBZ2SJyIiIiIiUgUFJhERERERkSooMImIiIiIiFRBgUlERERERKQKCkwiIiIiIiJVUGASERERERGpggKTiIiIiIhIFRSYREREREREqqDAJCIiIiIiUgUFJhERERERkSrsE3YBte2AAw7wDh06hFrD1q1badq0aag1RFM89099q7/iuX+x1LclS5Z84e4Hhl1HLImFz52yYun3JdoSqa+QWP1VX+NXrPa3us+3uAtMHTp04O233w61hpycHAYNGhRqDdEUz/1T3+qveO5fLPXNzD4Ou4ZYEwufO2XF0u9LtCVSXyGx+qu+xq9Y7W91n286JU9ERERERKQKCkwiIiIiIiJVUGASERERERGpQtzNYarMjh07WLt2Ldu3b6+T4zVv3pwVK1bUybHCUN/7l5ycTPv27WnYsGHYpYiIiIhIjEuIwLR27VpSU1Pp0KEDZhb1423evJnU1NSoHycs9bl/7s6XX37J2rVr6dixY9jliIiIiEiMS4hT8rZv307Lli3rJCxJbDMzWrZsWWejjSIiIiJSvyVEYAIUlqSUfhdEREREpKYSJjBJ3Vq3bh1nnnlm2GWIiIiIiOwVBSapdd999x1t27Zl+vTpYZciIiIiIrJXFJjqwI033sg999xT+vj6669n0qRJu3zepk2b6Nq1K6tWrQLgnHPO4eGHH95pv8WLF9O/f3969uxJnz592Lx5M9u3b2fEiBF0796d9PR0Xn/9dQCmTJnC8OHDOeGEE+jQoQP33Xcfd911F+np6fTr14+vvvoKgEGDBpGVlUVaWhrdunVj0aJFACxatIjjjz+e9PR0+vfvX1rblClTOPXUUznuuOM4/vjjWbNmDd26dQPgnXfeoU+fPqSlpdGjRw/ef/99AO666y66detGt27dSt+fNWvWcPjhhzNq1CiOPPJIhgwZQlFR0R697yIiIiIieyshVskr6+YX3uHddV/X6mse0XZfbhp2ZJXbL7roIs444wyuvPJKvv/+e5599lkWLVrE5s2bGTBgQKXPeeaZZzjiiCO47777yMzMJCsri//973+MGjWq3H7ffvstv/zlL5k2bRq9e/fm66+/JiUlhUmTJmFmLFu2jJUrVzJkyBDee+89AJYvX05eXh7bt2+nc+fO/PnPfyYv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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "min_g = np.min(g_discrete)\n", "max_g = np.max(g_discrete)\n", "\n", - "fig = plt.figure(figsize=(12,6))\n", + "fig = plt.figure(figsize=(12, 6))\n", "\n", - "plt.subplot(1,2,1)\n", - "plt.plot([min_g, max_g],[min_g, max_g],label='y=x comparison')\n", - "plt.plot([min_g, max_g],[m*min_g+b, m*max_g+b],'--',label='Best fit')\n", - "plt.plot(g_discrete,dJ_du[idx],'o',label='Adjoint comparison')\n", - "plt.xlabel('Finite Difference Gradient')\n", - "plt.ylabel('Adjoint Gradient')\n", + "plt.subplot(1, 2, 1)\n", + "plt.plot([min_g, max_g], [min_g, max_g], label=\"y=x comparison\")\n", + "plt.plot([min_g, max_g], [m * min_g + b, m * max_g + b], \"--\", label=\"Best fit\")\n", + "plt.plot(g_discrete, dJ_du[idx], \"o\", label=\"Adjoint comparison\")\n", + "plt.xlabel(\"Finite Difference Gradient\")\n", + "plt.ylabel(\"Adjoint Gradient\")\n", "plt.legend()\n", "plt.grid(True)\n", "plt.axis(\"square\")\n", "\n", - "plt.subplot(1,2,2)\n", - "rel_err = np.abs(np.squeeze(g_discrete) - np.squeeze(dJ_du[idx])) / np.abs(np.squeeze(g_discrete)) * 100\n", - "plt.semilogy(g_discrete,rel_err,'o')\n", + "plt.subplot(1, 2, 2)\n", + "rel_err = (\n", + " np.abs(np.squeeze(g_discrete) - np.squeeze(dJ_du[idx]))\n", + " / np.abs(np.squeeze(g_discrete))\n", + " * 100\n", + ")\n", + "plt.semilogy(g_discrete, rel_err, \"o\")\n", "plt.grid(True)\n", - "plt.xlabel('Finite Difference Gradient')\n", - "plt.ylabel('Relative Error (%)')\n", + "plt.xlabel(\"Finite Difference Gradient\")\n", + "plt.ylabel(\"Relative Error (%)\")\n", "\n", "fig.tight_layout(rect=[0, 0.03, 1, 0.95])\n", - "fig.suptitle('Resolution: {} Seed: {} Nx: {} Ny: {}'.format(resolution,seed,Nx,Ny))\n", + "fig.suptitle(\"Resolution: {} Seed: {} Nx: {} Ny: {}\".format(resolution, seed, Nx, Ny))\n", "plt.show()" ] }, @@ -443,69 +398,50 @@ }, { "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "resolution = 20\n", "opt.sim.resolution = resolution\n", "f0, dJ_du = opt()\n", - "g_discrete, idx = opt.calculate_fd_gradient(num_gradients=choose,db=db)" + "g_discrete, idx = opt.calculate_fd_gradient(num_gradients=choose, db=db)" ] }, { "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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SSIiIg3PfwGrFZBERKqmqd8FiIiISM0xs52EbvI6zudSRETqLQ23ExERERERiaDhdiIiIiIiIhEUkkRERERERCIoJImIiIiIiERQSBIREREREYmgkCQiIiIiIhJBIUlERERERCSCQpKIiIiIiEgEhSQREREREZEICkkiIiIiIiIRFJJEREREREQiNPW7gMo48cQTXdeuXf0uwzd5eXm0atXK7zKilq5P+XR9yqfrA1988cVu59xJftcRjRr7509Z9N9N1ei6VZ2uXdXoupWuvM+9ehWSunbtypo1a/wuwzcpKSkkJCT4XUbU0vUpn65P+XR9wMy+9buGaNXYP3/Kov9uqkbXrep07apG16105X3uabidiIiIiIhIBIUkERERERGRCApJIiIiZTCzMWb2XCAQ8LsUERGpQ/VqTlJp8vPzSU1N5eDBg36XUuvatm3Lli1b/C4jarVu3Zr8/HyaNWvmdyki0kA4594D3ouPj5/kdy0iIlJ36n1ISk1NpU2bNnTt2hUz87ucWpWbm0ubNm38LiMqOedITU0lNTWVbt26+V2OiIiIiNRj9X643cGDB2nfvn2DD0hSPjOjbdu2jaJHUURERERqV70PSYACkgB6H4iIiIhIzWgQIUnqVnp6OldddZXfZYiIiIiI1AqFJKmUgoICOnfuzJtvvul3KSIiIiIitUIhqZoefPBBnnzyyaLH999/PzNnzjzq6wKBAD169GDbtm0AjB8/njlz5hzxvNWrVzN48GD69u1LQkICubm5HDx4kJtuuok+ffoQFxfHJ598AsC8efMYN24cF110EV27duWpp57iiSeeIC4ujgsuuIC9e/cCkJCQwJQpU4iNjaV3796sWrUKgFWrVjFo0CDi4uIYPHhwUW3z5s1j7NixDB8+nBEjRrBz50569+4NwKZNmxg4cCCxsbGcd955bN++HYAnnniC3r1707t376Lrs3PnTs4991wmTZpEr169GDVqFMFgsErXXURERESkttT71e0iPfzeJjan59ToPnt2Po6HxvQqc/vNN9/MFVdcwV133cXhw4d57bXXWLVqFbm5uQwZMqTU17z66qv07NmTp556iokTJzJlyhT27dvHpEnFV5g9dOgQ1157LYsWLWLAgAGkpaXRsmVLZs6ciZmxceNGtm7dyqhRo/j6668B+Oqrr1i3bh0HDx6ke/fu/O53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e62o3TnHz3/+c3r06MHIkSPZtWtX0baEhATWrFkDhAJWnz596N27N/fcc0/Rc7p27cru3bvZuXMn5557LpMnT6ZXr16MGjWKYDDIm2++yZo1a0hOTiY2NpZgMFisrm+++YaRI0fSt29f+vXrx7/+9S+cc0ydOpXevXvTp08fFi1aBEBKSgrDhg3jsssu44wzzuDee+9lwYIFDBw4kD59+vCvf/0LCPWG3XbbbcTHx3P22Wfz17/+FYCdO3cyZMgQ+vXrR79+/YqCUEpKCkOGDGHs2LFFobB169YAZGRkMHToUGJjY+nduzcrVqwo93q0bt2a+++/n759+3LBBRfw/fffV+vfTaS25ezdpYAkIiJSDzWqkDRz7UwOFh4s1naw8CAz186s1n7feecdRo8ezdlnn0379u354osvAHj77bfZtm0bmzdvZv78+aX2oKSnp3PPPffw8ccfs379elavXs2SJUuOeN727duZNGkSmzZtol27drz11ltcddVVxMfHs2DBAtavX0/Lli2LvSY5OZk77riDDRs28Omnn9KpUycWL17M+vXr2bBhAx999BFTp04lIyMDgA0bNjB79my2bNnCyy+/zNdff82qVau45ZZb+Mtf/lK03507d7Jq1SqWLl3KbbfdxsGDBzn55JP58MMPWbt2LYsWLeLOO+8sev7atWuZOXMmX3/9dbH6Xn31VZKSkorqiY2NLfd65OXlccEFF7BhwwaGDh3KnDlzqvgvJlL7AsF8JizYyieHeikgiYiI1DONKiRl5mVWqr2iFi5cyHXXXQfAddddVzTkbvny5YwfP56YmBg6d+7M8OHDj3jt6tWrSUhI4KSTTqJp06YkJyezfPnyI57XrVs3zjvvPAD69+/Pzp07y60pNzeXtLQ0Lr/8cgBatGjBsccey8qVK4tq6tChA8OGDWP16tUADBgwgE6dOnHMMcdw5plnMmrUKAD69OlT7HjXXHMNTZo04ayzzuKMM85g69at5OfnM2nSJPr06cPVV19dbL7VwIED6dat2xE1DhgwgBdffJHp06ezceNG2rRpU+71aN68OZdeemmFr4GIX3KyUvnlc++xKXM/ncf/RQFJRESknmlUS4B3bNWRjLyMUturau/evXz88cds3LgRM6OwsBAzY8aMGdUp9QjHHHNM0c8xMTFHDK2r6WM0adKk6HGTJk2K5hMB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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "min_g = np.min(g_discrete)\n", "max_g = np.max(g_discrete)\n", "\n", - "fig = plt.figure(figsize=(12,6))\n", + "fig = plt.figure(figsize=(12, 6))\n", "\n", - "plt.subplot(1,2,1)\n", - "plt.plot([min_g, max_g],[min_g, max_g],label='y=x comparison')\n", - "plt.plot([min_g, max_g],[m*min_g+b, m*max_g+b],'--',label='Best fit')\n", - "plt.plot(g_discrete,dJ_du[idx],'o',label='Adjoint comparison')\n", - "plt.xlabel('Finite Difference Gradient')\n", - "plt.ylabel('Adjoint Gradient')\n", + "plt.subplot(1, 2, 1)\n", + "plt.plot([min_g, max_g], [min_g, max_g], label=\"y=x comparison\")\n", + "plt.plot([min_g, max_g], [m * min_g + b, m * max_g + b], \"--\", label=\"Best fit\")\n", + "plt.plot(g_discrete, dJ_du[idx], \"o\", label=\"Adjoint comparison\")\n", + "plt.xlabel(\"Finite Difference Gradient\")\n", + "plt.ylabel(\"Adjoint Gradient\")\n", "plt.legend()\n", "plt.grid(True)\n", "plt.axis(\"square\")\n", "\n", - "plt.subplot(1,2,2)\n", - "rel_err = np.abs(np.squeeze(g_discrete) - np.squeeze(dJ_du[idx])) / np.abs(np.squeeze(g_discrete)) * 100\n", - "plt.semilogy(g_discrete,rel_err,'o')\n", + "plt.subplot(1, 2, 2)\n", + "rel_err = (\n", + " np.abs(np.squeeze(g_discrete) - np.squeeze(dJ_du[idx]))\n", + " / np.abs(np.squeeze(g_discrete))\n", + " * 100\n", + ")\n", + "plt.semilogy(g_discrete, rel_err, \"o\")\n", "plt.grid(True)\n", - "plt.xlabel('Finite Difference Gradient')\n", - "plt.ylabel('Relative Error (%)')\n", + "plt.xlabel(\"Finite Difference Gradient\")\n", + "plt.ylabel(\"Relative Error (%)\")\n", "\n", "fig.tight_layout(rect=[0, 0.03, 1, 0.95])\n", - "fig.suptitle('Resolution: {} Seed: {} Nx: {} Ny: {}'.format(resolution,seed,Nx,Ny))\n", + "fig.suptitle(\"Resolution: {} Seed: {} Nx: {} Ny: {}\".format(resolution, seed, Nx, Ny))\n", "plt.show()" ] }, diff --git a/python/examples/adjoint_optimization/.ipynb_checkpoints/02-Waveguide_Bend-checkpoint.ipynb b/python/examples/adjoint_optimization/.ipynb_checkpoints/02-Waveguide_Bend-checkpoint.ipynb index 5fed22162..c2e360d25 100644 --- a/python/examples/adjoint_optimization/.ipynb_checkpoints/02-Waveguide_Bend-checkpoint.ipynb +++ b/python/examples/adjoint_optimization/.ipynb_checkpoints/02-Waveguide_Bend-checkpoint.ipynb @@ -13,17 +13,9 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Using MPI version 3.1, 1 processes\n" - ] - } - ], + "outputs": [], "source": [ "import meep as mp\n", "import meep.adjoint as mpa\n", @@ -31,6 +23,7 @@ "from autograd import numpy as npa\n", "import nlopt\n", "from matplotlib import pyplot as plt\n", + "\n", "mp.verbosity(0)\n", "Si = mp.Medium(index=3.4)\n", "SiO2 = mp.Medium(index=1.44)" @@ -45,7 +38,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -53,66 +46,83 @@ "\n", "Sx = 6\n", "Sy = 5\n", - "cell_size = mp.Vector3(Sx,Sy)\n", + "cell_size = mp.Vector3(Sx, Sy)\n", "\n", "pml_layers = [mp.PML(1.0)]\n", "\n", - "fcen = 1/1.55\n", + "fcen = 1 / 1.55\n", "width = 0.2\n", "fwidth = width * fcen\n", - "source_center = [-1.5,0,0]\n", - "source_size = mp.Vector3(0,2,0)\n", - "kpoint = mp.Vector3(1,0,0)\n", - "src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)\n", - "source = [mp.EigenModeSource(src,\n", - " eig_band = 1,\n", - " direction=mp.NO_DIRECTION,\n", - " eig_kpoint=kpoint,\n", - " size = source_size,\n", - " center=source_center)]\n", + "source_center = [-1.5, 0, 0]\n", + "source_size = mp.Vector3(0, 2, 0)\n", + "kpoint = mp.Vector3(1, 0, 0)\n", + "src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)\n", + "source = [\n", + " mp.EigenModeSource(\n", + " src,\n", + " eig_band=1,\n", + " direction=mp.NO_DIRECTION,\n", + " eig_kpoint=kpoint,\n", + " size=source_size,\n", + " center=source_center,\n", + " )\n", + "]\n", "\n", "design_region_resolution = 10\n", "Nx = design_region_resolution\n", "Ny = design_region_resolution\n", "\n", - "design_variables = mp.MaterialGrid(mp.Vector3(Nx,Ny),SiO2,Si,grid_type='U_MEAN')\n", - "design_region = mpa.DesignRegion(design_variables,volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(1, 1, 0)))\n", + "design_variables = mp.MaterialGrid(mp.Vector3(Nx, Ny), SiO2, Si, grid_type=\"U_MEAN\")\n", + "design_region = mpa.DesignRegion(\n", + " design_variables, volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(1, 1, 0))\n", + ")\n", "\n", "\n", "geometry = [\n", - " mp.Block(center=mp.Vector3(x=-Sx/4), material=Si, size=mp.Vector3(Sx/2, 0.5, 0)), # horizontal waveguide\n", - " mp.Block(center=mp.Vector3(y=Sy/4), material=Si, size=mp.Vector3(0.5, Sy/2, 0)), # vertical waveguide\n", - " mp.Block(center=design_region.center, size=design_region.size, material=design_variables), # design region\n", - " #mp.Block(center=design_region.center, size=design_region.size, material=design_variables,\n", + " mp.Block(\n", + " center=mp.Vector3(x=-Sx / 4), material=Si, size=mp.Vector3(Sx / 2, 0.5, 0)\n", + " ), # horizontal waveguide\n", + " mp.Block(\n", + " center=mp.Vector3(y=Sy / 4), material=Si, size=mp.Vector3(0.5, Sy / 2, 0)\n", + " ), # vertical waveguide\n", + " mp.Block(\n", + " center=design_region.center, size=design_region.size, material=design_variables\n", + " ), # design region\n", + " # mp.Block(center=design_region.center, size=design_region.size, material=design_variables,\n", " # e1=mp.Vector3(x=-1).rotate(mp.Vector3(z=1), np.pi/2), e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), np.pi/2))\n", - " # \n", + " #\n", " # The commented lines above impose symmetry by overlapping design region with the same design variable. However,\n", " # currently there is an issue of doing that; We give an alternative approach to impose symmetry in later tutorials.\n", " # See https://github.com/NanoComp/meep/issues/1984 and https://github.com/NanoComp/meep/issues/2093\n", - "\n", "]\n", "\n", - "sim = mp.Simulation(cell_size=cell_size,\n", - " boundary_layers=pml_layers,\n", - " geometry=geometry,\n", - " sources=source,\n", - " eps_averaging=False,\n", - " resolution=resolution)\n", + "sim = mp.Simulation(\n", + " cell_size=cell_size,\n", + " boundary_layers=pml_layers,\n", + " geometry=geometry,\n", + " sources=source,\n", + " eps_averaging=False,\n", + " resolution=resolution,\n", + ")\n", "\n", - "TE_top = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(0,1,0),size=mp.Vector3(x=2)),mode=1)\n", + "TE_top = mpa.EigenmodeCoefficient(\n", + " sim, mp.Volume(center=mp.Vector3(0, 1, 0), size=mp.Vector3(x=2)), mode=1\n", + ")\n", "ob_list = [TE_top]\n", "\n", + "\n", "def J(alpha):\n", " return npa.abs(alpha) ** 2\n", "\n", + "\n", "opt = mpa.OptimizationProblem(\n", " simulation=sim,\n", " objective_functions=J,\n", " objective_arguments=ob_list,\n", " design_regions=[design_region],\n", " fcen=fcen,\n", - " df = 0,\n", - " nf = 1\n", + " df=0,\n", + " nf=1,\n", ")" ] }, @@ -125,24 +135,11 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "x0 = 0.5*np.ones((Nx*Ny,))\n", + "x0 = 0.5 * np.ones((Nx * Ny,))\n", "opt.update_design([x0])\n", "\n", "opt.plot2D(True)\n", @@ -160,15 +157,17 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "evaluation_history = []\n", "sensitivity = [0]\n", + "\n", + "\n", "def f(x, grad):\n", " f0, dJ_du = opt([x])\n", - " f0 = f0[0] # f0 is an array of length 1 \n", + " f0 = f0[0] # f0 is an array of length 1\n", " if grad.size > 0:\n", " grad[:] = np.squeeze(dJ_du)\n", " evaluation_history.append(np.real(f0))\n", @@ -189,7 +188,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -208,16 +207,7 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Starting forward run...\n", - "Starting adjoint run...\n" - ] - } - ], + "outputs": [], "source": [ "x = solver.optimize(x0);" ] @@ -236,10 +226,10 @@ "outputs": [], "source": [ "plt.figure()\n", - "plt.plot(evaluation_history,'o-')\n", + "plt.plot(evaluation_history, \"o-\")\n", "plt.grid(True)\n", - "plt.xlabel('Iteration')\n", - "plt.ylabel('FOM')\n", + "plt.xlabel(\"Iteration\")\n", + "plt.ylabel(\"FOM\")\n", "plt.show()" ] }, @@ -257,7 +247,11 @@ "outputs": [], "source": [ "opt.update_design([x])\n", - "opt.plot2D(True,plot_monitors_flag=False,output_plane=mp.Volume(center=(0,0,0),size=(2,2,0)))\n", + "opt.plot2D(\n", + " True,\n", + " plot_monitors_flag=False,\n", + " output_plane=mp.Volume(center=(0, 0, 0), size=(2, 2, 0)),\n", + ")\n", "plt.axis(\"off\");" ] }, @@ -276,11 +270,15 @@ "metadata": {}, "outputs": [], "source": [ - "TE0 = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(-1,0,0),size=mp.Vector3(y=2)),mode=1)\n", - "ob_list = [TE0,TE_top]\n", + "TE0 = mpa.EigenmodeCoefficient(\n", + " sim, mp.Volume(center=mp.Vector3(-1, 0, 0), size=mp.Vector3(y=2)), mode=1\n", + ")\n", + "ob_list = [TE0, TE_top]\n", + "\n", + "\n", + "def J(source, top):\n", + " return npa.abs(top / source) ** 2\n", "\n", - "def J(source,top):\n", - " return npa.abs(top/source) ** 2\n", "\n", "opt.objective_functions = [J]\n", "opt.objective_arguments = ob_list\n", @@ -323,10 +321,10 @@ "outputs": [], "source": [ "plt.figure()\n", - "plt.plot(np.array(evaluation_history)*100,'o-')\n", + "plt.plot(np.array(evaluation_history) * 100, \"o-\")\n", "plt.grid(True)\n", - "plt.xlabel('Iteration')\n", - "plt.ylabel('Transmission (%)')\n", + "plt.xlabel(\"Iteration\")\n", + "plt.ylabel(\"Transmission (%)\")\n", "plt.show()" ] }, @@ -361,7 +359,11 @@ "outputs": [], "source": [ "opt.update_design([x])\n", - "opt.plot2D(True,plot_monitors_flag=False,output_plane=mp.Volume(center=(0,0,0),size=(2,2,0)))\n", + "opt.plot2D(\n", + " True,\n", + " plot_monitors_flag=False,\n", + " output_plane=mp.Volume(center=(0, 0, 0), size=(2, 2, 0)),\n", + ")\n", "plt.axis(\"off\");" ] }, @@ -378,7 +380,7 @@ "metadata": {}, "outputs": [], "source": [ - "plt.imshow(np.rot90(np.squeeze(np.abs(sensitivity[0].reshape(Nx,Ny)))));" + "plt.imshow(np.rot90(np.squeeze(np.abs(sensitivity[0].reshape(Nx, Ny)))));" ] } ], diff --git a/python/examples/adjoint_optimization/.ipynb_checkpoints/03-Filtered_Waveguide_Bend-checkpoint.ipynb b/python/examples/adjoint_optimization/.ipynb_checkpoints/03-Filtered_Waveguide_Bend-checkpoint.ipynb index 049ea8d2e..7a759ed66 100644 --- a/python/examples/adjoint_optimization/.ipynb_checkpoints/03-Filtered_Waveguide_Bend-checkpoint.ipynb +++ b/python/examples/adjoint_optimization/.ipynb_checkpoints/03-Filtered_Waveguide_Bend-checkpoint.ipynb @@ -17,17 +17,9 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Using MPI version 3.1, 1 processes\n" - ] - } - ], + "outputs": [], "source": [ "import meep as mp\n", "import meep.adjoint as mpa\n", @@ -38,6 +30,7 @@ "from matplotlib import pyplot as plt\n", "from matplotlib.patches import Circle\n", "from scipy import special, signal\n", + "\n", "mp.verbosity(0)\n", "Si = mp.Medium(index=3.4)\n", "SiO2 = mp.Medium(index=1.44)" @@ -52,7 +45,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -66,7 +59,7 @@ "\n", "resolution = 30\n", "\n", - "frequencies = 1/np.linspace(1.5,1.6,10)" + "frequencies = 1 / np.linspace(1.5, 1.6, 10)" ] }, { @@ -80,25 +73,19 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.20124611797498096\n" - ] - } - ], + "outputs": [], "source": [ - "minimum_length = 0.09 # minimum length scale (microns)\n", - "eta_i = 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n", - "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n", - "eta_d = 1-eta_e # dilation design field thresholding point (between 0 and 1)\n", - "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length,eta_e)\n", + "minimum_length = 0.09 # minimum length scale (microns)\n", + "eta_i = (\n", + " 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n", + ")\n", + "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n", + "eta_d = 1 - eta_e # dilation design field thresholding point (between 0 and 1)\n", + "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length, eta_e)\n", "print(filter_radius)\n", - "design_region_resolution = int(1*resolution)" + "design_region_resolution = int(1 * resolution)" ] }, { @@ -110,29 +97,33 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "Sx = 2*pml_size + 2*waveguide_length + design_region_width\n", - "Sy = 2*pml_size + design_region_height + 0.5\n", - "cell_size = mp.Vector3(Sx,Sy)\n", + "Sx = 2 * pml_size + 2 * waveguide_length + design_region_width\n", + "Sy = 2 * pml_size + design_region_height + 0.5\n", + "cell_size = mp.Vector3(Sx, Sy)\n", "\n", "pml_layers = [mp.PML(pml_size)]\n", "\n", - "fcen = 1/1.55\n", + "fcen = 1 / 1.55\n", "width = 0.2\n", "fwidth = width * fcen\n", - "source_center = [-Sx/2 + pml_size + waveguide_length/3,0,0]\n", - "source_size = mp.Vector3(0,Sy,0)\n", - "kpoint = mp.Vector3(1,0,0)\n", - "src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)\n", - "source = [mp.EigenModeSource(src,\n", - " eig_band = 1,\n", - " direction=mp.NO_DIRECTION,\n", - " eig_kpoint=kpoint,\n", - " size = source_size,\n", - " center=source_center)]" + "source_center = [-Sx / 2 + pml_size + waveguide_length / 3, 0, 0]\n", + "source_size = mp.Vector3(0, Sy, 0)\n", + "kpoint = mp.Vector3(1, 0, 0)\n", + "src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)\n", + "source = [\n", + " mp.EigenModeSource(\n", + " src,\n", + " eig_band=1,\n", + " direction=mp.NO_DIRECTION,\n", + " eig_kpoint=kpoint,\n", + " size=source_size,\n", + " center=source_center,\n", + " )\n", + "]" ] }, { @@ -144,15 +135,21 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "Nx = int(design_region_resolution*design_region_width)\n", - "Ny = int(design_region_resolution*design_region_height)\n", + "Nx = int(design_region_resolution * design_region_width)\n", + "Ny = int(design_region_resolution * design_region_height)\n", "\n", - "design_variables = mp.MaterialGrid(mp.Vector3(Nx,Ny),SiO2,Si,grid_type='U_MEAN')\n", - "design_region = mpa.DesignRegion(design_variables,volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(design_region_width, design_region_height, 0)))" + "design_variables = mp.MaterialGrid(mp.Vector3(Nx, Ny), SiO2, Si, grid_type=\"U_MEAN\")\n", + "design_region = mpa.DesignRegion(\n", + " design_variables,\n", + " volume=mp.Volume(\n", + " center=mp.Vector3(),\n", + " size=mp.Vector3(design_region_width, design_region_height, 0),\n", + " ),\n", + ")" ] }, { @@ -164,22 +161,24 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "x_g = np.linspace(-design_region_width/2,design_region_width/2,Nx)\n", - "y_g = np.linspace(-design_region_height/2,design_region_height/2,Ny)\n", - "X_g, Y_g = np.meshgrid(x_g,y_g,sparse=True,indexing='ij')\n", + "x_g = np.linspace(-design_region_width / 2, design_region_width / 2, Nx)\n", + "y_g = np.linspace(-design_region_height / 2, design_region_height / 2, Ny)\n", + "X_g, Y_g = np.meshgrid(x_g, y_g, sparse=True, indexing=\"ij\")\n", "\n", - "left_wg_mask = (X_g == -design_region_width/2) & (np.abs(Y_g) <= waveguide_width/2)\n", - "top_wg_mask = (Y_g == design_region_width/2) & (np.abs(X_g) <= waveguide_width/2)\n", + "left_wg_mask = (X_g == -design_region_width / 2) & (np.abs(Y_g) <= waveguide_width / 2)\n", + "top_wg_mask = (Y_g == design_region_width / 2) & (np.abs(X_g) <= waveguide_width / 2)\n", "Si_mask = left_wg_mask | top_wg_mask\n", "\n", - "border_mask = ((X_g == -design_region_width/2) | \n", - " (X_g == design_region_width/2) | \n", - " (Y_g == -design_region_height/2) | \n", - " (Y_g == design_region_height/2))\n", + "border_mask = (\n", + " (X_g == -design_region_width / 2)\n", + " | (X_g == design_region_width / 2)\n", + " | (Y_g == -design_region_height / 2)\n", + " | (Y_g == design_region_height / 2)\n", + ")\n", "SiO2_mask = border_mask.copy()\n", "SiO2_mask[Si_mask] = False" ] @@ -193,18 +192,24 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "def mapping(x,eta,beta):\n", - " x = npa.where(Si_mask.flatten(),1,npa.where(SiO2_mask.flatten(),0,x))\n", + "def mapping(x, eta, beta):\n", + " x = npa.where(Si_mask.flatten(), 1, npa.where(SiO2_mask.flatten(), 0, x))\n", " # filter\n", - " filtered_field = mpa.conic_filter(x,filter_radius,design_region_width,design_region_height,design_region_resolution)\n", - " \n", + " filtered_field = mpa.conic_filter(\n", + " x,\n", + " filter_radius,\n", + " design_region_width,\n", + " design_region_height,\n", + " design_region_resolution,\n", + " )\n", + "\n", " # projection\n", - " projected_field = mpa.tanh_projection(filtered_field,beta,eta)\n", - " \n", + " projected_field = mpa.tanh_projection(filtered_field, beta, eta)\n", + "\n", " # interpolate to actual materials\n", " return projected_field.flatten()" ] @@ -220,24 +225,37 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "geometry = [\n", - " mp.Block(center=mp.Vector3(x=-Sx/4), material=Si, size=mp.Vector3(Sx/2, 0.5, 0)), # horizontal waveguide\n", - " mp.Block(center=mp.Vector3(y=Sy/4), material=Si, size=mp.Vector3(0.5, Sy/2, 0)), # vertical waveguide\n", - " mp.Block(center=design_region.center, size=design_region.size, material=design_variables), # design region\n", - " mp.Block(center=design_region.center, size=design_region.size, material=design_variables,\n", - " e1=mp.Vector3(x=-1).rotate(mp.Vector3(z=1), np.pi/2), e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), np.pi/2))\n", + " mp.Block(\n", + " center=mp.Vector3(x=-Sx / 4), material=Si, size=mp.Vector3(Sx / 2, 0.5, 0)\n", + " ), # horizontal waveguide\n", + " mp.Block(\n", + " center=mp.Vector3(y=Sy / 4), material=Si, size=mp.Vector3(0.5, Sy / 2, 0)\n", + " ), # vertical waveguide\n", + " mp.Block(\n", + " center=design_region.center, size=design_region.size, material=design_variables\n", + " ), # design region\n", + " mp.Block(\n", + " center=design_region.center,\n", + " size=design_region.size,\n", + " material=design_variables,\n", + " e1=mp.Vector3(x=-1).rotate(mp.Vector3(z=1), np.pi / 2),\n", + " e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), np.pi / 2),\n", + " ),\n", "]\n", "\n", - "sim = mp.Simulation(cell_size=cell_size,\n", - " boundary_layers=pml_layers,\n", - " geometry=geometry,\n", - " sources=source,\n", - " default_material=SiO2,\n", - " resolution=resolution)" + "sim = mp.Simulation(\n", + " cell_size=cell_size,\n", + " boundary_layers=pml_layers,\n", + " geometry=geometry,\n", + " sources=source,\n", + " default_material=SiO2,\n", + " resolution=resolution,\n", + ")" ] }, { @@ -249,31 +267,47 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "mode = 1\n", "\n", - "TE0 = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(x=-Sx/2 + pml_size + 2*waveguide_length/3),size=mp.Vector3(y=Sy)),mode)\n", - "TE_top = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(0,Sx/2 - pml_size - 2*waveguide_length/3,0),size=mp.Vector3(x=Sx)),mode)\n", - "ob_list = [TE0,TE_top]\n", - "def J(source,top):\n", - " power = npa.abs(top/source)\n", + "TE0 = mpa.EigenmodeCoefficient(\n", + " sim,\n", + " mp.Volume(\n", + " center=mp.Vector3(x=-Sx / 2 + pml_size + 2 * waveguide_length / 3),\n", + " size=mp.Vector3(y=Sy),\n", + " ),\n", + " mode,\n", + ")\n", + "TE_top = mpa.EigenmodeCoefficient(\n", + " sim,\n", + " mp.Volume(\n", + " center=mp.Vector3(0, Sx / 2 - pml_size - 2 * waveguide_length / 3, 0),\n", + " size=mp.Vector3(x=Sx),\n", + " ),\n", + " mode,\n", + ")\n", + "ob_list = [TE0, TE_top]\n", + "\n", + "\n", + "def J(source, top):\n", + " power = npa.abs(top / source)\n", " return npa.mean(power)" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "opt = mpa.OptimizationProblem(\n", - " simulation = sim,\n", - " objective_functions = J,\n", - " objective_arguments = ob_list,\n", - " design_regions = [design_region],\n", + " simulation=sim,\n", + " objective_functions=J,\n", + " objective_arguments=ob_list,\n", + " design_regions=[design_region],\n", " frequencies=frequencies,\n", ")" ] @@ -287,26 +321,13 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "rho_vector = np.random.rand(Nx*Ny)\n", - "opt.update_design([mapping(rho_vector,eta_i,1e3)])\n", - "opt.plot2D(True,output_plane=mp.Volume(center=(0,0,0),size=(3,3,0)))\n", + "rho_vector = np.random.rand(Nx * Ny)\n", + "opt.update_design([mapping(rho_vector, eta_i, 1e3)])\n", + "opt.plot2D(True, output_plane=mp.Volume(center=(0, 0, 0), size=(3, 3, 0)))\n", "plt.show()" ] }, @@ -319,39 +340,26 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAACbCAYAAAA3Kw93AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nOy9eXxb1Zn//z5aLdmy5X3flyS2sydOQkISIEBp6bSUbIX2S+m0ncK0nc4M7W9a5jvzbTsMnaUz7QzQDlO6UKAhC2uBQhOSOAnZnNVZbON9l1dZsi3LWs7vD+neyI7tOMSQBb1fL73iSFfnnnvvR+c55znPeY6QUhImTJgwYcJca2iudgXChAkTJkyYiQgbqDBhwoQJc00SNlBhwoQJE+aaJGygwoQJEybMNUnYQIUJEyZMmGuSsIEKEyZMmDDXJGEDdZkIIX4hhPi/wb/XCiFaZ6KsMGGuhPFaFEKcFUKsvYpVCnOVEUK8JYR44GrX40oIG6hxCCEahRAuIYRTCGEXQrwnhPi6EEIDIKX8upTyRx+g3C8JIfaHvvdBywozcwSf97ppHLdHCPGVj6JOM4GUskRKuWc6xwohpBCi4EOuUpgQQtqZwZDXEzN5DinlXVLK385kmR81uqtdgWuUT0spdwohYoA1wM+AZcCDV7daYa5XhBBaKaXvatcjzDXFp6WUO6c6QAihk1J6P6oKXWuER1BTIKUckFK+BmwCHhBClAohfiOE+KeJjhdC/J0Qoi44+jonhLgn+P4c4BfAimBPyR58f0xZQoivCiFqhRB9QojXhBBpIZ/J4Eju/eDI7kkhhPgwr//jhDLCFUL8uxCiXwjRIIS4K/jZY8DNwBOhPV0hxGwhxJ+Cz6taCLExpLzfCCF+LoR4UwgxBNwSfO+poOtlUAhxQAiRIoT4afCcVUKIhSFlpAkhdgghuoP1+VbIZ6Zgef1CiHPA0nHXo44MhRBlQoiDQd10CCGeEEIYgp+VB79yKlinTcH37xZCnAzxIsz7EG57mHEEdXhACPGfQohe4P8JITRCiL8XQjQJIbqEEM8GO88IISKEEM8JIXqDz+qoECI5+Jk66r9EGTnB9uUBIUSzEKJHCPHoVbsJIYQN1DSQUh4BWgk0UlNRFzwmBvgB8JwQIlVKeR74OnBQShklpbSO/6IQ4lbgcWAjkAo0AVvGHXY3gYZoXvC4Oz/wRYWZiGVANZAA/CvwjBBCSCkfBfYB3wg+v28IISKBPwEvAEnAZuApIURxSHn3AY8BFkBx724E/j54DjdwEDge/P924D8g0KAArwOngHTgNuDbQgjlmf8jkB983QlMNdfgA/46eI4VwbIeBpBSrg4eMz94bS8GjeSvgL8A4oH/AV4TQhincxPDXDHLgHogmYB+vhR83QLkAVGA4g58gEB7k0ngWX0dcE1Q5lRlKKwCZhHQxz8EO9ZXlbCBmj7tQNxUB0gpt0kp26WUfinli8D7QNk0y78f+JWU8riU0g18j8CIKyfkmB9LKe1SymZgN7Dgci8izJQ0SSn/N+iK+y2BjkLyJMfeDTRKKX8tpfRKKU8AO4ANIce8KqU8ENTDSPC9l6WUx4L/fxkYkVI+Gzzni4AygloKJEopfyilHJVS1gP/S8AQQsDQPSal7JNStgD/NdlFBc93KFjPRgIGZ80U9+FrwP9IKQ9LKX3BeQw3sHyK74S5fF4JjnqU11eD77dLKf87+LxcBNqG/5BS1kspBwm0DZuFEDrAQ8AwFQSf1TEppWOCc01VhsIPpJQuKeUpAh2j+R/SdU+b8BzU9EkH+qY6QAjxf4C/AXKCb0UR6LVOhzQCPWkApJSDwSF+OtAYfLsz5PjhYPlhZg71/koph4Me1MnucTawTHHXBtEBvwv5f8sE37OF/O2a4P/K+bKBtHHlawmM5CCgl9DymyapJ0KIIgIjsyWAOVjPY5MdHzz3A0KIb4a8ZwieM8zM8dnxc1BCiC9xsW7SGPt8mwg8w2QCessEtgghrMBzwKNSSs9llKFwzbUv4RHUNBBCLCVgKPZPcUw2gR7uN4D4oBvvDKDME10qbXw7gYZBKS+SQM+o7YPXPMwMMv75tQB7pZTWkFeUlPKhKb5zObQADePKt0gpPxn8vINAw6SQNUVZPweqgEIpZTTwfS7ocrJzPzbu3GYp5e+v4HrCTJ/xuhnTNhB41l7AJqX0SCl/IKUsBm4iMLL/PxOUOWkZM1brD4GwgZoCIUS0EOJuAnNBz0kpK6c4PJKAsLqD330QKA353AZkKJPTE/B74EEhxIKgr/+fgcNBl0yYq4+NgO9e4Q9AkRDii0IIffC1dAb99kcApxDi/wsGRGhFIEhHCYbYCnxPCBErhMgAvjl5UVgABzAohJgNPDTu8/HX9r/A14UQy0SASCHEp4QQlpm5tDCXye+BvxZC5Aohogi0DS9KKb1CiFuEEHOFEFoCz9gD+C+njI/qIj4IYQM1Ma8LIZwEepKPEnCPTBliLqU8B/yEwKS3DZgLHAg55F3gLNAphOiZ4Ps7gf9LYB6jg8Dk9+bxx4W5avwMWB+MmvsvKaUTuIPAM2on4B75F2BGAgmCc1J3E5hnbAB6gF8SmBCHQBBOU/CzdxjrWhzPIwQCNpwEjM+L4z7/f8Bvg/MgG6WUFcBXCUyi9wO1BCbYw8wsr4ux66BenuS4XxF4vuUEnvcIFzokKQSCaxzAeWAvE2thqjKuWUR4w8IwYcKECXMtEh5BhQkTJkyYa5KwgQoTJkyYMNckYQMVJkyYMGGuScIGKkyYMGHCXJOEDVSYMGHChLkmua4ySQizkFiBjsWBN1KnWgwfZsbooEdKmXi1q3G5hPVylbhO9QJBzbjCevnImUwzUsrr5rV48WIppZQQeF0r+P1+uWXLFglIIYQksGD3ki/l2K1bt17tS5gSoEJeA8//cl9hvVwdrle9yKBmrjW9SPnx1cx1tQ5KiCUSKq52NT6GiGNSyiVXuxaXS1gvV4vrUy8Q1szVY2LNhOegwoQJEybMNcl1ZaAWLw4MvhUuOG+u7svvl2zZ8iIgCGzjI6b1Uo7dunXbVb+GqV7XK2G9hPVyuSxefOHvq30fw5q5zgzUjcz15GoNc/UJ6yXM5XI9aiZsoK4BrkfhhLl6hPUS5nK5XjVzXQVJLFmyRFZUVCCCO9mEVl15L8wHYyoZCHF9TnqH9fLhcSPqBQKaOXYsECQx/hrDmrkyPohmwiOoMGHChAlzTXLDGajpTsrt3g0JCYF/r2Ryz+v1cfRoBd/5zne5+ebVXJiYXEtg78K1TDWJuXLlKn7+81/Q0tKK3y8/8vp/3Pmg9+2D3v/J9TJeG2uZSD/Ll6/gySefumy9zFT9w8xMUMDl3P9QzaxevYbpBUqsRdHP8uUreOqpn1+xZj5o/a+EG85ATYc9e2DDBti2DdauvbKyNBqN+m96ejoJCQlIuRrYBmwgsH/YxYigvyAuLo4lS5aQkpKivvdR1j/M5XMl939ivYz/Fa9hMv2UlZVx5513kpqaOm29zGT9w1w5l3v/p6eZUMbqZ/Hixaxbt+6KNHMl9b8SrqtURzPBVDdXSsnAwABut/uiBymlRKfTERMTg06nU9/r7e2lvb0dvV5Pbm4uxcUP89573yYv7++Qsp2WlghGRkYuqoeUksTERDIyMoiKilLLvJL6h/nwCb3/a9ZI7PYr08vatWtpampCo9EgpaSpKReb7b8Zb5ySkpJITU0lJycHi8WCVqu94vqH9fPRs3u3ZMMGydNP2yku9tLVdeGziTQD0NfXp2omJydH1Uyo5jo6OmhpaSE29h4cjl+i0WwmLq6K5OR5rF69moyMjA+smVA+av1cVQMlhPgVgW2tu6SUpR/2+Sa7uR6PB5fLRVdXF8ePH6e1tRWDwTCml+Lz+YiOjmbp0qVkZWURGRmJTqejtbWVkydPBv8uoKJiPRs3vkBmZiz9/bfQ1NREf3//RXXRaDTk5uYSGRnJ4OAgfr9f7SmNx+fzMTQ0xO7dkj//cwu//a2LNWvMBIby08PpdDI6OnqR+K8nPmq9jEfRz+9/72XRomHq6q5ML3q9njlz5lBYWAhAU1Mup05tZv78/4vR6EKIZQD4/X5yc3PJzs4mNjaW0dHRS9Z1ZGQEl8uFx+PBYDBgsVjYt0877cZlcHCQ0dFRoqOjr1u9wNXXjILH4+Gdd0b54hcj+Na39tHUdIL2dv2UmomIiMBoNNLc3DypZhTa2to4cSKGmpp/4pOf/CUjIxAXt5a0tDSSk5OnVUe/34/T6WRkZASj0XhRR2g6xsntdqPT6WbEGMLVH0H9BngCePbDPInP5+Ott1w8+GAk27aJi27u6Ogo+/fv58yZM4yOjjI8PHyRsfD7/djtdnp7e4mJiWHZsmXEx8dz5swZRkZG6OiYxdat69mwYRuZmc34fBqsViuRkZH4/f4J66XVasnLyyMuLm7CobeUErfbzblz53jyybNs2fI5HnzwJfx+IzbbUlJSUqZ1/V1dXbz33nt0d3ezatUqCgsLr9dG5zd8RHpxu90YjUb1hxb64ywrG2Xv3gNUVlZOSy9Wq5UVK1YQFxfH+fPnGRkZISIiAiXfGASM08sv38c99zxHSopAyhVqWVJKDAYDALm5uSQkJExad4/HQ2dnJ0ePHqW2thYhBGVlZbjdK7j/fu20jFN3dzeHDx+mq6uLFStWXM96gY9QM16vF6PROOHnu3b5uO8+HZs3b0Wnq6O7e3LN9PT0kJKSwl133YVer6exsXFCzYTidq+gtvYLfOYzvyM3t4vR0VK0Wi3R0dHExMSo+pkIr9eL2+2mqqqKgwcPMjg4yIoVK1i2bNmE+h+vH5/Ph8vlwm6309HRQUxMDHl5eTOimauqOilluRAi58M8h8/n4/nn23j44QQeeuhNiooWAmnK+RFCIKWkr68Pm81GTEwMERERF5UjhMDj8TA0NERycjInTpzg9OnTANjtC9i69V4+97ktlJT0kZe3AKvVCgRGSpP5fb1eL1lZWWRmZo45xu12Mzw8jNvt5vjx4/z93+/kxInvkZb2Ndrahmlquo2SkpIpR10KHo+H6upqTpw4wejoqOpanKqRu1b5qPRSWVnJmTNnyM7Opri4mFOnYtm0ScPWrZK1awWDg356e3unpZfBwUFSUlKorKykuroat9uN2WzG5/MhpaSoqIju7hKeeqqUH/2okoULCxGiaEKXocfjIS8v76Lzud1uhoaG0Ol01NXV8aMf/Yh9+/aRkJBAfn4+Tudifv5z/bSMk8fjoaqqimPHjuF2u/F6vdetXuCj08zx48ex2WwUFhaSlpaG2WxGq9UipWTvXsEXvmDkG9/YychIBX7/1JpxOBwUFBSoz/Ps2bOYTCb8fj9+v5+ioiLS09Px+/0IITh50spTT83lscfOMn/+LKQsUl3GERERpKWlXTSiUTQjhKCzs5Nnn32WV199FSkl+fn55ObmqsdeauTk9/uprKzk8OHDjIyMEB8fT1xc3Ixo5rrtFk2Xt95y8dBDCbjdf0ZNTSR9fY+pk4WKcerp6cHtdmMymQDUBx+Kz+fDYDAwf/58ysrKaGlpobW1lXPnknj11XtZv34rt99upLj4NrKysrBarWpPZ7IJTSEEWq32IiPjdDrZuXMnra2tvPHGECdOfA/YQHv7XtzuuygtLSU1NfWSxkk59/DwMCMjI8TGxpKYmDhlb+rjjtvt5syZM3zve99j1apVfOITP+aRR+KCc06BY3Q6HRERERgMBoQQ+Hy+CfUSERHB3LlzKSsro729nebmZlwuF16vF5/PR3FxMXr97Tz+eALbt/tYs2ae+v3xmlHKn6izMzg4yDvvvEN3dzfnzp3jj3/8Iy6Xi56eHqKj/4z/+q+b2bHDz9q1l3a7KPOwAwMDJCUlhfUyDbxeLzabjUceeYSbbrqJ73//++Tl5QGBxn3jRnjhBQ8OxwDHjl1aM6WlpaxatYqoqCicTid9fX1ERkbi8/koLS1lzZo1JCcnq8bvxz/Wsn27j9WrSy4qUwgxYTsxODjI22+/zeDgIG1tbTz33HO0trYCkJ+fT3p6Onq9flpuPWVutbGxkYSEBBISEmZMM9e8gRJCfA34GkBWVtZlfXfPHnjwwUgefvhNamoi+cxnPkN2drZqmIQQuN1uamtrsdls6HS6MUYltFHw+XwkJiaycOFCkpOTsVqt7N0reOWVWdx77xbuvNPEmjVrSElJuWL/q8fjobW1lbfeclFe/g3gXgyGg4yOQk5ODosXL1aN6XRQrjMiIoLFixcTHR2t3p8bjSvRC4DRaCQ7O5ubb76Z5ORN/O3fZrJ9u+IWDuimo6OD/v7+MToK/Vej0eDxeIiPj1f1Ehsbi8fjYc+ePURERJCXl4fLtYyHH04M/vg/+E/R4/HQ1tbG2bNnOXTokDrvNDq6gtOn/57t20e57bbIaZWl1WrJysoiOTkZnU7HkiVLVL3cqMyEZgoLC7npppvUiFyNRhM0ToIXX/STk9PKrl2X1kxsbCwLFy4kLi4OKSVJSUkUFBRgNpvJzs6moKCA9PR0IPD7/fzn+UD6UdqYtrY2qqur6e3tRa/X4/F4SE1NZe7cudOes9RqtWRmZpKcnIxWq51RzVzzBkpK+TTwNARWeU/3excsv6CoaCF9fY+RnZ2NxWIZc5zX66Wzs5OBgYEx80WKcVLEo7yvGIb9+3U89tgCvv/9gyxfns2sWbNU4VwpZrOZ0dGbOHCgFK12PX7/Xvz+wKPKysrCbDardbtU2KhWqyUxMZG8vDyysrLUYbdyf240PqheFLRaLcXFxdx55+NB46S5KKCmra0Nu92udmjGd2aUOaO4uDj1h2owGCgoKAAgIiKC1tYCHn7YNCPRUCaTiVmzZlFZWUlrayterxcl1PiBB97grrs2Xtb15+TkMH/+fJxO53Xr2rscxmumufnyy0hLS+P73/8+KSkpREVFjRl5rFzp49SpPtUNO5Fm/H4/ZrOZgoIC4uPj1fdzcnK49dZbMZlMZGRkqKOhK42mUzTT0NBAdXU1LpcLCHSAb7/9dk6ciJl2+VqtloKCAtatW8fg4CCxsbGXX6FJuOYN1Afh4oeXdtEaAOVvnU5HWloaLS0tuN1utFotfr9fHUlpNBq8Xi8Gg4GMjAwMBgN79sDmzRpefNHL6tVLEUKg1+tnrP7Hjln4yU+W861v/ZE//rGTysqAIU1JSSE1NfWia5gKJRDD6/VitVoxm81j7s8tt8xYtW8YTp2K5ZFH4kJGThfQ6XSkpqYSExNDf3+/OlpWGhyNRsPo6ChRUVHMmjVrzKS51Wpl0aJF7N0reOCB6QUsTAeLxUJZWRldXV1UVVVx+nQcIyPPkp7+16xe/UlVv9PFZDJRWlqKRqOZcK4kzMWYzWby8vLUkdPY9kdPZmYmsbGxdHV1XaQZrVbL8PAwsbGxzJs3T+2AKuUWFRWpUxIwM6HeSrSg0oHdunUr1dXVrFu3Do9nJRs2yAkDyiYjMjKSRYsW4fP5ZiyCD65+mPnvCSx5ThBCtAL/KKV85krKnOzhKT1b5W8Fxefb1tbG6dOnEUJgNBoxGAz4/X48Hg9arZa5c+eyYsUKKiqi2LiR4MMba5SU+R6NRnNZLrjx9d+0ScOOHVBQMA+vdx0QmJdKTU1FSsnQ0NBlDaE9Hg9SSmJiYq7rdTAfhl7Go9z/ye6PRqMhOTkZi8WC3+9Xf4x+v1+NZtLr9cyaNYvCwsIxBkqj0VBermHz5pm9/0qdbr/9dvbt03LixGfJz3+EvLwuNbz9ctBqtVitVvR6/Yws7LyafBSaAS4Z7RYdHU1ERAR+vx+9Xq8GPIRqZrIIzdA5pJn6/QohSE1N5bbbbiMtLRA01tzcjMOxiL/8yyReeikQEHQ5KOu4pjM3Pl2udhTf52e6zIkentJTmSgySgiB1WolKioKm81Ga2srKSkpFBYWIoTAbDZTXFzM8uXLOX8+OWicJhaHYjx0Ot0HMlCK+JRosYEBCwUFBYyMjJCSkkJ0dDROp5OjR4+yZMkSYmJipixPSondbufgwYN0d3fT3l7EV796fRon+HD0Ekro/Q8EREysFyVIAqC3txePx4PFYiEuLo6CggJSU1MpLi5WIznHlx96/yfqNF0uSr0qK+PZsWMTf/Znz7B4cT5GYzFSSjo7O0lMTESn0015Hp/Px+joqBqhmJWVRWJi4pj6X2982JoJOY865zT++Sr3XPGydHV14Xa7iYmJIT4+nsLCQlJSUpgzZ86U7cZMdi6Vevn9fmpqaoKRh5/kscfm88gj7zFrVgEeT9K0NeNwOOjr6yMlJSXs4puKiR6eMnpyu914PB70ej0RERHqje/q6qK6upozZ85QVVVFamoqCQkJxMfHExUVRVFREefPJ19SHBqNhpiYmA/U2IwVX+D7nZ2deL1eLBYLS5cuZdasWbz77rscOHAAt9utrsWaDJ/PR01NDcePH6e/fz7PPRfN9u3Xp3H6sJno/kspGR0dRa/Xj1ku0N3dTUtLCw0NDZw/fx6tVsuKFSvIzMxkwYIFzJ49+yKX71Qj+ytFCMGePfDFL0bwpS+9gsnUzIIFt1BQUMDRo0d56aWXmDNnDnPnziUxMXHKc9bU1HDgwAEsFgs5OTkX1T/MxOzdK9i4EV580c/KlT4g8PyVe61kEKmrq6OxsRGLxcL8+fMxmUyqZqYa6c6050OpV0dHB83NzTQ35/HCC0v4xS9sCNHGyy9XTlsz1dXVHDx4kJiYGG6//fYrr1wIN5yBGj+hraz96enpoba2ls7OTtLS0igtLcVqtdLV1cVTTz3F888/T3d3Ny6XS80KIIRgYGCALVs6eeKJInbs0F5SHJMt1JsMn8/Hu+/6ue8+PVu3SpYuHcbl0mCz2Th8+DAOhwMpJXq9npiYGIxGI06nk+PHj+P3+7npppuIi4u7qFyv10tbWxtHjx7l4EEj+/ffwf/8TwerV6fyMU3BOCmhGSLKykYZHPSj0+no6Oigra2N1NRUNaqtu7ubJ598kh07djAwMMDg4CBz5swhIiICu93O+fPnsVqtJCYmotfr0Wq1M9q4jI6OqnOeikt5/34d992n46GH3sVkOo/DEQjKiI+PZ3R0lLq6Onp7e9FoNNx8880XNYRSSnw+H729vVRUVLB//34WLlyIw+EgNjaW8nJNeM5yEjweD7t2+fjCF4y88IKHnJxWTp3qIzMzU3XD9/b28otf/ILt27fT39+P2WwmPz8fi8WC3W6nqqoKq9VKQkKCqplQZto4eb1eNTjs0KFDVFbG8+qrd/Pcc8PcemsM27a5qa+vp7e3F61Wy6pVqyY0nn6/n56eHk6ePMnx48dZtGjRjC/ovuEMVCgul4v9+/fT19eH2+3GZrMxMDBAS0sLbW1tREVFUV1dzfPPP09zMHQnJSWFZcuWkZSUhBCC2toMtm0r4zvf2cfs2bOB6WVvmA7KIuK/+qtUfvtbBxkZNt5554w6ZG5vb0dKqS7483g8jIyMoNVq8Xg8nDhxAoDly5erCSS9Xi8Oh4Py8nK2bdvGgQN62tr+k09/+n8xmTJxOG69yPX0cSb0x79o0TB79x6gt7eXiIgI+vv7sdvtxMTEYLFYiIiIoKWlhR07dlBbWwtAeno6ixcvJiEhgdHRUWpra3E6naSnpzN37lzefz99RhuX/v5+uru7ycvLo729nd//voN/+7elfO1rb2EwHMPrvaCX0dFRvF4vJpMJt9tNc3MzHR0dxMXFYTQa1cZkYGCAQ4cO8dprr7F//34AEhISOHnyJGfPJvLgg1HXrVv4w+add0a57z4d3/jGThyOAXbt6mdoaIjY2FgiIiLQ6/W0t7ezfft2qqurMRqNLFy4kKKiIgwGg5rBweFwkJaWRklJCZmZmWr5M2GcFDec4klqbm6mqqqKzs5ODh82sWPHJv7hH05yxx0LGBkZwev1EhkZqWqmt7eXpKQk4MLIa2hoiOrqarZt28a7775Lamoqbrdb/b2ERhteCTesgZJS0tXVxZkzZ7DZbJhMJnQ6nXrjT58+TWdnJ2fPnqW7u3vM97xeL/39/TQ0ZPP22+u5885f0tPzPq+9No+7775bjfe/Ul57zcFf/mUimza9SEVFDa++2obZbCYqKgqtVotOp0On0zE0NKRGYqWmpmKz2YBA762iogKTKbAGy+FwUFlZSVVVFdu3b2fnTg+wjYiI+/F6dTQ13TqtPG4fJ0ITv9bVdVFZWYnNZlMX4er1evr7+9VlBvX19QwMDKjf12g06qJYr9eLEILm5mYqKirYudPLr3+dwtatTGuR7KVQQtz379/PSy+9xJEjZnbt+gs+85nfEBHRipQX6yUpKYn29nb8fj82m40DBw4wf/588vLy8Pl8dHZ2cuLECbZu3crLL7/MyMgIFouFhoYG/P7VbNliDruFJ2H3bskXvxjB5s1bGRmpUBfh6nQ6urq6VM3U1dXR39+P0WikoKAAq9XK4OAgZrMZjUZDX18fzc3NGI1Genp6WLduHUlJSWNGrh/0/nu9XhoaGjh+/Dg1NTW4XC6ioqIYHBykqSmXV165l3vueYHS0lT8fj8Gg4GUlBS1c9zc3MypU6dYuXIlkZGRSCnp7+/n+PHjvPXWW2zdupXW1laysrKIiooiOTmZuLi4MQFZV8INa6AGBgY4fvy4miAVAsZHibwSQtDW1kZVVRUul4uUlBQ1yGHXrl1otbfR0fEoyclf4+zZCk6eDCyyHBwc5KGHHvrAUXoKe/bAV74SzebNW3C5/sjPfvY6DoeDNWvWsHjxYnUua3R0FIvFgsViwWQyUVhYSHV1Nc3NzWri0NbWVpqamqirq6OiooLW1laqqlKA/0Cj2YzbvZuTJ9NZsGDBjIbD3wgoP367faxelN6mlFLNydfb20tVVRWDg4Okp6ej0WhwOp3s2rWLqKgofD4fEAhFHxhYSE/PTfzFX7zEihWfAsxT1mM69PX1cfr0aSoqKti2rZuRkWcpK/snZs82odNFqKOmmJgYoqOjiYqKYsmSJbS3t9PY2KjOp82ZM4eBgQHOnj1LfX09dXV1nD9/XjWwg4ODHDoUwbvv3sWWLUOsXWu5dOU+ZgQaX8m3vgHS6EMAACAASURBVLUPna4Ov3+sZrRaLXq9nq6uLhobGzGbzSxcuBCr1UpdXR1VVVXMnj0bIQQ1NTX09fVhsVjo6urC4/GQkLCeL3/ZcsUj176+Pt577z3efvttXn/9dQYHB7n99ttJTf08r7yykU2bdhAbW4VGk45Wq1VHeIODg3R0dDA0NMTg4CAAw8PDNDY2UlNTQ0VFBeXl5Wrnvrm5mV27dpGZmckdd9wxY0tZblgD5Xa7aW1tZXh4WA3vVPD7/RiNRlJSUkhPT0en07Fs2TJ8Ph87d+6ks3MW8J/AvXR0jN2P5/nnn+f222+npKTkkuGUPp9PDSsNRXl4Tz3VQ0tLBydPBtY7OBwOjh8/jtVqZe7cufh8PsxmM2VlZcydOxeNRkNnZyc2m02dUzAajXR0dLBnzx56enoYHh6mtbWA9vYHgHvx+wP193g8agMa5gLKj3+8XpRUNKEph5QlByUlJSxcuBCXy8WuXbvo6OgYV+oa4L+Bz3H06DBNTaVqY3QluFyu4LxYIW53QJ8uVx8OxzqsVisul4vIyEiWL19OSUkJBoMBnU6H3+/H5XKpcyJVVVWcO3eOhoYGnE4nvb292O121UBJuZre3l/w+c+/wKpV66+ozjciyu/36aftNDWdoLt7Ys34/X7cbjcWi4X8/HxmzZqF0+mkqqqKyspKOjs7EUJgs9nUOe/Gxkaam/N4//1Itm8PjOwvZ9eC8QwPD9Pe3o5Go1F3Tqiry2T//g1s3LiNzMwGIiOTiY+PV71Cer1enXN1Op3Ex8fT29vL+++/z9mzZ3E4HKrhUraaCY1Gfe89A1/+8sy4tW9YAyWEwGAwqEZkfGoRg8FAYWGhOneTlJQUXHh5G/CfCLEJKfeOKU9KSWVlJU888QT//M//PGEEnZLV2Ofz0dLSgtVqHZPuPrRnkZfnprHRR3p6OvPmzaOnpwen08n58+eZM2cOeXl55OfnM2/ePCwWC+3t7VRVVeHxeEhOTsbpdNLR0UFycrK6/qq+Pou33tqIEOtR9hOKiopi0aJFJCcnh43UJFxKL36/H4vFwooVK4iIiCAhIYGenh6ioqIAQrKNKJvFbQT2cu5cJL/73e/47ne/O+Hcn8/nw+PxqOdR3LoTodFoaGzM4eDBT7N48Q84dqyc8+e1REZGcsstt5Cbm0thYSGlpaWYTCZsNhuHDh2ip6dHzeWmdHCEEGoka01NjWpkA5ttbmfp0n+lrCwtrJcJUH6/xcVe2tv1U2omJiaG+fPnY7FY0Ov1mM1mZs+erT4HBWUZjNO5iKNHv8Mzz7SwenUmExknZX2mgjIdMBEajQatVkt6ejpLlixh1y4f9fU/Zs6c75KWZqWwsJg5c+ZQUFCARqNRM9m3tbUBgbkmj8dDU1MTra2tOBwOTCaTmswaAp6pqKioYGDNIh58MHLG3MI3rIGCyRNuwoWEsPHx8ao4Ghqy6eh4FLh3jHFSylLyZf3pT3/iBz/4AYBqjIxGI16vl6qqqqD/PuDzLysrIz4+Hp1Od9GEZ3NzoNzIyEjS09PJyMhgeHgYl8tFWloan/3sZ4mLi8PpdHLgwAEaGhqw2+1YLBYiIyMZHh6mubkZnU5HcnIydXWZvPzyZ4mN/XO6u3epdU9ISCAjI0NN1x9mYqZK0Orz+YiLiyMzMxO73a4GICgN+FjjFNhsUAjB0NAQb731Fn/1V38FBAySz+dDr9fj8/moqqqivr5e1eCiRYvUhZPjOXjQyPPPf4ZNm7YhRC89Pdk4HA6amppITU3lnnvuwWq1MjIywvnz5zl37hy1tbVqZouuri7q6+tJSUlRc84pST4DjU2g/snJ32D+/GgiIvLCepkA5ffb1XVpzcTHx2MymbDb7bjdbnW5wvjUWIFXYCdug+ELVFXNZ3j4UbUDpODxeKivr6e+vh6v14tWq2XhwoVjMsyMR0qJ2WwmIuITeL33Exv75/T3HyQ19fvcdddd6h5xAdfuIY4fP47b7cZgMDAwMEB7ezsxMTFkZGRgtVoZGBjg3LlzanJZCLQxGs2t/Pa3n+J3v3Owdu3MBGLd0AZqIkINjRKQMDAwQG1tBm+/vZ7k5K9d5NYL/S4Esk84HA6sVitVVVV0dXVRWFiIw+Fg3759tLS0qD1yrVZLUlISNTVpk66D8Xq9JCQkcOeddwLgcDjIyMjAZDKpw+4zZ87Q0NBAdHS0mtRxZGSE9vZ2HA4HTudi3nnns2Rnf4emptfV8lNSUtRFvaG9rjCXJjR9kcvloqCggAULFnD+/Hl1r6ULTL5Nu8vlYmBggNjYWFpaWrDZbKSnp+N0Otm9e7f6Q9fr9eTn50+4NfeePfDwwwncd9+LpKTUMTIS0IuyFCIrK0vVhtLodXR04PV6VRe33W7nxIkTaoOk0Wg4depUsCe/FsU4rVzpCetlCqYaGYSmL3K5XBQWFrJgwQKqqqqoqqqir6+PmpoadfR0wcBdGHm7XHt45ZUGHnjgAQoKCvB6veoIvba2lv3799Pa2orH40Gj0aiLwyerj8/no7Y2g7fe2sxnP/sbEhNTsNtvISsrC4vFoo6+fD4fNptNjeLT6XTq0gmtVotWqyUuLg6bzUZTUxMeT0AnsbGxZGZ+kXff/Tpf/eofWbly1Yzd64+VgVIaG6XnUVxcTFFREVu2dLJtWxl33vlLzp6tmPT7ipj6+vr4wx/+QHFxMdXV1dTX12MwGDAajQghiIqKUqMBBwYGKC/X8M1vTr7NPARSoSguIL/fT1tbG2+//TYFBQVERkYyOjqqhp8LIbDb7Zw8eZLm5maEuIXz5x8gNfUhGhu3q0PvlJQUbr75ZubMmXNREtwwl0bZU0cJLkhNTWX27NlYrVacTqc6ep3MOCnP1m6384c//IHS0lJaWlpoamoiIiICjUbD4OAgUVFR6oh+ov3DlJH3k092U1/fyMjIWL2kp6fT3NzM8ePH1WwEOp0Or9eL3W7HZDLR39/P6dOnaWtro7OzU+3NNzc3MzKyDNjGggWPsXx5rOpVgLBeLhfFkAwPD6PX60lJSVE143A4aG5upq+vb4wrcCL92O123nzzTebNm6e6gBVXW3t7u7rdi8VimXLtpcFgoLu7hJdeWsfGjdvJz+9Ho8kgLS1N3am3pKREnZ8aGhrC6XSqeUkHBgaw2Wx0d3fjdDqJjo5meHgYm82GxWJh1apV6PW38847X2H9+hcpLByeUc3csAZK6TkoP3zFtaKEUs6dO1dNX/TEE0V85zv76Ol5n5MnA73G8RPkoQwPD3PkyBH6+/vx+XzU19dTXl7ObbfdxpIlS9RQ7tjYWCIjP8U3v5k86YShMok9PDw85r2uri5aWlo4ceKEaoyUDNpKr7mlpQUpVyPlFuBztLVdaBxTUlJYtWqVukJdyVYcZmIm0ouybYWS+DWwf5OexMRE0tPTOXbsGAMDCwkERATmnCZivF46Ojo4ffq0WmYg+zjExMRcFB0a6haeNUtit8fR3t6u6kWJGBsaGuLw4cPU1dXR3t7OyZMnqaurY3h4OBhVOEBra6vacVLWcYW69VasiCMjIxOPx6N2csJMznjNKEERZrOZ2NhYcnNzmTNnDjqdjoSEBNLS0tSt1BU3n+LWG9+5GRoaUucPlZx93d3dmM1mUlNT1aSspaWlU6YWqqyM5ze/+SQbN75AcvJ5hoc16lxne3s7hw4dwmaz4XK5OHz4MIcPH8bpdKr1C3hnnEBgiUUogeTZd/D2219hw4atpKXVotFkzOg9vmENlE6nIzo6GrvdrjY0Sl6xjIwMVqxYoaYv2rFDy+zZs3nttXnsCa4sU1yBin84lNDwY7fbjcPhUDNWjIyMqGsh9PrbefTRwkmzAiurxs1mM9HR0eh0OtxuN06nE7/fj9fr5b333mP37t2TXOXFcx5SSqxWKzfddBPFxcVqj06j0cxoEscbjfF6iYiIUHcGVRK/KiMWvV7P3Llz2bnTS0/PTcDnUO4/TDwvodFo1ATEJpNJzZOouNF0Oh1lZWUX5b4LdQuPjsZTWlrK8PCwGqEHqBrs7++nvLycV155ZZpzRwH9REY+yE03BbYHUXrrYa1cmok0Y7VaKSgoYN68eSQkJKgdDr1eT0lJCT09PWroudO5iNCAGrjQMdZoNERFRanLF0ZHR3G5XKrh8PsD2U5ycnImTRy9Zw/cf7+BX/2qH7vdz9BQhqoZl8vF4OCgmgli9+7dNDY2TvvaY2NjSUu7j7ff/nM2bNhKfn4LLldgTn4m5y1vWAMVExPD0qVL6e3tZWhoiPnz57Nw4UJMJhMGgyEkK7kysknh7rvvZmhoiBdeeIFTp05N6oMfHh7m5MmTREZGkpGRwZw5c+ju7ubYsWMkJyeTmppKY2MOP/3pHHbsmDxl/fDwsDrJuWDBAkwmE62trezfv5/u7m56e3tpaGgYYyincguEzpFZrVZ1dKYYqZkWz43EeL3MnTuXhQsXEh0djdFoHONG0Wq1vP9+Or/+dQpf//rLHD3q4ty5KHW9yHhGRkZobm4mNTWV2NiACy05OZn6+nqysrLUOaf09HS1QZsog4Ayalq6dCmFhYVqSi5lXqKuro66ujoMBoOq3Yk6WAEu6MdiqSY29pNjvheef7o0imZ6enpwOByUlpaycOFC4uPjx2yZARc29Vu3bh1er5fm5jyOHv0OBsMXcLn2qMcpz8rn8zE8PKyOroUQJCUlqcZKo9Gg1+snXdcYqp8lS/SMjHxa/Uyn09Hc3Kzu2q2MuiE0GvVidDodRqORoaEh/P7VVFR8l02btpGWVoPbHejQWCyWG2e7jQ8TnU5HVlYWMTExJCcns3TpUlJSAmmKlG2Yx7vdkpOT+frXv866det44okn+NOf/kRERAR9fX0MDw+ruc+UDMAAd9xxB6mpqaSnp1NeXk57ezsu1zK2b/8cTz/dydq1E29i2NHRwZEjR7BarcyfP1+d5FSiwpTktsoQX+GCcdpOZOSXgApcrrGistlsHDt2DJPJRFxcHF6vF71eT3R09IyK50ZC0YvVaiUlJYWysrIxywNCuZD1HFas+CTNzaU8++yzvPXWW7hcLux2O8PDAV+82+3G7XZTXV2tBjIojVV7ezutra1qZhLFKExknDo6Ojh8+DAGg4GbbrpJHc0NDg7S3d2N1+tVozoncs9FRkaqC9RHR2/C7f4dWVmP0N9/ks7OwCLlmJgYdatvjUZDdnZ2eGH3FCiaSUlJoaCggJUrV06ZvBkgKSmJ+Ph7ef/9SJ55poWqqvm88kogOndoaAiNRqMaoRMnTmCxWEhNTUWr1RIbG0tzczONjY3k5eURGxs74fNRFhFv2eKnqMjG8LBOTVWkMDg4iMFgYHh4GLvdrr6vtCNKxn4lbZZOpyM/P5+EhASOH4+mq+sJFi36AXl50cTFpeH1etU9pmZyB+Yb1kBBYP3PsmXLOHHiBC0tLcTGxrJ/v47NmzUTut20Wi0mk4mSkhIef/xxfvjDH+JwOHj99dc5cuQIUkpOnjypGqempiY6OztJSEigsLCQrq4ujhwxY7ffy/33v8TKlTePKV9ZG2Gz2SgvL+fcuXMkJyfT19enJhf1er24XC7Vx2y1WvH5fKq/W8o1+P1buOmmnzJnThqdnbdy5MgRNSpIceXZbDbsdju5ubmYTCaSk5PV9RhhJiYyMpIVK1ZQWVlJW1sbsbGxF230N9Z4aAEzs2bN4rvf/S7f/va31YCII0eOoNPpaGpqUqO3KioqiIqKIjMzU01AW1lZSVxcHEVFRRclll2zRuLzBfSyb98+KisrycvLo6enB7PZjMFgwOFwqNkt4uLimD17NlVVVWrk1+joKKmpqSxYsACr1UpLSz779n2TsrLHGRo6xsBAoCfe09ODTqdj7dq1pKWlodPpMBgMF40EwowlIiKCu+66C51OpwZHTRUkUF6u4ctftrB9O6xencnw8KN86Utf4o033uDw4cPq8pETJ05QU1ODlJJ169aRlpamlt3Q0ACgruEMRdHPz3/ei9n8Pu++W0deXh6RkZGqwXE4HJw4cUKNRC4pKUEIQUdHh5rrMycnh8LCQsxms9ppjoqKoqNjFnb7g5SUPEpaWhMLFnyFFStWqC5HJUJ0prhhDZQyeRwfH8/p06dpbW2lvFzDY48t4MUXvRdtNhiKRqNRM4THxMRQXFys5tKKjIwEAsYJ4PTp06rbxu9fjc32DyQnfw0pzYyMLFXL9Pv9amp7ZZtlnU5HZ2cn7733nroluLKa3+/3Ex8fz2233abu6dPQkE1T07/xiU/8kpISDyZTujoXphATE0NZWRlxcXHk5uZy6623kpWVhVarnfHh942E0kuMi4ujurqapqYmvF6vmjtt4p1SAyh7ikFg19zS0lL6+/sxGAwkJyeTmZlJRUUFDQ0NatSVyWRSIwHLy8vR6XTs26flb//2Qvltbe1j9KLX66mvr8fj8XDnnXeSk5ODXq9XXX3KzrpFRUVqVgOfz0d0dDSJiYm0tRVy4MDnWLTon3E4Xqejo0PN7G80GklNTSUzM/Oi3naYyTEajej1eurq6nA6nSQlJZGTkzOhYR/f+YBAxK+yGF9Z+K1ssSOlVF398fHx+Hw+YmJicLvd7N69m5iYGNUFeKF8yc9/3ovPt4s33zyjbog4NDTE7NmzyczMZGRkhLq6OgYHB4mMjCQ/P5/4+HgGBwfVjo3VaiUmJkZN2RRI6eXj5MkH+PSnf0tRURRud6C9MpvNars409xwBsrn86HRaOjt7aW1tZUzZ84AcO5cEq+8Movvf/8gq1cvvUQpAZSFt9XV1fh8PtxuNxkZGdxxxx10dnZy+vRpampq8Hq9GI13UlX1I+BebLa97N6dQ1JSEl/+8peJjIykra2N2tpazpw5o/qPIRAG2tjYyL59+9SJbiXQIioqSjUqHs9KysvvY/PmbSQktHP8eCUDAwM4nU66urrUOisJQjMyMoiMjGRgYACj0XjRgr8wAcbr5fz587jdboaHh9mzZw9SShYvXjytxJ1K9pCWlhY1uis2NlbNi2exWGhtbWXnzp1YrVZ1UrqpqYk33xxm69YEnnnGxurVibS1dVBeXk5lZeWYTAFGo5GGhgZaWlrIyMhgdHRUdcsoHbKEhIQxvXgpJcePR/PGG39GRsa3qKzcxuDgoBpRlpaWpq57qqysZOnSpepIOxxmfjGKZpQkr42NjZw9e5a+vj4KCgq49dZbKSoqusROuBfuq9frxePxqNF6AKmpqaxbt47e3l66u7uDy0kCoebNzc10dXWxZ88e7rrrLhITEzl82MSGDZIf/rCKkZHA6CsQqKUP5uasUjshSiCMVqtVRz6JiYnqDg7KSK27u1vtxDQ0ZFNR8UXM5i8QH59GZGQWBoOBmpoaoqOjKSsrU6MTZ5LrzkAFhrQTRUsF3lO2oFBCbUdGRrDbF/Dqq/dy771bWL48e9o30efzqavv6+vrcTgczJkzR93QMDY2Fq/XS319JvAD4F6UgIXGxkb+5V/+hY6ODhYvXkxfX5+acSK07soIqKWlhY6ODnUuInSysrY2g1df3cimTdsoKGijrW2Yc+fOqelIQhkYGODgwYPk5OSQk5OD1+tV941SdoH9OPFB9GI2m9UFriaTib17xbS2aVcWOjY1NdHR0YHJZFJznGVmZmI0Gtm5cydVVVXjvrkGm+2/iYzcyKFDhcTG3kVvby/nz58fMzpWXMRGo5Ha2lr0er26h5kyVxB6jUo0WHV1Km+8sRHYSEPDn9SlCsrcmJSSWbNmkZCQwMGDB9FoNGpKp48zFweXTK4Zk8lEZGQkZrMZk8k0po251JYZytq30G0xtFotaWlpxMfH09zczKFDhy763pkzZ/jJT37Ce+8ZePLJNXzjG+W0te2is/NCh0ZJjm2xWNQAmu7ubjU1mnKd43Wj1+txuVycPHmSw4dNtLf/I0bjfXi9u6msXKhm4fF4PKo7e8WKFZe9H96luK4MVH9/P1u3bgU2AQT/VrjwnjJCCWw6N4utW+9l/fqt3HmniVmzZk174tdoNKrRUuXl5YyOjtLd3U16ejoFBQXEx8djNN5JwDhNvA7m2WefpbW1lZtvvll1xSiEGqnQtTdwITdXQ0M227dvYMOGbeTkNOLzCWJjY1m8eLEaRBHKyMgItbW11NXVsXjxYjQaDefOnaOkpETNKPBxCSH+IHpRkn76fD7y8vJoacnnS1/STivxpV6vJz09nYiICE6fPo2UUnXxpaamYjKZVFfgRNGYQ0N7+elPAw3gqlWrMBqNIWlwLmhFo9HQ0NBATU2NuqQh9JmG9oIbGrJ55ZUNLFv2Y6qrT9LdzRi3UH9/P4cPH6a1tZXi4mLy8/M5e/YsxcXFHzu9QOB+KIzVC0ylGWX0k52dTUZGhmqgprOfk5JbT+lsJCUlERsbq847j0+LFMq77/rYvXsha9c+jpSjahSo3+8fk7RWmbt6//33gUAQRKi7f6KyA8liF9PZ+e/APXi9gfZNmfOePXs2c+bMQavVcubMGYqLi0lKSppRzVxXBqq+vp7NmzejCCXwt0LgvUOHDpGenk5ubi6trQVs3bqez31uC+vWGVizZg3p6YGoOuVHP9WNVDb/MxqN6lzQsWPHKC8vD+73slp16022SFMRRmZm5piNyJRghol6LhAQVX19Ftu2BYxTbm4TEBBRREQEc+fORUqpLuabaK3WmTNncDqdOJ1O0tLSKC4uJj09XXXfXOlmYtc6l6sXZZdaKSXFxcW4XMt4+GHztLMy+3w+nE4nGo2GWbNmYbfbqa+vp729XU3uq7j1JlsqIISgpaWF1tZWVS8TrWHTarUYDAYMBoO6Q+r4CfrGxhy2bdvApk3bSU+XxMWt4NChQ/T19anuIuWcbW1tDA0N4XK5GB0dJSUlhdLS0jF6+TgQuhh1rF5A0czhw4dJT09X5wCVkW1paamadBWmZ5w8Hg+1tbU0NTVhNpvVjqqygarVah2zZGAsAf1IeS8NDU1kZq4mMzNTXccWqhllTj5UM6HPX0H52+/309c3j/7++1m8+Ae0tVXT1aVRv6ssx5AysEVRbW0t+/bto6SkZEY1c10ZKFAs/YW/FZT39u3bR0JCAsXFD1NRsZ4NG7ZRUtJHScltapg5BNaUDA0Nqduoj0dJ5Llv3z6EECxZsoSRkRGSk5Npb2/nyBEzNts/MJVxCtRL0tDQgM/nIzc3V80unJmZSUZGhuqaUc45f/584uLi+P3vO9i27dMhxunCNSvZMIqLi4mPj6epqYlz587R1dWFVqtVe8gjIyNUV1djs9nw+/2sWrWK9evXY7FYZmQzseuB6epl7dq1zJkzByklRUVF6PW38/DDiWMal6kitBS97N69m8HBQYqLi/F4PGRnZ9PS0kJlZaXa6ASYPD2Skgg0NzcXgKysLDXQRRlZe71e5syZw9KlS7HZbOzduxen06m67xTjtGHDNrKzG9FoAnpRNsuz2+3U1tbS3d2NyWTCbDYzMjKiBnM4nU46OztVvXwcGf+sFc2Ul5dPqJnQDvB0R0719fXs37+f9vZ2dT3c6OgojY2NNDQ0qLvaXsxY/TQ2Buqbm5uL3+8nMzNzQs0UFxezdOlSOjs7KS8vx+FwqJoJHanV12fx+usbuP/+l0hONtDWdoeqr9DACKWeSqb8jo6OGdXMdWegJnKRhSKEoKenhPfe+zYbN75AZmYzeXkL1IeloNFo1AczEcpOlC0tLURFRam+4dTUVFyuZdjt95Kc/DVstsmNU2idWltbxwgtJyeHlStXkpubq9bD5/Op0VbPP1/G+vVbyM1tvmjhnGKkTCYTeXl5pKSkkJGRoa4Mr6ysxG63q8N2nU6nbvt97tw5Tp608sUvRlzxZmLXA9PTSw9NTU0UFhYC0N1dwuOPJ1zWfjZKlunW1lY1EgsCKaeSkpKIi4ujvLw8GP05eWJZpU4dHR20t7fj9XrJysoiNzeX3NxcsrKy1JF3REQEsbGxWCwWTp48qebXq63NYNu2Daxfv5Xs7EakDDSGERER5OfnI0RgU8K8vDza2tp4//33GRgYwO12MzIygtvtVneePnfuHNHR0R/LcPPJFrVPpJn09HR13dx0t2kP1YziWlbcY3l5eQDs3r17TBBUgIv1o9FoMJvNdHR0cP78eTIzM8nLy1M1o3RcMzMzycnJITY2ltraWnWOOnQRf2NjjjqtkJnZCBjIz89XzzM8PExHRwdnz57l7Nmz2O124uLi1GmHmdTMVTVQQohPAD8DtMAvpZQ/vtIyldxWeXl/R2ZmLD7fhZDJUEwm05S74obm2FIenE6nCz68z3H//S8hpZndu3MumSJESUrb19dHVVUVNpuNxsZGNaQ8Ly9PzRb8xhtD/OIXcTz9dA/Z2bM4cmRA7eUohio0B5jSUOXl5alh6x0dHRctvtNoNDgcDl56qY8tWwzX7TbeM60Z5dkq7pCmplyeeqqU7dt9rF079ucxVXBNaA80dLGjMuFdVFSETqfjzTeHsdn+m8mMEwT0MmvWLDQaDTU1NZw+fZrm5maklOqizUA2i/fJy8sjOzubT33qU/h8Pl5/3cn27fls3LiNwsIO/P6Ay1hpiJR6mkwmcnNzsVgs1NfX093dPab+il5Onz5NaWnpdWugPpw25sLmfArKb3G6xklBcbUpOx8okXexsbEkJCQEt07fo0YjT9a5KS4u5uabb1bdeKdOnaKlpQVA3ZRVcesqaZluu+02vF4vbW1tHDlyBLvdTnNzHtu338PmzS+Rmdl4Uco3IQQjIyOcOHGCU6dOjbmWD0MzkxooIcSbwMNSysYrPsvE5WuBJ4HbgVbgqBDiNSnluSsrOfDwpGynv/+WCTeJuxRKuLDNZlN9roFFm3fw05/O5umnO1m58mZGRpaSnJzMj388teZzc3OZN2+eGoKs0NraSktLC9nZ2Wi1WpqacnnllTX8+tcO7r03X/zuWQAAIABJREFUFZfLSkZGhhoWqtStublZHSVptVrsdjv9/f0kJCRMus5JSklTUy47dszsfi2hXL+auXB/Xn75Pn70o0rWrJl32d8XQqjbXcTExLBs2TLS0tLU7Pn79mnZujWeqKhNDA5OPvLOzc1l7ty5aoNy5swZ/H4/DQ0NZGVlqb3rhIQELBaLGsK+Zw/88IeSX/2qm8WLV6nGsauri6NHj6obFSqNqbKf1UQjBeV6Qr0MMz1neT3rZYJzsXev4POfv7ydZLVaLRqNBovFQmlpqTqvpcxteb1ePvnJT/Lv//7vvPuuj8lG3jk5OWqYeE5ODpWVlWM0k5OTo6baEkKoIeeAmvy4vFzDz36WwjPPdJOfP5ujR51qAgBFM0r7oiTEDu3AT6SZK2WqEdSvgXeEEL8F/lVKOdPJucqAWillPYAQYgvwGeAKxRN4eC0tETQ1NREZGXnZESV+vx+r1UpZWZmacj4y8lM8+mhhMLfehfRFDz74IO3t7Tz77LMTRsIA6lopm812UdQdXPD5vvLKZn796yHuvTeQLsVkMqkby4WSnJzM7NmzqaurY8eOHezbt4+hoSF1Y8Tx59BoNLS3F7F//0Yef7yWT3yi8LLux2VwnWomMHI6dWoz99zzHAsXXv790el0LFq0iPz8fDQaDSaTicTExDG59f7mb+CZZ2wcOlTAT386ecb86upq1UWobH4JqB2czMxMcnNzWb58Oenp6QghQnrugrVrk4ALi22VSMKamhq2bdvGmTNn1L3GBgcHx0SuwYV8bNHR0SxYsODDnLO8bvUynpMnrfz4x9OL9lRQ8nAWFBRgNBrVNXPjSUxM5P9v772j2zrPfN1ngwAIEiDBCrBXkRRJybIkSrK6IlsusR3bsopjp/kkzsw4vsmck+Ssu87cnMxkkhlnfCae8dxkcj3pcaea5diy1axC2aIaqUaxihXsBSwgiULs+we4PwFsalSj9rOWllj33sT+Yb9fed/fe+SIjk8/nY8sT7znXVFRQWRk5GhZQYXQTENDA42NjSQkJJCTk0NKSso4pweDwUBNTTJ/+7ewdSusWRPH8HBEgGbOnz+PXq/HbDYLY2t//DWzYMGCG78HJctyoSRJu4AfASckSfoz4PX7/i+u89yJQKPf503Akus8JsrNGx4epqenZ9wy3ZWg0+mwWq1ER0djsVhG+zlZJ7RHMhqNLFy4kKamJmpra6mtrUWSJPLz80lLS6OyslL8m4hLG5LP8LvfDfD00zFTXtvQ0BCdnZ1iie/UqVOUlJQgSdK4cyh/s8u1jAMHXuTFF/fyzDM3rr7lztWMrw5p3rwfERcnIUnZV22qq9VqSUhImLTZoLLss2pVLFFRXxS9vJRuumP1oqQDj0XZq8zKyiI5OXnCTs3+DA0N0dLSIvRSWlpKUVFRwHUrwdA/LXlkZASj0UhOTg5HjxrE8adzz/LO1YuPlpYWbDYbTudSfvWruRMuC0+FVqslPj5+ym64AMXFIfzyl6tZs+afqa2tp67OFxDy8vICNKO4nfuv0sClPWtf+5/xjg9j9TOVZiIiIkhJSRH7YhNpJisra9qeMZd7NV2AAwgGwvATz81CkqRvA9++2ecFn4AqKxMmbTaoNBbs7u5m5cqVJCcni+XBrKws7rnnHjwez6TBCcBuv5fi4i/zi1/U8dRTk4/cBwcH6erqor6+npMnT9Ld3Y3L5SI0NJSwsDDRs2U8q+nv/y333/8f5ORMHfymiVuqmavXy6U1/eDgIWR56XUtT0wVnHz2RS10dnayfPlyUlNT8Xg8tLS0kJ2dzdy5cy+rF+X4RqOR4ODgSYPTRHpRukj768W/JkpBWcoJDQ3ls8/0fOtbV7dsdZXcsc8YX782M9XVX+FnPzvPqlX5035tin3RSy8dQpZdJCevQpIkQkNDWblypaiZGhoaGheYrvz4vvu7ePEgTU3d1NXVTaoZu90esL+toNgw3XvvvQGuNde7LDzVHtTDwC+AncACWZYHJ/vZa8QGJPt9njT6tQBkWX4deH30mm5qr4ipRqay7GupXV1dzcjICHq9Xiy9KF0zlX2syVnN+fM/Zv36N1i4cOGU1+JyudizZw/V1dVidBISEsI999xDeHg4fX19AftPvs3X5Rw//kN++tNK1qx5lLCwsBu62X07aObq9eLfT2vaBtfAeO81m62ZQ4cOCYcIRS/Nzc0TdtKdDGXUeuAAkzpcTKQXg8EwqV6cTicJCQk89NBDZGdno9frqaiI51vfCr9hwel20Atc+zMmMvIpKit/yhNP/Jl583Km3eZHCU4/+Uk5Nts+QkJChGYU1xml5mkqlPTyhISEKe2X7HYXu3fvviLNKIOY7OxsVq1ahdVqxWw2k5aWNq5lzPUw1Qzq74CNsiyfv75TTMpxIEuSpHR8onkGePYGneuquVw2jtfrpaGhgXPnzomKf7iUDVZeXk5jY+OEe04+fCP32bP/N488spDExMQphaYUA8KlBniyLGMymcjPzw9YkpIkiZqaZHbseI4//GGAp5+eN+1vnkm4AzUzeTbd9TBWPyMjXpHc4q8XQMya3G63cKqeDI/HQ35+Pg0NGfz1X2suW2ejbFxPphelPiYiIoIVK1Ywf/58MTN76aUbOnOCO1IvCqvp6/sNX/zib0hPb0eWs6fnsKP4u5IPD5fQ2uoLDMpy3YULF9Dr9aSlpVFRUTHl7MntdjNr1izi4uIu63Dh70AxlWZcLhdWq5W1a9eKrsETXf/1LgtPtQe1crLvTQeyLHskSXoJ+ARfCujvbqBQr4orSRVtb28XzQT9UUYYl5s5KSP3iAgvQUGLL+syHhQUxODgoPBxi46OJjY2Vox0/IvsqqoS2b79y7z6aiNPPJF2s4LTHaqZS8HJ/815PUykH0Uv/iNQjUYjinDPnDkjsvWmQpZlenrm8YMfRE3aqVn5Oa1WK5IgIiIiMBqNwjpH0YTSkiM6OprZs2dPuWw43dyZegHl/avRPMPwMLhcc8a5wlwPyszp17/uxuPZJ4xflfR/pQj39OnTIltvMlJSUkhNTcVgMFyRw4W/NuBSZt5YzQCEh4eLfdDx1z89+rmlJluyLH8ky3K2LMuZsiz/bLqOO/aFvBqu5MVtaWnh4MGDogWCv22SUgg3OYF1DFqtlrKyMpqamqYUmizLlJWV8dFHH/H+++8Lk0r/tGGfa0UqW7du5sUXD7BhQ8yMazh3ozRjsVhIT08XfonXGtQnazZ46NAh0WIFAgOUkjZ+ueAE0N+/kB/9aDa/+lXnaMuGiVEcTIqKijhw4ACVlZWi2FzRiv8/wC8bUL7hwelmcWP04nv/RkWdISoqSrjBTMdAUNHPO+94SUio5Ny5cxMOaq5UM6mpqSQmJtLa2ordbr/s862np4dz585RU1PD8PBwQA3UZJpRrs3/+qdLP3eck4R0Gesa38cysbGxpKenB1j/TMXIyAg7d/bxrW+F86tfdZKR4WSsw4hOp2NwcJBjx45RVlYWMHJQxJOUlMTy5cvxeDw0NTWNOcv4Iju3283w8LDINhyLInxZlqmsrBTdUu12e8DvSJLPGLSwcANPPvkmeXn6aW0cdqdyJXoBX3uD1NRU4Mrbnbvdbrq7uxkaGkKj0fD558G8+GIMv/xlBzk5Mi5XNIODgxQXF3P27FkxWPAfaSvN4VatWiWcSyZnNefP/z3r1/+ejIzFwPikF/8HZVFREaWlpYDP+DgtLU10WJ4os/Xw4SCef54pZ2Z3E2Pfj5deLt/712q9h4SEBMLDwzEYDFcUoDwej+jQ7e8mrtfrOXs2muee01NYCNnZbRw44LMQ0ul0AYFI0czq1aupra2d0ApJmTmtWLGCNWvW4HK5+OCDfr7//Yhx99d/Gbi7u5s9e/aQkpLCo48+itFoDNhamOq1uhEz7zvuCeb/pppoSq20XU5MTBTNuFJTU6d8WI+MjPDmmza+851YnnnmHRobW6irGwkIDkqVt9J62Wq10traGuBQrvxcRkaGSPdUbqrdfi/nz/+Y3NwfYzZ70Wq/gNvt5umnnyYpKYmOjg7q6urQ6XQYjUZRUCfLMi6XS+xRgK8pYUZGBiEhIX5OxakUFm5k06YtJCU10tcXS21tLXl5eXd1oLqcXu677z6WLFki7F/S0tLE/ZsMl8tFT08PNpuNM2fO0NLSQl1dGm+++QTPPvsu1dUXsdtjmDNnDuDr0ZWRkcHFixcJDg4OWEqUJImUlBTi4+NJSUmhqakp4NzK4Kq/fyHnzv2Yv/qrvaxZE0tbWxsXL14UhbpK8ovyuzqdjqSkJABhhqucW3kt/Ac3ZWUWfv/70DvWYeRGMNmS3X33OSkoeImVK1eK5IDL7SGD7zlTW1vLZ599hs1mQ6vVIssybrebzs45/PGPj/K73/VQUKBjcFBLeno6DoeDpqYm0bsJLmkmMTGR1NRU0StKOYfiAZmQkMCaNWu47777+OijQb773Sh++ctm5s83IcvhAfcfEF2UY2NjSUpKEi7t/q/H+KB9Y2ZOCnfUkysjI4OXX36ZTZt8nyt2+LIss9lnNMxXvvIVCgoKMJlMog12cnLylOLZv9/L974XzzPPvMfQ0C5KSxEBTnlAeL1eQkNDmT9/PvPmzcNut1NUVERdXV3Aprd/kEpNTRV1TsXFX2b9+jd45JEFBAUtoqysjOHhYdFYcPv27YSGhhIXF0dOTg5z584VBp41NTUUFhaK0bXFYiEnJ0e0Y/Y3Bk1Lq0eSdLS3t1NSUkJqauo4m6e7hSvRy1e/+lUeeughwsLCcLlcxMTEXLaGQ5J8zdyKioo4ceIENlsWn3/+OJs3FxIXV4PL5esVNDg4SEFBAcuWLaOzs1MkQQQHBws9KiNXRTNKqYJynfn5+fT0zONHP5rN+vW/Z82aWEwmEzt37mTv3r3Mnj2bvLw8sReg7FPU1NQwNDSEwWAgNjaWjIyMgPbdyvEBGhsz2b79C7z6ag3LlqUC+nF/892CbyDh+9i/3Ya/Zr72ta/xwAMPiAGAYlN0OVwuFyUlJXzyySdoNBoSExMJDQ2lujqJbdvWsWnTW9jtXoaHH8disWA0GhkYGKC8vFw0A1SChDJgTk1NJT4+XgSSvLw8Zs2ahcFgoLW1FZfLxUcfDfI3fxPNpk2F1NfXcejQ3ID2O7Ls66LQ3t5OeXk50dHRwqpoqtUnRbuXloWnf+Z9RwWoyMhINvrlLSof+4vnscceIy4uTrxZx276jeXAAXj2WR1/+lM/J05U8uqrOwkNDWXevHkkJiYSExNDeHg4g4ODorI+Pj4ei8WCVqulqKgoYAQDCAEFBQWJItxf/KKOhQt92XpBQUHk5ubi9Xrp7Oxk+/btvPHGG8THxzN37lxh4KnT6cTD5i9/+QstLS0AQpySJI0JTj5jUCUzS7GyURra6fV314PnSvTypS99SfjbXSk6nY6MjAy2bdtGYWEHTuerLFz4D0hSF8PDl/Si1+vJzs4mIiKC0NBQHnroIRobG6murhYJE4pJp3L+9PR0srKyREFlQ0MGP/hBFL/7XScZGYtpa2tj586d7NixQ7Tp7urqwmAwiMSIxsZG/vKXv3Dx4kVcLhfDw8PApQ1w/32o2tpUtm3byMaN7xEdHY7bnXDX6cSfyMhI8bG/dvw18/jjj1+1ZgBRTL9z505MJhMFBQUYDA+za9czbNq0Bav1Ag5Hkvh5g8FAbm4uBoNhnGb8O+/Onj1bWLopprUajQa73c4HH/Tz3e9GsWlTIe3t79HRIdHa2kp5eblYOlQMYE+ePMnevXsxGAy0tbVhNpvFHrvyGvgHyIGBAXbssPP974fdsGXhOypATYZ/cFCsX+DySRLKtPS992SSklrZubNZ9E/av38/SUlJPPTQQ+LmK67gysezZs2ir6+P5uZm4WmmNLu75K3nc4hQinCVa1Lacit9YOLj47HZbNhsNtLT08nNzUWv14/aFDUHFMcpm7KVlQls2bKBp556i7Q0W8CGplarxe12U1VVhdPpJCIigjlz5txVzecmYzK9XCmyLIuWK8PDfwKe5uTJQ3R2po7Ti/KwV1KCk5KS0Ol0VFZWotfrxQOoqqqKmJgY7rvvPtF998ABRlPJJVavjgFiqK2tZe/evURHR1NWVobL5aKzs5Pg4GBGRkbQarU0NTWJ4KT8vcpSscvlQqPx9fWpr0+nsNDXkiYpqZrm5jhqamqEK7fZbL7ru+oqXK9mwKcbpc2Pw+Fg374RPJ7nePLJP5CZ2cPgoCZgOT4oKIikpCTi4uLQ6XRUVVWJNjvJycm43W4iIyNJSUkRAxr/errTpyP5/vcj+OUvm6mvr6OzU8O+ffuwWq3MmTMnQDMtLS2cOnWKvr4+YfgaFRUluuYqmlGeH1qtlhMnTGzdauG11+rIzQ2lrW36NTMjApQ/Vyoc/zXTRYsG2b37HAaDgdWrV3Pq1Cn6+/sZHAysG3Q6nTQ1NTEyMiJmKD09PaJNu06nY968ecTGxvLhh45R41fHhPZFyuhLp9MRFxcnZk5Op5PKysqA/SuPxyOSI4BRi5wUDh78Cq++WktqajJnz9pFbx9l9lhSUsKZM2eIjo4mISEBgNzc3BmX2Xc9XMuDZnBwkLffbmHfvr9i8eKfMjTUzYULQfT19Y3LapJlmYGBAfr6+tDpdKIrsyRJ6PV6Fi1aRGRkJBkZGYSFhQnn6fFFuL7jmkwmZs+ezcDAAC6XS2yS+z/Y/JvRAWIAtXLlSsxmM11dXezc2ce77z7KU0+9RUZGC263RFVVFT09PZhMJmJiYnjsscfUADUB16IZj8dDQ0MDYWFhrFu3jpqaZC5efJnIyG8SGxuHRpMkNKPcy76+PoaHh0W3XUBoJi0tTZhIT7TH7O/NuGBBGAcPzqW1tRWr1UpdXZ3Y11JmRB6PR8y0wdcm5otf/CKxsbGMjIzQ19fHuXPnaGtrQ6fT0dKSQ2HhBh5++L+w2Xp56y0jMTExPP7442qAulqcTif9/f3CtuPkyTA2b9bw3nsya9ZIDA35akFMJhMLFy4kIiKCCxcuMDQ0RF9fH16vd7T9cb/wpFJ8rxQBKURFRWGzZfHrX0eNupJHT3ltoaGh5OTk0NzcTHp6OpWVlXi9XhwOx7ifNZvNpKenMzBQwJ49L/Daaw1s3pyAx2MRG+wXLlzg3Llz2Gw2zp07h8PhYOnSpeJvT0pKIioqanpf4BmG0+lkYGAAt9tNSEgIYWFhYnYqSRJFRVpeeWURTzzxB2bPDqGv7wGMRiP19fX09vaKZVyn0ymaApaXl6PX6/F6vQwNDQkPvLa2NsLCwkhNTcVkMl02G8pkMpGXl0d3dzednZ00NDQEPFj8iYiIIG3UHTs4OJiUlBRycnLYtWuId9/V8fOfX2DWrCSOHm3i5MmTtLS0EBHhMwnNysrCZrNhMpnUAc0VMFYz4eHhAXtGHo+H8vJy+vv7iY//MkVFG8nN/Z/09HyO3f4FEhIS0Gq1DA0NUV9fz8DAAKWlpVRXVyNJEoODg0Izra2tREZGYjAYJmy2Ol4/4eTn51NeXs6cOXNoampiaGhowr9DafMxb948srKyyM7ORpJ8/cPi4uLo7+/ns8/0/Pu/z2HOnJ9w8eJuenp8s7jMzEyampowGo3Tppm7IkANDg6yd+9empqacLmW8a//et+oa69vJNTW1iZsPMxmM3PnziU3N5eEhASSkpKw2WyjLd69dHR0iKU8ZY9LmVZ7vV7efruFN99czOuvd/L001ObQIJPEHPnzqWqqorc3FwaGxsnDE7gW29OS/sGn3zyTTZuLMRu7+Ljj1OZP3++2Hf77LPP+OSTT2hvbxezruPHj+NwOMSyn8rUOBwOdu/ejc1mIzs7myVLlmC1WkXwePZZLd/+9i4Mhia0WgMRERF84QtfEJl4DQ0NOBwO+vr6KCoqwuPxMDAwIEbISosFj8fDwYMHKS0t5dFHHw1wDZ8sGyo0NFQsAQYHB084elYejLGxsSxdulQsOZaUlHDihInvfS+Bt95ysnx5GvX1Em+//Ta7du0SD7uqqipaWlrQ6/XExcURE3NTPBzvaBTNNDY2kpOTw6JFiwKMg1tbW2ltbR1d9t/Epk2FJCREEB//v4RmmpubGRgYYN++fej1evr6+hgYGBB6UVZqDh06RHV1Nffff/84o9nJ9GMwGMRAZaK9M3/N3H///YSHh3Pq1CmCg4MJDw9Ho9GQn59PUZGWn//cy7JlL7N3778QHBw8ag5QRWdnJxaLhcTExIC9vOthxgcoWZbF0tyuXUMcOTKH7373Y2bNuofe3jBaW1spLi6mubk5oLNtRkYGTz75JCEhIXzyySc0Njbi8Xjo6urC6XQSFBREdHQ0JpNJBKqLF1MoLHycDRveITU1h6GhiCmbIgLC+FGn06HX66dcPnA4FvHJJ9/kuefeJzGxnu5uFw6HA5vNhtFopLOzk127do2rpeno6ODAgQM4nU6+853vTMvrOpNRWpacP3+es2fP0tHRwbp16zh7NpqvftXA3/zNfvT6k8iyL014aGiI9PR0nnrqKfHGLi4upqenh5qaGgYHB4mKiiIsLEwsq4BPm/39/QwPDzMyMnLFqbpKerJ/Rp4/yh6kkgJtMplwOp3s2ePm3Xcj+eEPD2G1hrN790X27dvH4cOHAcSARtkLdTgcfO1rX5vOl3bGIkkS/f392Gw2kcxw//334/V6aWlp4ejRoxQXh7Bjx9Ns3ryV5ORasrLyeOSRR0RH5KNHj9LZ2UlTUxODg4PC/WNsMW5fXx8ul2tcht1U+vF6vcJxfKL0ecXSSKmV02g0VFVVCddyq9WKLK/mpZcsbN68hQ8++E/gkmaampro6ekhKiqK9evXT8+Lyl0QoJxOJ6dOneLDDx0cOvQSQUEb+PjjVjyeB5g1axYej4e+vj7xplYcwjMzM0WV+KxZsygpKeGzzz6jtraWzs5OIiIiuP/++0XfE6UOaePGQtLTGzh2rJekpKQJ+zkpKAkNSsX2VAkMBsPDtLa+xoYNb5Gc3IrXi0gTbW9vR6fT0dHRIQTlX4ip/B8SEiJGydNV+T7TcLvd1NTUUFZWxtGjR2lqaqK8vJzDh4PYunUz3/jGDkJCLuDxXNKL0mIgIiICnU5Hbm4uNTU1HDp0iJqaGhoaGpg9ezaLFy8mOjo6oAZKqa374IN+fvKTqVN1lXumLDlPNXtKSkoSfYbcbvdoQsR6nnzyTaCZgwfNNDY2sm/fvkk7QptMJlUvV4Cy7Gaz2aioqKCiooLY2FgSEhKorKwc9WCMZuvWzTz11FtERpZjNFrJzc3FbDaj1WrJz8+nra2N0tJSampqsNvt5Ofnk5mZKQYkQMCek81mE3ZnkwUn/1pOjUYzYTNB5fvJycnC7koe9f7s6OgY3c82s3VrBJs3v01x8S+w2Wzjir0dDge9vb3TWnc5owPUyMgIZWVl/N3f7aG09H8BT+P1HuTsWURgCAsLE2m+DoeD8PBwFi9ezD333CNaEhiNRux2O59++qlozKWMRIKCgqiuTmLLFiU41eP1eunr67vscppiulhTU0NNTQ3Nzc2T1B2sxuV6g4ceep2MjD68Xm3Anohe73ONCA4OFlljY0dJJpOJrKws2tvbCQsLU/cVJqG1tZV//Md/5OOPP8btduPxeDhzJoqSkif50pd+S0hIA319CL2YzWbuu+8+5s6dK6ynQkJCaG5uZseOHej1epxOJ+Xl5WRnZ4vlMv8iSZ9+Mvntb9tZs8Y66bX5Z6c2NTXR1NQk9OKfOg6XMk59m/MZbN3q02dGRgsjI156e3txu92TFqOaTCYyMjJUvVwBTqeTP/3pT/z5z38WziLvvfcesiyTmJhIQ0MG77//GD/+8Wny8+MJCvLtA8+aNUs8zI1GI0NDQ3z66ac0NzeLYyuem2MLqz0eD8eOHSMxMZGamuQpvfXgkgtOS0uLeC6N1YwyyxoaGkKWZfE8URxqNm58F73+mMgoHqsdo9GI1Wqlra1t2vYuZ3SAcjgc/PKX50eD00b0+s/xerViTyAuLo5FixYFtFcOCwtj7ty5hIWFceTIEc6dO4fL5RKWMf6zktbWVtzu5bz//iYRnBTGjlQGBwdxuVwiqCnCUDpW/uUvf8Futwdk64Fv5uRyvcGDD/6Gb387B6/XK5IfFPeAsXUKE6FkkJ04cYLY2Fiio6dO3rgbGR4e5vjx4xw+fJihoaHRYL+G4eE/kZn5AxYuzOTee78g3EM8Hg/h4b4N6JCQEC5cuCBm4qWlpcIlABC1K2Oz/JQ6tk2bCikoWAH4ApSiF+VnlZ/X6XTU1NTwwQcfcPHiRXF85bxJSUlotVpWrFjBAw88wIULVrZtm8/69W+TltYIaEQdy1QtPlS9XBler5fy8nLef/99bDabeCgrDuNG46O89VYBb7wxyIMPzsPr9YoaSY1Gw8DAACMjIwwMDFBcXBwwm21tbWVgYACLxdcd2X8WJcsydrudQ4c0/O3fXurnZLe7Aq5P2btqb2/n5MmTnDp1SjxjlGW95ORkvF4vS5cuZdWqVURHR9PZ2Tm6kmBh2zZfKcKsWU10dQVPWien1+vxeDzTqpkZHaA+/VTmnXfWk5DwbZqbDzL6ficuLo74+HjCw8NFIaXb7Uav1xMSEoIkSTQ3N4sOuS6Xa9yowWdbksqhQ8+yebOvSFZJBYbxJo5dXV3s3r0bWZZxOByUlZVRVVWFy+WiqalJFOGCL1svPj4eh2MRra2v8dBDr/Ptb+fw4IMPMjQ0hMViobGxkfr6ehwOh6hPUMQI49uJKxmHdrtdPNSut5nYTGNoaIjq6mpiYmLo7OzE5VoKvEdi4n8nI6Od4GBflX5UVJTQi8lkQq/X09bWxvnz52ltbcXj8VBTUwNc0ot/MFBGw0pw2rDhPbKyWgKuRdGLspxXV1fH4cOHSUpKYnh4OKDOKSIiAovFgsViEd1MH3g9RFFSAAAgAElEQVTgAUJCHuHVV4P5t3+7SESEmaqqdlFArOjF39HicnpRGY8vq+0z8dq53W7S0tJYt24dvb3z+dnP5vHrX7exdq2Z4eFh9Hq9WDZtb2+nuLiY1tZWHA4HxcXFwKX26UNDQ8I3UcH/44aGDP7t3+LYts03c2pq6haakSSJ7u5uenp60Ov1lJeXs3fvXvr6+gBfcpbiV5qTk4Msy6xatYp169YRFhZGT0/PaBH3HJ544k3S0poJCvJdt/JsU67T/9qmWzMzNkAdOADf/GYYzz+/DZttEKfzEdLS0oTvmbJB/emnnxIcHMzw8DDx8fFkZWWJSmu73S4adSlT8UvT4tXU17/CM88UMmuWjZGRSymlCsom9vDwMPX19eKhVV5ezkcffTRutqSQnp4usvU2bHhrdFnPJ9ioqCiWLl1Kbm4ux44d4/jx4/T19WEwGOjv76enpweY2EdMcaC4ZE8yjS/4DECpK8nMzCQ8/EucOfP/8PWvf8iqVV/EaDQiyzLHjx8XG9QWi4WCggJ0Oh1Hjx6lpqYGj8eD3W4fV0PncrmEHjQaTcCeZWpqHV6vTmjMXy9KHZW/8avBYBDBCSAtLY2lS5diNpsJDg7G4/Fw4YKVV18NZssWDatWZWC3R2E0Gq9ZLyoTMzw8jMPhIDMzk8zMTOLj41m3bh1u93K+8x0LP/jBZ0iSjcJCJx6Ph7i4OObPn49Op6O4uJhTp07h8XiEQQBcCgDKLGvsyogyuNmy5Sl++9sO1qyJY3h4mLq6Oqqrq8Vz6Ny5c+zZs0fMZgwGgwhQMTEx3H///URFRREcHCyeLUpJxdmz0bzySiQvv3yeyMhQ6uq0YllYmUFN5KQ+3ZqZkQFKefj+8Y9DeL3B1Nffz5w5c1i4cKFYFnM4HBw/fpwjR47Q399PUFAQbW1tVFRU0NbWhtvtFmvv/nZJPqGsxut9h4cf/g0xMc3YbIOiLkEZvciyTENDA1arlc7OTk6ePBngeOxv/GqxWMS0v6GhgYGBApGt50uI0HLu3DksFgtLly4VGYSLFy8mNDSU7u5udDodw8PDxMbGcujQIZqammhraxM1MorDhSzLFBVp+au/uv5mYjMNvV7P4sWL6e9fyGuvrWTLFhePPLIJj8eDVqultbWVbdu2UVNTI/aZmpubhWWVy+XCYDCIYmm49OBXZuyyLFNREc+OHRvZvHkLqak+eyrwjaitVivNzc0Beunp6RF1K4mJicTGxor9rubmZnQ6HREREZhMJtxuNw0NGWzbNp9XX61h1apMNBoNUVFRLFmyBKPRSFdXl9BLTEwM+/fvp729neHhYVFO4b/POtmysYrPJX7p0qWkp6eTmJjI3LlzKSkxs3GjzLZtMjk5s9i+/SwXL17EaDSKVHKr1SoK841GI06nM2Bwq9VqSUtLIyIiAkmSxNKh1+vl4sUUtmzZyDPPbCMzczbDwxEBmlFQXCaU62pvb+f06dPExcUxb948kT6u3OPOzk56eno4ezZaFPmuXJlLV5eF8vJyuru7RdLYhx9+SHV1tXC6UToyTLdmZlyACmyzHUpb2yLy8/OJj48PSPkODw+noKBAZPkpAaOhoYGuri6sVitGoxG3243dbqe3t3f0N1cDW1i27N/Iz3dz6tRZysrKWLhwIXPnzhXFmCMjI5w9e5bZs2fj9Xrp7u4GfKPn6OhoFixYgN1uJyMjg5ycHJGpc/FiCnv2vMDGjYUkJtbj9fp+x+Fw0NjYSG5urljbjY6OZtmyZUIUWq2WVatWkZWVxf79+6murqa4uBhZlsXfU1mZwI9+FKG6Vk9AWFgYTudS/vM/dWzd6uX++332McqIMTY2ltzcXFFq4PV6qaurY2hoCKPRKEoOenp6/PTi2zy+9957iY2N5dSpcD78cBNLlrxMYqKMRuPTi8fjobi4WOwH+OslIiKCvLw8goODSU9PF72AlFRzZcnI6XRSX5/O1q0bWb/+bSIiwrHbo0VhtjL79k/wWbt2LcuWLePQoUOi429NTQ0xMTGYTCbg2pwT7hbCwsJYsmQJ4Nu3O3w4SDzc16yRcLstAZqRZZmWlhYxgFESnJT27QoGg4Hs7GzMZjMdHR2iuLu7+x4++MA3805OrqO4uHdCzQAkJCTw6KOPYjAYCA0NxWw2ExkZyRe/+EWysrI4deoUVVVVeL1egoODqampobY2lVdeiaSwUOILX5AAX7lCZGSksEUaGhoiOzuboqIiuru7KSkpobS09IZoZsYFqMBsFom4uDhhiAiB6bJms5klS5YIWyDF20qj0Qiro+HhYUpLS0dri3z9nIzGb5Cbm0BISCK9vb1iJCTLMnl5ecK40263U1NTg9frxeVyERISIorhVq5cidfrJSQkhNDQ0FEjyQQOHvwKr73WgN3eRXe3SxwrNDSUuro6jh07JtKVwfem8M+WiY6OJi8vj87OTuFi3tvbS0FBAQ7HIt5+ex1/+pOdNWtUN4mxHD4cxHPPBY3qZ3wxo1arZe7cuWg0GhoaGmhra8PlchEeHs7IyAjt7e3Y7XbOnDkT0AssKCiIiIgIbLYsPvzwS8AmKipKiYpaKvSipPQqTiJut1vce6PRSH5+PmlpaQQHBwu9uFwuVq5cSUpKCiUlJezZ46awcP2ocXAjVVW+PbIlS5aIIDVWL1FRUaxcuZLh4WGCgoIIDw8nLi6OuLg4oqKiGB4eFqNhdc9yPMrKB0xch6RoRlkdUYq4+/v7RVq2MgBWlt+U44aGhhIUFERLSwulpaX09y+kp+c5nntuG8nJdciyPKlmZFkmJCRE1FF5PB50Op3ICszOziY4OJj29nY6OjrQ6/WjCRFzePnl86xcmQtoAzKFFXQ6HcuXLxeD+0WLFmEymbBareM0c73MuAA1Uaql/3ro2MiuzEIATp48idPpxGAw0NLSIqq7GxoakOVVXGo2eILW1rViHwugs7OTo0ePEh0dTUZGhjCM3bp1K6dOnSI0NJR77rkHk8kkloGUmhalZcaWLRt49dVaNm9O4OOPU3E4HAFNCQcHBzl+/DihoaEsW7ZMZB/6Lz8GBQWRmZlJQ0MD3d3drFy5UvSbef/9Z/j+94+ydu2CG/HS39FcSZGsJElicNHS0sKRI0fEw761tZWLFy9SUlKCzWYbt2fQ2JjJkSPrSUr6LrW1e+jogKNHjxIREUFmZqZYRi4sLOT06dOEhIQIvSgj16ioKKEXJUCZzWZycnI4ccLEu+9G8uSTb5KR0QJoGBoa4vjx4xiNRpYuXTqhXpS0eEWPSUlJREdHo9VqMRgMJCQkBLSBV5mYyfSjaGbFihV0dXVx+vRpBgYGhAlrc3MzFy5coK2tTTxL4NLsWKfTkZCQQHFxCK2t/4eFC/8Bq1UPXDJunUgzyrNlbD8nt9st9BMeHg74lg19CREbeOKJN4mMDKWryyLcU/zx14xSB2ixWEQRur9mpoMZF6CuZdkqKiqK++67j5CQEJFRZ7Va0Wq1owagX0CW30HppDk0pOHYsWNiBKLQ2dlJfX09cXFxGAwG7HY7hw8fpqSkhLCwMJGSDJcSKPyzuZ566i1SU5PxeCzMnz9fWCwpac2K/Ul3d7cQ70QZPmazWTQzDA8PHxXfep5/fhdf//p8IUwVH1fTbE0plIyKimLevHnk5uZSXl5OW1sbcXFxmM1mkcmn4HIt4/Dh/4sFC/6Js2cLhadad3c3AwMDIjgpJQSHDx8O0Iuyp+l/TMViq6uri127hvje9xL44Q8PAc2MjHjFqLevr4+urq4p9aKMuJViTqPRKLwpCwoKOHUqnM2b1T3LybicfhTNWCwWli9fDviyNOvr6zGbzQQFBQkzWAVlyb+/v5/a2lSam38MPIXNVoHN9iCZmZmimPb8+fMTamYiNBqNsFDSaDRYrVZKSszC1T4trZm6Oi3l5eVERkaOSyn3r8WKiYkhOjoah8Mh9tEUzUzXM2bGBahrJSYmhtWrV1NfX8+BAwcYHBzEarXS37+QCxe+DqxHadPu9Xppa2sbdwxZlikrKyMpKYmMjAx6enpwOBzCBkVxrFAeSJIkBWRzpaXZOHvWTkpKCnFxccJ0UVmv1mg0wlNrqim0sscgSRI1Ncm89956nnzyLfLyLi1hqvi41k6gwcHBZGRk0NvbS1lZGZLk63Kq1WqFSayP1Tidf2bx4n+mr+8DEZDA9ya32+0MDAyI5V9ln3SsXpSf96950+v1o67kOt56y4nVGs7Bg2Z6e3tFBtiV6GVsEpAyeleWff7bf9NMe6fUmcLV6sdoNDI4OEhVVRVNTU0kJSURFBREf38/F0c7JWq1WjIzMwkLC2PfvhFOnPgqwcHP4vEcpL1dI2Zayr1SgsiVaubcuXPExcWRn5+PLK9m69YINm58l1mzmggKCqa3t1cMgicjKCgIi8VCdHS08DFVNKNYJSmvz/WgBqhRlNFKTU0NnZ2do40Ck9m9+0ni4/8Gm+3guFqRiWhvb6e/vx+tVitGGJWVlcClFhsKgcGpDo1GQ0dHB01NTcIPrqOjQ1iPKHtjw8PDAVliY5dswCdMXwX7BjZt2kJ8fC1eb8KUorsbudY21VqtlpGREc6fP09tba3Ingq0rPLtWaak/ACHw+cWHhwcLMoL3G431dXVZGRkkJ6eLpaFFcbqxd+2RpZl6uvTeffdR/n5zy+wfHkau3dfpLGxUfTv8deLcqyJ9DJW08r3Kyri+d//26gm1EzC1QYn5bWuq6vj/Pnz9PX1ERERQVRUVMCMIzg4mJiYGFpacigt/TqhoV/B4/kUuJRUodTVKQbXERER2O32SY1gAfEMUZYTi4q0o956b6PXH6Ory7cs53a7Rbq48ntjNePxeLDZbAEJH4DY7/J/fa4HNUCN4rO0OcOJEycYHBzk4sUUtm9/kpSUH1BfvwUIrBXRaDSi7sRut4t07qCgILq6umhtbQ3YQPXn0rKeL3ikpdUjy4gR9IULF/jss8/YtWtXwBJfUFAQ3d3dxMTEiIpv/+P7W+GcPh3Jjh1r2Lx5C2lpdSglV2pGViDXMzNQ9p36+/uRJEnsMTQ0NKAEJ9hIT08pvb0aEhISCAsLo6KiQtQfdXR0YLPZCAsLE44CyhIgXFrKGxtEFPuZp556i1mzkqivl9i3bx/79u0T+5ZBQUH09PQQExPD2rVriYqKmnCJz9++CxDBb+fOh3njjX7WrDFf2ws0g7nWmXdPTw+VlZX09fUREhJCb28vbW1tAXVzDoeDU6fCsduf5/HH/0hMTCJnzszn2LFjog+dksAlyzLh4eGkpKQIM4HJNONve3TkiI5/+Rcvmzdv4ejRf8Vut4sGhsHBwcyaNYvBwUHMZvOkhcKKFRgEPhslKbBlzPUsC9+SACVJ0kbg74FcYLEsyyduxXX409fXR0VFxajH2Sx27dpEZOQ3aWj4QIx4IyIiRDtkjUbD4sWLsVgsfP7552JJx+PxcPbsWeEM0dnZGXAeSZKoqkpk69anefLJN0lKakSSdGJ0pdX6ap4UB/WJOHz4MNnZ2eTl5ZGZmYnZbA4oAt2928UrryziK1/ZQkpKI3B1ralvR26UZq4lOMmyTG9vrzD27O7upqKigrq6utHasyX4sj2fJyysgtZWn4HmnDlzSEhIQJZliouLxWZzVVUVFy9eRJZlenp6Ama5Ho9HWGTBpYQLX5t2n7fe0aNNvP322xw+fHhC49f9+/ezbNkyVq5cKZYSFb1pNL5kCpPJRGxsrEhV3759PS+88DHLl6+8thf2FnMjnzHXGpwcDsdoy5MTOBwOBgcHKSsro76+XmwZREZG4vWuor39/yU//+/IzjZhNCYDvrZAXV1dhIaG0tLSQklJCS6XC61WK/bCZVkOsMjyR5kVtbTk8O//Ppdly17mgw/+E5vNNu5aP/zwQ7Kzs1m+fLlIoFHazYNvJjd//nzsdjulpaWEhISI5+SRIzq+9a3rG/wp3KoZ1Dl8mzr/3y06fwAej4dDhw6xZcsWLlyw0tz8dSRpAx0d+8TPxMXFsWzZMiIiIjh58iRtbW1ERUWRlJREWlqaqPoHsNvtAS3a/c9TU5PM9u1f5qWXDpCXp6evL5b29nZRDOr1ekVyBASuISsfNzU1sX//ftGwzv+hc/p0JK+8soh//ucaDAYnx483i+Zp/q0e7kBuG82MjIxw9OhR3n33XS5cuIDdbqelpWX0DboGKMRqfYlly/RERz/GiRMnRFt2JeuuqakJm81GaGgovb294zbJwVfXFBEREeBpVlZmYfv2L7Bx43skJVXjdkucPHmSXbt2jft9RS/t7e0cOnSI4eHhAK2Ab0nGZDIRHh6OxWJh+/Ye9ux5iieffJPZsyduzXCHcMP0ci3Byev1UlFRwccff8yBAwcYGBgQbYAUU4CkpCQSEp7lxIn/yYIF/0BCQj1O5yz0ej3R0dHMnj1bJCSUlZVx+vTpcecJCgrCarWOS1KQJF/TwRMnTBQWbmDOnJ+wd++/iO/5W3J5vV6qq6spKirC6XSK7QqLxYLNZsPtdjN//nwx41JKWpQ977//+7BpWxa+JQFKluULcOuXm5TNYJvNRmFhIXv2uIBfAE+jJESALzitWLGCvLw84RJtt9tJT0/HaDSSlpbGwoULOXfunKjwH3seALd7OTt2PMerrzayYcNStFottbW1lJSUiDbdJSUlnDt3LsDQcexx2traqK6uxmw2093dLZZ0Ghoy2LFjDV/5yhYMBieHDx/m008/xWKxkJmZSWJi4i1/za+V20EzyszG1zJ9J9u3bxdLLj58y3r33vszli6NIioqCr1eT1hYGFqtlvj4eNxuNzExMeTl5eFwOBgeHh7nIqDc54SEBFasWMHs2bORJInDh4P4/e9DefXVGqKjw2lujhPNBf33tsYeZ3h4mIaGBlEM6q+pkZERYmNjsVgsvPNOK3v2vEB29g+BXkZGlql6mYCrCU6KZjo7OyksLOSdd96ho6Mj4F6ZzWZWrFiBXv8gn3zyTTZvLiQjI5x5877JyMgIlZWVuN1ucnNzxR7WuXPngMD9JYDs7GzWrl1LcnLyuL2nHTvsbN1q4eGH/4uLF3cLzfjrwd9nr7u7m1OnTuFyuYiOjiY6OpqWlhZh5zUyMsLOnTs5cuQIFosFk+kxjh17cFqXhe+KPSj/tgL++0J2u53KyspRyyMdUIhG8wxeb2BwWrlyJbNnzxaji6ioKNLT01m7di29vb14PB6xIV1RUTHJqHM1x4//kD/8YYAnnkgT9TN5eXmkpqYyMjJCVVUVZ86cmbSjrsLw8LAwlly5ciXh4eHU1CTz/vsb2LzZt6x3/Hgzn376KXV1ddTV1dHZ2UlGRsYd+8C5mSh6GbuH6HK5qKys5MSJExQVFYnBiO+h76uTs1pf4r77IklKSsbtduN2u0lMTGTNmjUkJydz9uxZPv/8czIzMxkaGuLEiROTtmx/6KGHxEj1wAF4/nnYsgWWLUvF7U6gpqaGnp4e0TF3Mtrb2zl79izh4eEkJSWN259wOp2jM6cX8Hqfprz8IC5XhqqXSRgbnJTu2pNppqKigtLSUvbv3y8KuP0HCpGRkeh06/jkk2+xceN7JCRUEhWVwLJlywgNDSU8PJxjx46JFi+1tbWTtrxYtWoVubm543oyHTgA3/9+GK+9VofN1ktPT+SU97a5uZmSkhIWLVqExWIRHaKV45aWltLZ2cmRI0dGnzGpaDQv8uyzb7FixZPX8rJOyA0LUJIk7QXiJvjW38my/P5VHOfbwLeBKZv/TUZ7ezsVFRUMDg6KormMjAzcbjeff/45p06d4vPPg7HZXsVgeA6n05ctYzKZiImJoaCgQNxwxZHC4/EQEhJCSkoKwcHBeL1eysrK6O/vp62tTfws+EYiLtcy+vt/y09/WsnTT88b57llNpvFSDo6OpqlS5dy/Phx0V5+IpR9ELfbTW1tKu+9t3404aIOCBJLNsqehM1mEynHtyvToZnr1UtHRwfl5eX09vaSkpJCWloaISEhIvnlyJEjFBUVAT6bG18r91XAFqzWl1i+3C2KMP03pRMSErBYLCxatAiNRsP58+dxuVzU1tYK2yS4VFQ+MjIiqv19ex7+zQz16PV6rFaraJdQVVU14V4C+EbFNTU1xMXFER0dLYxvlYdkfX06e/Y8RXb2Dykv9w3O7ha9jB7nujQzNDTE2bNn6erqIjk5mVmzZmE0+myy+vr6xHMmPj5etHeXZVk8Y5KTv8ru3b7glJnZiNPpe8Z4vV6MRiOLFy8We9PV1dWMjIwIZxC4pBm32y3qN+FSxp2/fnJzQ3nrLSMpKSki1X0iFAcdk8lEWFgYRqMxIBM0JCRE+IjW1aUChQQFfZmcnFXTqpkbFqBkWX5gmo7zOvA6QEFBwVUtiCtW+CUlJSIAZGRk4PF4hE1IT888iooe5PHH/wuPR0tpaSJut5sFCxaQlJSE2WwWTuLKDEqn0wmDV5PJxLJly8jPzychIUHYFymj1ObmbA4ceJH77/8P1qx5dMoCuoiICBISEnC73TgcDg6MFhEozb+U3x0ZGcFqtVJQUEBn5xy2bfPVOcXH1wZk62VmZtLZ2YnNZmPt2rU8+uij4o1zOzIdmrkevSg9eU6ePElvby9Wq5V58+YxZ84cIiIiaGtrIywsjPnz5xMTE0NtbS1Hjxro6vo1ixb9C/PmhYu1eKfTiUajESnfyps7LCyMpUt9FkdxcXH09/djNBqFXpRsuqCgIPR6vd+G/MSddmNiYsjKyqKlpUUEqLF68Xq9xMTEEBcXJ6r/laUnJSHC12m3F5cr467Sy+hxAjTT0HB1v2+32ykuLqa2tpa4uDgeeOABFixYgCzLdHd3YzabWbBgAU6nk7CwMPbu3QvA/Pnz0WjWsn//X7Nhw7skJFQz6glMeHi4CDT+mjl8+DCtra0sXLhwnGbMZrOwN4Ox2XQ+/bS1+TSjPBuUWk2j0Yherx+nGavVSlBQEE6nMyB5R1mWNpkeQ6N5kaCgL/PAA9pp18yMXuJzuVx0dHTgcrmIjIwUs56IiAjMZjPNzdm88UY4r7/eisGQTH39WubPny9s8f3bGviPbMPCwrj33ntFu3eDwYDBYCAvL48VK1bgdDrp6+ujvj6doqJNvPjiXnJyYsTPT4Rer2fOnDkAhIaGioJPo9HIrFmzcDqdop5lZGQEo9HIwEABO3c+w/PP7yIvz43XmyCOFxQURGJiIpmZmQQHB/Poo48yb948tUh3ClwuF+3t7TidTiwWC1qtVlTc6/V6UlNTSUtLo6+vj9OnT7N3r4f9+x/hy19+iyVLEjEYMgP0osy4lZm2gqKXOXPm0NraKvSi2M8YjUZCQ0OpqIjnpZcm3/Mwm8089thj2Gw29Hq9MK3NyMgYpxeTyURUVBQGg0G49FdUxLNz58O88MLHzJ49wsjIMlUvV4nT6aSlpUV0EtBqtfT39wt7qri4ONatW4dWq8VutxMXFyeKc3t75/OHP3yRF174mKysQTSaJHGvFi1aJIKNJEkEBwdjsVjIz88XCTn+mjGZTMybN4+0tDRxbRNlG5rNZh5//HGampqwWq1ER0fT29uLxWLB4/FcVjP+1kk1NckcO/Ygzz77Fjk5q26IZqRbkaUjSdJTwH8AsYAdKJVl+aHL/V5BQYF84sQJlEmI/6VP9DWPx0NVVRWHDx8mNjaWhQsXEhMTQ2hoaMDNW7XK16Ld5XKJ6anixjB6veKYyjrz2DbYXq8Xh8MhmhFu29bNH//4KP/0T9U884xvFSI0NPSyowu3201/fz9ut1u4DLe3t3PixAnsdruwQKmsTOC//msd/+N/HOXrX08VbsNjC+okyWfV7z9FD7wX41+38T8jnZRluWDKC7/BXItmrlcvBQUFxMTEBLRJAd+9/uijQb7xjVB+/3sHK1Z4JtUL+Jb4QkNDp9TLmTNn0Gq13HvvveTk5PDZZ3q+9a3wSWdO/rjdbrHcO5lewLdsk5CQQEFBAWVlFp5/3shvf9vP8uVuVS+jFBQUyCdP+jLSx/6NE/3tIyMj1NTUcPDgQbEloAyGx75+Xq+X/v5+PB4Pn32m5/nnjfzmN30sX+4OeN8qpr1j95Em08yCBQvIysrCZDIJJ5LLpcK73W4GBgZE9nBbW9tlNRMVFSUaKB45ouOb3wzjt7/tZ8UKz43TjL8P1+3+b+HChbIs+0paQQ5goq/Jsiy73W65o6ND7u3tFV/79FNZjonx/X8j2LVrSI6OHpG3b++Rh4aGrvt4brdb7uzslFtbW+W2tjZ569YuOTp6RN66tUu22+3yyMjINR97stct8Gc4Id8G9/9q/02XXsYy3fpxOBxyW1ub3N7eLg8NDV338cfqxf9/u90u79/vvebjz2S9yKOamexvvB7N+DMd+vHXzPDw8HUf/3Ka8Xq913z869HMLRfE1fy7lgfOWG50cJru4/sL40YcfyY/cKZDL2O53fUzVi/TffyZrBdZvrYAdTXc7vq5EcdXA9QVvgi348271cefyQ+c6Q5Qd+L9ne7jz2S9yPKNDVB3wv29Ece/Hs3MuCSJKynbuNEtA+70499NXEuZz51+f1X9XB/XWxp2p9/fm6kfNUVHRUVFReW2ZMbMoOQ71jJM5Vag6kXlalE1c/NRZ1AqKioqKrclaoBSUVFRUbktUQOUioqKisptiRqgVFRUVFRuS9QApaKioqJyW6IGKBUVFRWV25JbYhZ7rUiS1AHUX8chYoDOabqcu+ncqbIsx07XxdwsVL3csvPfkXqB69bMnXzPbvW5J9TMHRWgrhdJkk7It8hl+W49953M3XzPbvX570Ru9Ws2E/WqLvGpqKioqNyWqAFKRUVFReW25G4LUK+r51a5Cu7me3arz38ncqtfsxmn17tqD0pFRUVF5c7hbptBqaioqKjcIdxVAUqSpI2SJJ2XJMkrSdJNyXaRJOlhSZIqJEmqliTp/74Z5/Q792zYTGEAAALaSURBVO8kSWqXJOnczTzvTOJu0oyql+vnbtLL6LlvqGbuqgAFnAPWA4duxskkSQoCfgk8AuQBX5YkKe9mnHuUPwAP38TzzUTuJs38AVUv18vdpBe4wZq5qwKULMsXZFmuuImnXAxUy7J8UZZlF/AO8MTNOrksy4eA7pt1vpnI3aQZVS/Xz92kF7jxmrmrAtQtIBFo9Pu8afRrKiqToWpG5WqY0XqZMR11FSRJ2gvETfCtv5Nl+f2bfT0qtz+qZlSuBlUvN48ZF6BkWX7gVl+DHzYg2e/zpNGvqdxGqJpRuRpUvdw81CW+G8txIEuSpHRJkvTAM8DOW3xNKrc3qmZUroYZrZe7KkBJkvSUJElNwFLgQ0mSPrmR55Nl2QO8BHwCXADek2X5/I08pz+SJL0NfA7kSJLUJEnSN2/WuWcKd5NmVL1cP3eTXuDGa0Z1klBRUVFRuS25q2ZQKioqKip3DmqAUlFRUVG5LVEDlIqKiorKbYkaoFRUVFRUbkvUAKWioqKicluiBqgbiCRJyZIk1UqSFDX6eeTo52m39spUbkdUvahcLTNdM2qAuoHIstwI/Cfw8uiXXgZel2W57pZdlMpti6oXlatlpmtGrYO6wUiSpANOAr8DXgDulWXZfWuvSuV2RdWLytUykzUz47z4bjdkWXZLkvRD4GPgwZkiHJUbg6oXlatlJmtGXeK7OTwCtABzbvWFqNwRqHpRuVpmpGbUAHWDkSTpXmAdcB/w3yVJir/Fl6RyG6PqReVqmcmaUQPUDUSSJAnfBubfyrLcALwC/J9be1UqtyuqXlSulpmuGTVA3VheABpkWd4z+vmvgFxJklbfwmtSuX1R9aJytcxozahZfCoqKioqtyXqDEpFRUVF5bZEDVAqKioqKrclaoBSUVFRUbktUQOUioqKisptiRqgVFRUVFRuS9QApaKioqJyW6IGKBUVFRWV2xI1QKmoqKio3Jb8/6u8CrDVVSD5AAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "beta = 2048\n", "\n", "plt.figure()\n", - "ax1 = plt.subplot(1,3,1)\n", - "opt.update_design([mapping(rho_vector,0.498,beta)])\n", - "opt.plot2D(True,ax=ax1,output_plane=mp.Volume(center=(0,0,0),size=(3,3,0)))\n", + "ax1 = plt.subplot(1, 3, 1)\n", + "opt.update_design([mapping(rho_vector, 0.498, beta)])\n", + "opt.plot2D(True, ax=ax1, output_plane=mp.Volume(center=(0, 0, 0), size=(3, 3, 0)))\n", "plt.title(\"Dilation\")\n", "\n", - "ax2 = plt.subplot(1,3,2)\n", - "opt.update_design([mapping(rho_vector,0.5,beta)])\n", - "opt.plot2D(True,ax=ax2,output_plane=mp.Volume(center=(0,0,0),size=(3,3,0)))\n", + "ax2 = plt.subplot(1, 3, 2)\n", + "opt.update_design([mapping(rho_vector, 0.5, beta)])\n", + "opt.plot2D(True, ax=ax2, output_plane=mp.Volume(center=(0, 0, 0), size=(3, 3, 0)))\n", "plt.title(\"Intermediate\")\n", "\n", - "ax3 = plt.subplot(1,3,3)\n", - "opt.update_design([mapping(rho_vector,0.502,beta)])\n", - "opt.plot2D(True,ax=ax3,output_plane=mp.Volume(center=(0,0,0),size=(3,3,0)))\n", + "ax3 = plt.subplot(1, 3, 3)\n", + "opt.update_design([mapping(rho_vector, 0.502, beta)])\n", + "opt.plot2D(True, ax=ax3, output_plane=mp.Volume(center=(0, 0, 0), size=(3, 3, 0)))\n", "plt.title(\"Erosion\")\n", "\n", "plt.tight_layout()\n", @@ -367,33 +375,42 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "evaluation_history = []\n", "cur_iter = [0]\n", + "\n", + "\n", "def f(v, gradient, cur_beta):\n", - " print(\"Current iteration: {}\".format(cur_iter[0]+1))\n", - " \n", - " f0, dJ_du = opt([mapping(v,eta_i,cur_beta)]) # compute objective and gradient\n", - " \n", + " print(\"Current iteration: {}\".format(cur_iter[0] + 1))\n", + "\n", + " f0, dJ_du = opt([mapping(v, eta_i, cur_beta)]) # compute objective and gradient\n", + "\n", " if gradient.size > 0:\n", - " gradient[:] = tensor_jacobian_product(mapping,0)(v,eta_i,cur_beta,np.sum(dJ_du,axis=1)) # backprop\n", - " \n", - " \n", + " gradient[:] = tensor_jacobian_product(mapping, 0)(\n", + " v, eta_i, cur_beta, np.sum(dJ_du, axis=1)\n", + " ) # backprop\n", + "\n", " evaluation_history.append(np.real(f0))\n", - " \n", + "\n", " plt.figure()\n", " ax = plt.gca()\n", - " opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n", - " circ = Circle((2,2),minimum_length/2)\n", + " opt.plot2D(\n", + " False,\n", + " ax=ax,\n", + " plot_sources_flag=False,\n", + " plot_monitors_flag=False,\n", + " plot_boundaries_flag=False,\n", + " )\n", + " circ = Circle((2, 2), minimum_length / 2)\n", " ax.add_patch(circ)\n", - " ax.axis('off')\n", + " ax.axis(\"off\")\n", " plt.show()\n", - " \n", + "\n", " cur_iter[0] = cur_iter[0] + 1\n", - " \n", + "\n", " return np.real(f0)" ] }, @@ -406,1607 +423,22 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 1\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 2\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 3\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 4\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 5\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 6\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 7\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 9\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 10\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 11\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 12\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 13\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 14\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 15\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO19O29k6bXdqnexyOKryJbQgEeAAEOwBDhQLkjAxQ2u0pspv7iZkxv5Hzj1X3AygDMnyhQ5EiQBdmJZGg0G0PQ0m2STrAfr/TgO5PVxnV3fOXWK06OZ5tkLKJBNsuo8+qxvv9beXyVJEjgcjvKg+m2fgMPh+PvCSe9wlAxOeoejZHDSOxwlg5Pe4SgZ6jt+76n9jwhJkuDq6gq/+c1v8Nvf/hb1eh2NRgPr9fpZn1epVDCZTPD69Wv88pe/xE9+8hO02+0PfNaObxCV2A93kd7xESBJElQqFVQqFWw2G/z5z3/Gr3/9a7RaLbTb7WeRnp/38PCAH//4x/jZz36GatUdw5cAJ/0LQ5Ik+Otf/4ovvvjig33mcrnEZDJBpRI1HI6PDL50v0DU609r+YcgaqvVcsK/IDjpXyDUDdcFYN/P4Hvr9bqT/gXB3fsXjucm8TabDSjRfu5nOL6bcEv/ArHZbL7tU3B8h+Gkf4HwLLsjD/50OBwlg5Pe4SgZnPQOR8ngpHc4SgYnvcNRMjjpHY6SwUnvcJQMTnqHo2Rw0jscJYOT3uEoGZz0LxCuvXfkwUn/AuHae0ce/OlwOD4g/sf/+gq//K//E//y336P+/Hi2z6dKLyf3uH4QLgdzfFv//1/Y7VJ8H+uhugd/l/8l3/+j9/2aW3BLb3D8YEwW66x2jwNkB7NVt/i2WTDSe9wfCD8u/MO/vXnP0SlAnz/uI3/9A///ts+pSjcvXc4PiD+8z/9B/zbP/4Izfp3155+d8/M4fhI8V0mPOCkdzhKBye9w1EyOOkdjpLBSe9wlAxOeoejZHDSOxwlg5Pe4SgZnPQOR8ngpHc4SgYnvcNRMjjpHY6SwUnvcJQMTnqHo2Rw0jscJYOT3uEoGZz0DkfJ4KR3OEoGJ73DUTI46R2OksFJ73CUDE56h6NkcNI7HCWDk97hKBmc9C8Q38RW1UmS7P4jx0cBJ/0LxIfaqrpSqYSv/N7x8cNJ78iEW/eXCSf9C4Ba4Xq9nnLvvw5x+d7lcgkAqNVqz/4sx3cHTvqPGEmSIEkSrFYrbDYbTKdTfPXVV5jP5+FvGo3G3q55pVJBvV5Hq9UCAJydnWEwGKDf72Oz2WC1WmG9XofjOz4u+K61z4Q+7Fnff+g42B4nSRKs12tMp1Msl0vc3Nzgd7/7HUajET755BM8Pj5itVqhWq1is9mE9zNGzzq/SqWCRqOBTqeDi4sL/OhHP8LNzQ0+//xzfPLJJ6jX62g0Gmg2m6jVajs/75uGHtdzD7vhpH8GSDj72gdFH077ufz3ZrPBZrPBYrHAcDjEzc0N/vSnP+Gzzz7DfD7HyckJkiTBdDoNf58kSSBntVpFtVoN31cqldSi0Gw20e128fr1a7x69QqbzQbX19eo1Wo4Pj7G0dERNpsNGo1GivhFr+3regg2yejELw4n/R7gg5okSSAdX1nkjz2A+zyUMevO4y+XS8xmM/T7fbx9+xZv3rzBw8MDlsslqtUqarUa6vU6KpUK1ut1IHq1Wg1Wul6vB9LzGJVKBa1WC8fHxzg/P0e320Wz2cR8PsdwOEStVkO1Wg2hhX5GHvmzPKI85N0ru4Bp1cKJnw0n/Z4g4dbrNdbrNVarVYhxrQutiFmiXQ+mLjL64rEXiwXG4zHu7u7w8PCAx8dHzGYzrFYrJEmCer2OZrMZEnu1Wg21Wg2tVgutVgvtdjtlqYlarYZGo4Hj42P0ej0cHh6i0WiEMGE+n6NarWK9XqPRaKBer4eFQIkfuz5dGPOIv+ve8PO5cPHa7LU4tuGkLwi1sOv1GsvlEovFIryWy2VIbgHbxN71Ne+Yemwm0mjlR6MRbm9vcXt7i8FggNlsliJ5vV4P3zebTTSbTRweHuLg4AAHBwdoNpuB+GoxuSicnJyg2+2i0WggSRIsFgtMJhOs12vM5/Ot95J0Gj7Y67HXpsi6P7G/4+LE/MIuT8PxNzjpCyBG+Pl8jul0iul0itlshvl8Hqx97MHd9b3+fYwYSvjVahWOPxwOcXd3h7u7O4xGo3Ae6sYzMddut9HpdHB0dISjoyMcHByg0+mkiF+v11OJularhU6ng1qtFqz8arXCbDbbWijU2urv9LryciFZcbr1DLio1Go1tNtttNvt1ELDEMURh5O+IEi81WqFxWKB6XSKx8dHPD4+YjweBzLQyjK+jFmfrJ/Z41nCq5XngjMajfDw8IDhcIjpdJryNqyVJ+G73S6Oj4/R7XbR6XRwcHCAVqsVXHW+rMtMSx8jrJKei4a+1xJf8yCx+5J1P/i3DFO4yPKcN5vNB1MkvlQ46QtAY2la2clkgtFohMFgsBVL84GNEb8o6XlckoPHZizPc3h8fMRwOMRkMsFiscBqtUodG0DKcjebzWDhSf7Dw0O02220Wq1AHn0/E3a8di58/BmvuVqthuPQ7eZn8fOyLL1WEfQV+1seh9faaDTCAqBegVv7OJz0BUFLy1iahBuNRsGtVgLkkTvv94qYlSfh6N4/Pj5iOp0GEiox9HtaXZKRrv7h4SGOj4/R6XSCtddkmIYzDF94/bPZDIvFAuv1OpCWop5Wq7WVL4i5+XpfNBzQe6EVEv59u90GgEB+FQu5YCgfTvodsG62JtHoYk+n00B6YLcLn+cBxI7NXIIlPUm3XC5TD37WdShxlKBcAA4ODgJJ+R4V99C15/XTw+FxaYFJehKfoYJab4Utu9kFwpZGeX6NRiNVNXGyF4OTfg9Y8i2Xy9RrvV4DyCYzv6dltAuB/h0fYBIqdlwtF9LKq3hHv9e/I4GsS06SkqDr9ToQbL1eYzaboVKpBI+HC898Pg9kbDQaqXNbrVYpN98ubLwH9Xo9tcBa0rNMqYIgXouTfT846QsiK7GWJ8xRxCyc/o4JKP272N/zeFYrwH/bcwMQrLUSkZ9D159uPwmq50TrTjed58EYny6+EtGeMz/Lejn8mVY9Yvdd77V15Z30+8FJXwC7HqqYRbexaVYZL8vSEyRE7JxIABvz0+vgz2m5+TslvZa/NOuui89mswm/U9Jz0eHx6E1Yd53XYwU8ugDE7mdeMu7rCHvKDid9AWQ9RHkxe168bsmdJWGlhbN/Y8teMWuvFpeutw0BWPqy5Tm19IzrlbB6TIqT1FIvFovU5xEksV1UuLDZ1t087yj2/5BVBXGk4aR/JvQhi1n1Ilp0oNgCodZeLbxaV7XyugAACMIajZeZyFMxjtbneWwNOwCkjqtJRIYQvKblcol6vZ4KLRhOKPn1Gm25rSjhHfvBSb8HYpYkZul3ZeV3Ze9jXgGQFghZd16TifqybrTG8KzbK+E17lbrba07Y3m19Nq1x1LaarUK16ZxvZJcF0l+tYtcLH7Pu8e+GGTDSf8MZFnnLNLzPUTRxYHQxBzdd5Kc5LPEZ/nQkoRNOFpS07KadtDx/TH5MUuWJD2tOI+hC0+tVkslAnmtzNjz/rCJR++XTeLxfuSFS458OOkLIs8KZz10lvCxv8+K961l08QZSW6/2vKdfp4V5rDhhp12sZKaehYkO0VJk8kE8/kc8/k8jNOiDFZJquVBDS00NxFb+NTFz6rDeyz/PDjpn4E8i64/t+/ZRfoY4W2WnK/FYhHEOWrtbWZe43c2zxweHoZOuzwBTazXYDgcYjweB+Kzq09deCUnP0evkw1BLL3Z3AiAVLJPF5Ks++rkLw4n/R5Qclp3PeuBiyX5sr5XZBGe1lUJr2691ueZLGO83m63cXh4GLrsYtJbJRqPO51OMR6PMRwOMRgMAvFnsxmWy2Uo6elx9d7EyKrCnxjptVzHc7ElPCf58+Ck3xOWpDa+z6stZ8X9FrEMvVp3Ep8v6u5JwJiVPzg4CDp7jrsi6WNNMerWTyYTDIdD9Pt99Pt9jEajlJUnGo1GuLZYPV5LkPw3gJDsyyK9uvjMN2S5+o7dcNI/AzHLpL/Tr/r3+7r16l4ryWezWXipa69Wnp/LnnMlPAdj0L1X114XHFr50WgUCM+uQg7jXK/Xqa4821uv16lxPq+X50l3nwuA3hcb09vkpP1/cPLnw0m/J3aRWb/mac3z3PqYlbeuPQmvCTyNp+nWt1otHBwc4OjoCCcnJzg9PQ3ttGyw0SQej29biEl6TeKxQqBufWyYBj9Xr0+TeLrA6XnYxZDHyNPbO+F3w0n/DMSSR7bunPe3uwivJKBbT7LbcpmSXsU4tPKtVitY+bOzsxTpNZ7XHAVjaI7GyovlNWZXOa9+5WfqdbJmr6VIzf5b6L3N0tw74YvBSb8HipIZKC7FJWLZepJeLbxN4rHZxWbC1cp3u12cnZ0F0h8dHaHdboesvbXy1AHMZrOQwCPhdbFJkiSVD7DjtnQxibnmeu1AWo8Quze8b95Z9/XgpP8A2IfweYk7tXpq5ZX4WhvXxUFJoCU6WvnT09OUlddJuJaYmsRjeS5GeL1+a+FtnkDjdkvqrMqF3hsbCmTV7h274aR/BmIJOc1SFyG8Pqy2XVbjeE3i2cSdZutVz04ZbLvdDrH82dlZyNor4WMddUzi0dKPx+NUHG879Pii2k9LgLVaLYQdMbd91/2xyT+GBE7458NJ/4FgS3ZF3Hng6aHOEuAo6XV4Bi0mCUXo9Bq18pqxz5tmw3OhIGcymYQ4nqGEPR4Hb+oMfO2wy8u8ay4gpgjUch3vl5Leib8/nPTPQN6DluUF6HtjirtY4s6W6XTGflabbLVaDcMvYxl7m7yz58Z4XmW3SnjNHZDgOnxDx23p9eoiZXUEu0ZlqarPDtIA4h6EIxtO+j1gyV7UysTKVUoAWm6bqbelORIvZuVIwmazGery3W4XJycnODk5CXF8lpVXQY6q8DSWtzMAtVuPX20sr403DEcUMfKT3Hr/bN5Df+7YD076ZyJG5Ly/A7JHXenAS510qxtpqKVVQtCqkoAcctntdkPyrtvtBitv953Ta9BY3jbW2N177FhtWw3g56n3opuB6KKjtX0V+dh77CW5DwMn/Z6wVkf/zUYSYLv9M5adt73wJLfW5En82NZZmjiMEd6W6PLKaNo6q+O9Gc/TynORIelZFtTGHV63fqadkW+z+ta1V+ji5Pj6cNLviVhMbltJAURjUx18oZbdEt6693StY7p6Ep472FCE0+v1cH5+Hlx7tfIKXYSYvOMmHiS93bmnWq1ujc4m8VWMw+uipafiTif5AGkprU7f5c9jDTt8n1ZNHMXgpN8DtqwV+wpsz3ZTC5+VmbcNNPr72IhtWlQSkCKc8/NzXFxcoNfr4ezsDN1uN3N3Wqvv1117+v0+hsNhUN8BT1Zey4Fs1aV7zxKdFRfpHD0NAXg9mojkvY6VPFUIFBtJ5tgNJ31BWMuuGWkrg4259XaQZExHb3fB1Vq8Lio6oabRaIRM/dnZGS4vL3F5eYmLiwucnp4GQtohGboQab98v9/H/f19autrlfdS2sv23JOTk7AZJifhaOJOFy5Kb7ko6iIZI3hMA2FDgayQwJENJ30B2IRSLBGnlhhIT7ONWT2bnVdprWa6bSONlspo4Q8PD3F6eoper4fLy0u8evUK5+fnoS5vx1rromU76bgDbr/fx3g8Duo7na3HTTBZGaBrDwDL5TJk3+123kmShHO3UloluF6r/b1aeduP7+QvBid9QWiyzopo1P22C4QuDLFynCW9Tri1dXgSngMxDg4OQqvs+fn5lpU/OjraiuVjmXpa+Pfv3+P29jZsez2dTkOrq80bsDLAJCHdeg2BNHPPRCDwNFarCGKuvRKfYU5M1eeIw0lfANbCx7TwusEjkI6X1cpbwttxV6ql17hW949nPM0sfa/Xw8XFBS4uLnB+fh7IGNubTs+LMlsl/O3tbcrKA0/lwE6nEyS9Z2dnIUnYaDSQJElw46mxt1tvAU+luLymGZssZTLP9upbV98JXwxO+h2wFltd88lkkqql0xVWoYuNbbO65XS7KbWCfMhp5Smv7Xa76PV6gfCarbdyWxXKWMIPBgPc3t7i+voa19fXuLu7C3vdq5WnhecxqeVvtVqoVCqB1LPZLNw3uvi27Tfmvut7bDlUcwF2Uw4n/P5w0u9AlmhFX5PJJDWUksTabDapibVWUqtddCpxJelVzkryaZaeMTwtPBtqtHymijsuXOyeGwwGeP/+Pa6vr/Hu3Tvc3NyEQRm08jwmCa/hQ6fTCVaeWX7VKVgC27jclttipVANF9SVdwv/fBQifRlFEXyQVqtVyGwPBgM8PDyE7DZr2SSxJvhIeGbHbXZe59plNc/wPFQEc3R0hNPT0xDDk/DMorfb7VQcn6W2I+Fvbm7w7t07XF9f4/7+HsPhMJy3ehZnZ2e4uLjA5eUler1eKAVWq0+710yn0615eDYvERunpQo+IN3ppy4+PyPLtXfyF0Mh0pf9Zk4mE7x79w7v378PRLm/v0e/30+JZ5TwmrxTxZ2q8FSXbsmhiSrV0zOmVpeepTm69NbC85iz2Qyj0QjD4TBcx/X1NW5vb3F/fx9m39Eq063XReby8nLLynMRIzG14qDyWd1Gy/bcA9vlTSs5zsr2l/353Bfu3u/AcrnE3d0d/vKXv+D6+hrD4RAPDw9BuMKJsEr4mMyWC4CW47TpBkhvTMF2Vc6qV6Udra0m05TwmiyzSjsm7ZTwdOm5KHGYZrvd3nLrKfhptVohYafjrK2GQVV2JLptw42VN5X0GjKU0ev80Mgl/WQyKeWNVnfys88+w+9//3t8/vnn6Pf7QQ+v02vUNbdqNLsAqGzX1vXV9VXCsyTHDD2tfB7heVy688PhEPf397i9vQ2Ef//+Pfr9fmqcNb2Ler0ePAvmD5i8Y1UAQIjjrX4h5rVQussQhFtfa6KROQddRJn8i5Uz7cuxG7mk7/f7+MMf/oA//vGPaDabKenkSwcFJldXV/jyyy8xHo9TmzXamjyA8DOSWy2WJvlicSoJTwuo7bEk/KtXr/Dq1auQSNMsvSW8tsdSdMP4/ebmBnd3d2GcNRenSqUSPouNO5bwnJXPMppOxNW+AhX0aKmR+gIlPu818x9WdsyvumiqJ+BDNfbDTkv/6aef4tNPPwUAtFqtkNV9yaDbmiQJLi8v8f3vfx+tVis8YOqGazxp3Xv93j6QVkbKQRQqq2XSzlp4JTyTdmotVWX38PCA29tbvHv3DldXV1tlOYYcKnRh8k479ZTw9frfHhur7LMiJV4XgFQikk06XDzUiquKT8t8/Gqn/1riO3Yjl/RJkmA8Hod/z+fzb/yEvgvQ5NHd3V2wUloXpqpME0n68Kqrq1Ci6+RYkr3T6eDo6Cio3s7OznB+fh6+6sx627/OujgJT+v+9u1bvH37Nkp4LQ8y3maJzopw1CUnyazSUNV3KpeloIik5/3kZ2jCkZ+nvQb8PFsBsR2Ibu13I5f0lUoFh4eH4d+tVitaVnqJ4APXbDYxm82CbpwkzWr2sLVmQjPNTGAxbqcrz/hdZa6cb6dbUdneeE3azedzjEYj3N/f4/r6Gl999RXevHmDq6sr3N/fYzAYBHEQyaEuOJtpeA5q4Ul43h+dsqMiJSWr3ThTQxKKetRa8xrUvefCVq/XU3oHO/dfrb1WDRxp7Mze64MbG3f00kFLliRJcEeBp24v61pr3diqz/geS3ZtYLFE59QbxsHMfNuOufV6nZLV3t7e4u3bt/jyyy9xdXWF9+/fYzAYpLaj4nXw3Or1eojlaeEp9tFSoNbRWcHgWC2SnvkB6vU5pJNdf7w3ttSnKkaeoy5Oedt62dKnIw4v2e0AH3AlsNbPaW2ZZWaXmarrtEFEh0+ofp6xM+P1brebin11tLTNeGt77GAwwN3dHa6urvD27duQuONmFbSMQHobKrr1OmaLmXomcXk/tO6vY7U4YYfXzL57Ep7XZK28zd6r9Qaw5ZG0Wq0t70IrKU76fDjpd8DGifow083mA0ypaGw2vIpsNEmnO89QN697xzObb/vhVaqqcTzdehKeHXNKeHV9GW602210u90Qy9OtZ+yttfSYJFnHaqmKkC69SoQZyzMmtzkRvTaiUqlgPp+jVquFUWKTyST0P6hAyq19Ppz0BUHykridTidYLcLW5oGnDjVaUsbtdOXpRisp1I23E2KA9IBN3ZSCbj1lte/fv8dwONzqDeD16DBNrclrdSBWGeDxqO7j1tU6HYfXS9IfHR2FZCA9I3pQqh4EtrvsAITQiQ1PnMdP0uugDid8Ppz0BUDC03rRNWe/uq2Pq5WPjaXWDShIdsa6at3tsEglgSa9LOEpEyYZ1cLr9fDcVM9vBTi2pLZYLFKEJ+lpbYGnhY6k56vT6YTrWi6XuV1y+m9d4HSxUuLHZgk64nDSF4S6wVpW44MMIJWFBp4efpu95otkp3Vn6S5m3W1VgFp+7Za7ubkJQzAGg0GwvjrAQpOJ6tKfn5+nevHZpaeS2uVyubV1NY+jWXudzEuyq6ZAcx12AAbPj+eq8wkYEvD/Qi29ag6c8Plw0u+AltlIFIpMaKU1q8+H08bxOkiSL+vKs5RnS4Hq9uoQDxKe9fibm5sgrWU/vG1S0ck7TNrpAI7j4+MQxwNPsmJt2CHh+/1+yrVnWZOk55RczU8okWP3WcdyUQhm9fzA3xaEdrvtlv4ZcNIXgD6IasWstbftn4zlVXPOF8tZuiuMbgBhLbzKVO2IK/bDa1nOKtp4DVyIWJbjTD3bI6/ZdduD3+/38fDwkGrUYXxuF8fYrjokrk246Y63tNj0UvTf9BKYzNO9AZz0u+GkLwASUON6uux29xgSXoU8LLnRomtG3sbuSnYgPpfeEp5Ju4eHB4zH41StXKfNaHhCC089PwdpsjynMlcSXq38cDgM03KZsef1cJGzyUhelzYcqWek5xnTh/A99AhIdoYXuouOIxtO+oLQeDPm6vMh1y41K7PlA5014w1Iu/JakosRnnr6m5ubMLKaSjslO7PpSnidq9fr9VJuPWNnWniW5QaDAQaDQaj5W8IzV6ALnFUNap1fS2yaXGSfPu+Dberh7+zIMa/VF4OTviC0Tk+Lr/E6y3dKbh0UkTfI0bq56s6TeCT8w8MD7u7ugoXXTL1aeDa6qCCIZTnOuWO2XqWxAELjDLv0dAMMCnGm02kqfFAvxvbKax+CbapRlaf2NGiyj4uGHbKp8wZjE4kdcTjp94Aqw9SCM27XhFyM7Fnxuq1PqzUk4XUuPafW0qUfDochrqa1paVnd5uOytbOOd0MA3iSHVN4MxwOgzvPpB2HbQBIJR91sYtJa7VBhzJaJSrfv16v0Wg0wn3Q+6WzB+2mIC7OKQYn/Q5ock6zy7GxT1wIsghPaEeYWjVr3XWrKd2I4u7uLszoe3x8DKIYDR9UGxBr4LEjspMkCRbYJuysAIdZdb1OvXYlvHbykZSxrjzNQdC9V7mx9RYYgliyO3bDSb8DdDlt8s2W17Trzn4PxPem14dYZ+rREo7H49RATr5IQt0ggyGHVhdo3S3ZbeJR++E5NFMHgLIVV7esZo+7JuA0YUdyM/GmTTo6CViHbgBPI7KtAlGHdPB7O6/AUQw7Sc//ROBvoosyttZqNxzdYbshZJ6rzn/rQ6oEt1tdMZbmdtHD4TC1i6wSkHr/2K43at1V089GISA93suGEfQmWBGghWfoYCsV+pkxwtuZgerx0KJb6H1Ur0g/l/BW2mLwIRoF8L3vfS9kuzl5VseHKXHUJbXuqd3pRptG7Gs8HgfiWwEKR0PTFWb7qqrrbBOPFcgAT+4223LpVXDSL8U33MRSu+fsEBB6Daw2aIecZuvthh5aFdHhHAC2PCINgazIh++PiZscaew1RKPdbqcknS8V1IYnSYLXr1/jhz/8IS4vL3F8fBxeurPLcrlMbR1FoYqdaGO700ajUXixLEZJKWvQSnSNfUk+6ts5Gluz8lQM6jbSdJ/5/6i73TBLz7Ic6/A6Q4/XpUlMG8eT8Ey4xRqRAGx5CTGyaz3fluI0v6JfnfD5yCV9p9PBr371K/z0pz9NJXzKgvV6HeSsbIZRoQ2AkHTTkpI2kvDnzMKPx+PgrtOaWmtOommJyrb22s0kdXsrluFioYi2r/K8dF96Jgc5CFRLZJqw01o8rbyeqybslPSqIYjV5HlPYwNFbautaiL4/2JbkB3byCX96ekpfvGLX+DnP//53+t8vjMgQd68eYMvvvgCj4+PwWXXh5QP82KxCA+xnUxLYU1Mxqpxuibm7IOuyTISXkdj63ZTSviserltkSXhNUuvvfcqsSXBNFywjTnMUdgYnteiGXq669pGq6U+9R70XqhWwklfHDstfdnxgx/8APV6HVdXV0H8ohloFZdovRp4cm8pY1ULbxNzKlRRN9Z2nVnCc9eZy8vLrTHVmlxjQszKeXlOqrSjddb2YN0AgwlD9SC4oDDhp6Os2IwDPG3TxYWEhCbptXSo3o7eD81lsFKhXXxO+nx4yW4HqtUqDg8PcX5+HrLmVKPpgEZNdOkkHVXT0aIyhrfdYbbWrDV+ZudZd9e95bjzTNYQS/U4mFOw3XI6IVfHadGi8vjaMGSnBmkFgqS3O9WQlNZd12SnLWUq4YEnBaBWVZz0xeEbWGZAe7xbrRaOj4+DxWO2m8S37rC2wNoSHGN3KtvoLWi5zzbKUEbLrj6O2GL/uyW7Wnfbncfdbkh2luW4ANGNplehOQSq+xjPazuxJbzmJZh85DmpyCnWTRgr6wFPnlS9Xg89D3YqjyYVHXH4BpY7QNLx4VutVsHCURVGEuumlLpppRI/lpFXsgNPgzfVheUDrvPwY9l5ID1OK2bhSXpV9SnhrbSWJOeiUoTwqrTjteWpGTURaMt0+v5KpZJqdNIhojqxt8zP7C64e78D2lWnCTu6qEpstW5Ket2XXvdp4+frsUg2Eo0POMtyOjxTE3UAUu6x1seV8LGynApvVHSjMwRspp7H22Xh7T20cwXsYA29BqvUAxDCDOT+RagAAA3QSURBVHo92j+g04kd2XDSF4Btl9UHiw+pzVZrok+3adKkHz8bQCphZmNoxq0xRSCQ1rjbqoEOkbS6AB1bzXMi6VXDrxUJjcf5+cxrMIbXJKB6LbwWHa6hugGeh1UyqgIwNnpMF0An/G446XdAFWNWY67xqO0VVzefvyOZqNxj+2uM8NQE6ORdK6HlgsLvVSCj+QSKgajys5Nm2G+vLjjPRa9Xr1MtvCU88JRlp8fCScD8qloHCn9UuGPzG3YmAF37mBbB3ft8OOkLQhtpYi/9GwUtGfvESXD+vcbO6kqr+MXuMMMEIktlauFsndwq/BhqMO6nu06LbNtjbVurehA2S8+EJICtWXn0UmjpbV6EXYL2/vEcGPIo6bNKdU74fDjpC0CtR1ZCqtlsbk1usdZKqyBq3dXC87PoWusxAITYm8S3oYZ2sjHc0K2fNBseawm203i1HJcVw1uX3iYgbcJNp+JSwszFRK21dtxpmU6Hi8asvCMfTvo9ECO8WmXtHddk2Hq9RrPZ3BLc0MVX0jOxZS2Xyltp5fUB13IXyanhhXaz6fnb+X0qLtLefhXNxJJ2hN0bQDfC1B5+KvF4LQxHeC9iE3VsIjC2IYhjN5z0e8Baeq1ft1qtEKuT7NpVFhPdKOHzGkZUpaeTYfRn+ndW1WcXK80XaD9B1gCM2MQblQzHOv60tKhTejhPH0Cw8upBNJtNzOfzEA7pvVL5LxcqJ/z+cNIXhIp1bEmLxGFCipZ6F+ltDM33AulZ7ypHtc0oSv7YMXQxIdF1Hj2Jn9UPr//W8qOdeMNr0E0w2fGn22RpiY4bV9Cb4H3UcVz8fM112AoKUE4B2XPhpH8GlLRMvlHAQ6IpQa3k1FYDstRp2n9vS4EqZNEH3opqeH7MmttdZ2LlP22ltYlBnkusDs8Ynn0B2tevijkeR8k/m81SljxGeivmsR6PE78YnPR7Qi0+SUvy0zJqXZkxvRJfM9IqdNEaOMmnNXDW+2mFSXh1g5MkScXmuj+8SlaZBKPlVIIr4enW68Jj9fCxHWqta2/3xuNnrFarVF4kZukBpLwhIF0m1XDGyb8bTvpnIiuTr8knAKEObttHgacHl5+lDzBdXjtTjoo+1evr52umWzeQpJJPBT6avNOSHJCuBKhXYTsAueDpVl86scc2w9BC85zVW1LyayWEx9IF0o7esufGYzi24aTfE3bgA5DWzDMxZQeOWDeU1lnfr9ZLJ83oQx07tsbUuoUWCX98fJxSr+noLHXr1WW2pLLZdPUkGDpoec56E3os9Ux0odLxW/ScWKLk+3gudr6ghlFu6fPhpC8IS2D7M32ISXgtuVliayZeQQsbe4A1iah1fw0xdLNM69LrsAk7TYfnowuNWng9B8bljOMZPqj4JraHnbW8McGTyn15/7SCUK1WQx8DZcS6u42797vhpN8DGjNmJY80VreKPf2crPfbn+siwn9rfoCLgB0qoQS0JS4SXZtctEFIwwk7qosuOo/JaoDdhVfLf3rPeLyseDx2v9XL0cRep9MJMw5sctGRDSf9nthFfKsmi1l7/Zysh9S6/iSZNqXwd9a111KcjdvpSfD9WhbUkhylulqSY6+A6gvoWWi4oGVHHo8xPH9ue+btEExtT9b4nkq+Wq0WSK/DOz2TvxtO+j2ghLcvIO2uqvpNH1ZaaivLBdLJKj0m58nF5L0qXtHNLrRtVYmtbjI/X0lvZ+oDT+EDycaf8VjqxgNPgy11SrAmMrUMaF/W21Arvl6vQzm0VquFPfX4t+7eF4OTviBsTJ+V0IsJRixhLWlj789aABQ2Jqal1SEXSnaSkJ9tY3m19iypkfD8TM2m6whsIJ1om06nqbIf/4bXQdLbcd+M0a3yT2f9U9bMBSrWV+DIhpP+ayBm4fXf/N6Cf0s3FsBWHkA/M+vz9Ge29k9i0arGtAGEuuGawON5kbBacqQXo9abIhsNGxaLRTTGV9Kz5Zcv3fRDSc1FKEkStFqt4B3omDK39LvhpN8TsfhdXXrCZqAtqWld1QJaia8Sy+YEYuEB/62LifVI7OIR8yZoMTU3wWuymn4lN4+tSkLV9fOaVPSj8wM5PJTf09Kr5JiLh04ijuVVHNlw0u8JSzwlMpAefxWrRzMbT1c75u4zcaby3BjxNRmoZUAtvWn2OxaKaJ1cvQBr0QGkVHJacuSxVEBkZbV2PwBLes7u4wKg/f9arSDxdWHKuj+OOJz0z4C18EpOzYpbV91a/Dx5rq1bx+r9mv1X8ulWUlb/r0RRGTG/8pix6yViOgI9byur1UYZfg7bajnZhxaem23YEdp07dXzsLMIvOOuGJz0BaHucOxla/EAUgSzUDc/VgEoYrXUimvvu2bGVVGnll4Jz3IcqwyqFtRsO+N2OwZM4/9arYbpdJoiu5JeE4z0CNS9Z0aesbzeG9Xha0uz9STc4ufDSb8H8lz7WLJNSaaxu0UsLrWWPObak/C05rTwKlHVOrcq60h4df1JYrX2OllXvQf22tvPpcVVGS9fqr1nHkBn+DGTrxuIxKy6dg2q0tAHYxaDk/4ZKGqJ7d9qjd6+NOGmIQITXzHSa3MOXfhYz71tSNFynT2u5iE0dufCoSGDehm8VpbndCHhVw2B6JWonJblOZ0crHkQCpBU489Zeb6PXXE46fdE1gNlCWSJpVbbfo7+PlaL51f9nu+xijZ7TEvqrEy3Wnn1VLhwaHKQoYKGJlrB0JwFrX6l8tQJaMVAmrSzQ0f4WTpC++joCKenp1u7+/hwzGJw0n8N2Oy5WtLY72MiHX1pmS2rxGarAwqboLPNK/oenosq3ZbLZerc1X3XxSXWKMRwIMu95oKioYjNO2jFgZ+lE3+63S5OTk7CRB5uye272+wHJ/0zESN8jAxqEfMaTbShJCYw0TDAPtQs8SVJEvTxMcku21TtudMtt4uS1cPHMvZcXIAnktrpvrGJvSS+1eDrtVar1dQ+fpzI0+v10Ov1cHp6Grb1ypov6NiGk35PxCy0WkBrfe3fxVzsvGMB2wnEmAvLmJm6dCrp+D2teGwghl24NFcQCzv0HEh4VgBs1l7JyMYbvS+xxYmfy9ZdWvjz83NcXFzg4uIC5+fnYSKPjeed+Plw0n9NxEitv9O/IWIlPibsrAeg7r3tN7efo1aUI7lpcXXghMbk6uJrQlDdeD13Hld3v9Hputpxx8m3KsjhrH5ek1p1Lbnx/ZzGQ8Lr1tzq2rMy4ITfDSf9M2FLdnxo7cAJIpYl3+Xy22SWHseSX0thTJTZkdW0ntPpNJyLhhVKfrX6QLoBSPe5Yxsve/e1p55dfsDTRF0tBdpjaCzPuQAkfK/XC1a+1+vh5ORka0srPUcnfzac9HvCWiZ2mgFIJaHykJfEy9KSqzw3a4ouP5sWmx1zzI5T+ELiq5fAPoAkSYJlVhJZtZ3uNKPDNpWI1CaolefxddHi5hb0bLiYMEtPK9/r9XB2dhbm72Vl7Z3w+XDS7wEbb/LhBxBmusXKYfp9nvWPlfYIJUksO0/QW9BJOCyLcfda7WJrNpuYzWZoNBopUYwq+Ljo2M0oOXePM/HsEEy18nou4/E4tQU3+/eTJAm1+E6ng5OTkzBVV8nO4+jiYu+DIxtO+oKw1p2z2WmZYqOabI09z/W0NXX7OTEXX917/Rzb6aYad5Le7mCrs+Z0IAXwlJXXgZskO4du0soznud50crbBUjVdzwegLCQ6jhtHkPn79nuPU/iFYeTfgdssokWnqUuJXzMylvlnf4shlh4YN+/q/NOE3okG4mtVl571nVYBcMDHlsz87TotLh07e2EXRX9aIlOFxgrt2UCT0MH3ZhDx39ZCx/zqhxxOOkLQuNPPqDcuipWdrJfY5Z+n4czaxGxn2HLiLGWV93CWgkYs/I2lNFtp3Wved0aKxZuqCjH7tSjyUI9lm2o0bp/LJHplr4YnPQFoBaWoJsfK6/Z9xUhu9avs35X5LNsbkAJp1tjqaXVCTRav1fNuxJRd43V7bTzPA9dhPSrCoT0eLp9trb8WqJzgXHCF4eTvgA0g81/67BIIH9HlV2u53Me1rz3xBKDVlJru+asYEevU7vb7D72MSJmnUusNKl5EDvQw75iIZKX6PZHZUeJyYeN/X9kZdr190UevA/1cBbJCRTRBtiBGDYvYYUzMXHQLuJl3btYwhLAlsuuv4sdywmfieiNcUtfEPYhK1KP/yaOXRRZ5OfXGPliXkssh5CXkIyVJGPnlXX/ipLaif58uKUvIfL+z7N0Bgon3EeD6H+Uk97heLmIkt4lTA5HyeCkdzhKBie9w1EyOOkdjpLBSe9wlAxOeoejZHDSOxwlg5Pe4SgZnPQOR8ngpHc4SgYnvcNRMjjpHY6SwUnvcJQMTnqHo2Rw0jscJYOT3uEoGZz0DkfJ4KR3OEoGJ73DUTI46R2OksFJ73CUDE56h6NkcNI7HCWDk97hKBmc9A5HyeCkdzhKBie9w1EyOOkdjpLBSe9wlAxOeoejZHDSOxwlg5Pe4SgZnPQOR8ngpHc4SgYnvcNRMjjpHY6SwUnvcJQMTnqHo2Rw0jscJYOT3uEoGZz0DkfJ4KR3OEoGJ73DUTI46R2OksFJ73CUDE56h6NkcNI7HCWDk97hKBmc9A5HyeCkdzhKBie9w1EyOOkdjpKhvuP3lb/LWTgcjr8b3NI7HCWDk97hKBmc9A5HyeCkdzhKBie9w1EyOOkdjpLh/wHd6U0bQcI2KwAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 17\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 18\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 19\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO19OW9k27ndqmJNLLJIFofu1mAIMGA8+QpwoFyQAMOBlTpTbjhz8iL/A6f+C04u4MyJMkVOJMEC/BJL9yaabt8mm2ORxeJUrHJwvTbXWbVPDex+d+D5FlAgm2SdOuf0Wfub1vft2nQ6RSAQqA7q3/QJBAKBrxdB+kCgYgjSBwIVQ5A+EKgYgvSBQMXQWPD7SO1/hzCdTvHu3Tv85je/we9+9zs0Gg00m008Pj4+63i1Wg2j0Qjf//738ctf/hI/+clP0Ol0PvJZB/4ZUcv9cBHpA98BTKdT1Go11Go1TCYTfP755/j1r3+NdruNTqfzLNLzeOfn5/jkk0/ws5/9DPV6OIYvAUH6F4bpdIq//e1v+POf//zRjvnw8IDRaIRaLWs4At8xxNL9AtFoPK3lH4Oo7XY7CP+CEKR/gVA3XBeAVY/B9zYajSD9C0K49y8cz03iTSYTUKL93GMEvp0IS/8CMZlMvulTCHyLEaR/gYgse2Ae4ukIBCqGIH0gUDEE6QOBiiFIHwhUDEH6QKBiCNIHAhVDkD4QqBiC9IFAxRCkDwQqhiB9IFAxBOlfIEJ7H5iHIP0LRGjvA/MQT0cg8BHxP//PW/zyv/0v/Mf//r9xdn3/TZ9OFtFPHwh8JBxf3eEf/8c/YTyZ4v++u8Texp/wX//Dv/mmT2sGYekDgY+E24dHjCdPA6Svbsff4NmUI0gfCHwk/IvdLv7Tz/8lajXgzVYH//nf/qtv+pSyCPc+EPiI+C///l/jH//dP6DV+Pba02/vmQUC31F8mwkPBOkDgcohSB8IVAxB+kCgYgjSBwIVQ5A+EKgYgvSBQMUQpA8EKoYgfSBQMQTpA4GKIUgfCFQMQfpAoGII0gcCFUOQPhCoGIL0gUDFEKQPBCqGIH0gUDEE6QOBiiFIHwhUDEH6QKBiCNIHAhVDkD4QqBiC9IFAxRCkDwQqhiD9C8Q/x1bV0+l08R8FvhMI0gdKUavV0ld+H/juI0gfCFQMQfoXALXCjUYD9frH+W9lmHB3d4fpdPrRjhv4ZhH/i99hTKdTTCYTjMdjTCYT3Nzc4O3bt7i+vk5/s7a2tvA4dN/11Ww20el0AAAHBwe4vr7G5eUlJpMJHh8f8fj4iOl0GrH+dxCxa+0zoQ/71/Xg+2dOp1OMx2Pc3Nzg4eEBR0dH+O1vf4uLiwu8efMGNzc3GI/HqNVqBYKS2LTcue8bjQa2trbw+vVrfPLJJxgMBvj73/+Ox8dHNBoNNJvN5FXoez/kmp57DH1P5B4WI0j/DJBA+uLPF+FDicHvaXHv7+9xeXmJw8NDfPbZZ/jTn/6E0WiEXq+H6XSK29tbAMDj42M6xtraGtbW1hK519bWCgtBvV5Hp9NBv9/Hj370I/zwhz9Eo9HAxcUFWq0WNjc3sb6+jlarlYivSb9lr+VDoQlG/z5QjiD9ClByTyaTwssXgNyDt+zP9LP03/p6fHzEeDzGaDTC2dkZ3r59i7/85S84OTnB/f19Ii/deyU2rXS73Uar1UKz2UyLQK1WQ6PRwPr6OnZ3d/H69Wv0+310u108Pj7i5uYmEZ3nwc/ya9F/5xau3AKwCmF1kVKPY9XjVA1B+hVBwjOuHY/HGI/HeHx8zNbH3fqs4ooqOfjiZ4/HY9zf32M4HOLk5ARnZ2cYDoe4u7tLMT4tOclQr9fRbDbRarXQ7XbRbrfR7XbTzxqNRnLd19fX0e/3cXBwgO3tbXQ6HTQaDUynUzw8POD29haPj49psVAXP3etfi3+s7L7UrZwKOF53vRggvDzEaRfEk66h4cH3N/fpxeJ75Z+kQs67wF16+6Ev729xeXlJY6Pj3F8fIzBYJDICCBZelrhVquViL6xsYGNjQ10u110Op1k9fna2NjA1tYWdnZ20Ov10Gq1AHwVJtzd3RUIrwlAXpPH+bkFzBOBq+gCarUa1tbW0oLl+YpF97bKCNIvgRzh7+7ucHt7i9FohNvb20R8Wq0c2f3F3+lX/0z9bGbq+fmj0QiDwQAnJyc4Pz/HcDjE/f19Kq+p1avX62i321hfX8fm5iZ6vR56vV4if6fTSeRfX18vLAzr6+vJytOTyFlgzwso+f0+lpE+d4/0M3h/aeF5vrzGslAj8IQg/ZLQ8tj9/T1ubm4wHA4xHA4xGo0SGZz0+nKrOM8q5QhPK0/3+vr6GoPBIBGe9XQet9FoJILSIrbbbXQ6Hayvrydr3uv10O120e12sb6+nl6dTie5/Wtra8m1p6XXF8HFRt1+tfZlpC+7R34v+LeNRgOtVguPj4/p38xVRBlxPoL0S8CTZ7SyV1dXuLy8zMbS+vCq1SsjfU74ouTQHAJd++vra1xdXeH6+jq59bTyfPj5GSQiyUHyd7vdgtWnu9/pdFKCj/dAvQx6Og8PD+m61QLzpffCF7KyGH2eh8B7xbwDCd9utwvhlecJAk8I0i8JWlt1rYfDIa6urjAcDguxdJmbu8ji59xZkoPEenh4SJb+5uYmhRZ84Ms+V7P3BMnS6XSwsbGRLD4tPN/Dz51Op8nLub6+TovNw8NDunZNBuZq+U5gwrPwSnqtkgBfVSKYYyD5y0KGwCyC9Avg1omWlpbu5uYGNzc3yeUF8larzOJ7/OkPO7+6paeFZdVASaTlOp6TegxKClpNdftp5VmW08+hp0Mvg6GNkp6hhFYEcpY7d75Oes9n8DOm0ymazWZaDN1zCJQjSL8CPJmmLxIDQCILXX1aYP/q39dqtRSjuiYgpw3wh31e1luPwTIjcxB0yZ2shLrKk8kkLXq0+PRyuIgxd/Dw8JAV8OgxdYHUMiPDBQ1tdAFbW1srED6wPIL0SyIXj+b+rbFrGQH1d2U1av9ZWRgwD35eSh4SnguGx+KNRiO59iQjj0klIL2d29vbghX2+8Pynp+3hh78N++JXkNugct5OIHlEKRfEe5CutsO5OPTXCyfi+35fmIymRRUdblEof6tegS6IDnpdTFQ91pf7n3w+lWnQNLzb3IVjMlkgmazOVOtcGufq9n7vY+4/cMRpF8B/tC6e0ooiTy+LyO8k1gXAFozuuLuJtP6allPY3Ct22sooIo2Jt3KlG38noRnQpNf6Y5r4o4xut4XvT516xeRWMMdTXIGVkeQ/hlwyWmO9F6nLsveA0VdvP7cY+kysmuM/vDwUPh5jix0qVnrZqbdia+egJYsVZxE4o/H4/QeLiT8We4aeFz+nl7MPEse1v3jIEi/JNzCO5n9d/Ncew0DclZfP9Nj/pxYh0SkKtCz+u5RUL7KbP36+jra7XYiPRcsrx6Q7KxYkPT39/eF+LrRaBRCCb0OXTD5GbVaDQ8PDzNiHoYWuaYmT16ukuuoOoL0z4QTn+WxMld+Xp0+59qXubM57T/FMizl8ZUTwGhtnnJbJ72eDxcZJfxoNEryY9bpaeHr9fqMWk+J7loGlt34PveavHqx7P9NoBxB+hWQy6LnFGRl1n7RAsD3Em7Z1L3W7HmO9Gp5eXxa+Ha7jY2NDWxubs6QXt1xTdpRkERRzmg0mtEnaOZer0F/5vX53D3jueqik3P9y0ROgfkI0j8DZcQv+7eSblF8D8wmrdyNVxksXW0SkOo8egQklsbwbLrZ3NxMzTZeT88RfjgcYjAY4PLyMtXnVe/vGXhCLbSTVr/Xrj3eZ63Ta0JTj5kje5C/HEH6FZEj8yJL7x7BvFjeCZ/rriPJaW01tqYklnVz4IlQ7KOn1p56e9XZa9KNpL+5ucHV1VUiPPsNOKYLeFLJzYMSmOfFBUObdDQHoIIi/Zn/f/D7wGIE6Z+JHLE9oVeW2MuRPoeyjDmbba6vr9MCwPjeCa+xMzX2W1tb2NraSmOv2u12YWyWEo2S28vLS1xcXODi4iIRXkt1XtFQEhNcSHLJuDLSA09CnBzp9ToDyyFIvwLKrPw8d7/sfZ6pVuSsPIUwauEpg6WVZwjAY/BzGMd3u11sbm5ie3u7QHp17YGi6u7m5qZAeHftgadYHphtreXPNCbXqgKAlATlgkVi0xPQmF6rCn5v+e/AfATpnwEnMzCblJpn5XPWHpiNVXOSV2bOaeW1Vk4rqmU6kr7T6STCk/Q5117zCPf396mxZjAYYDAYFFp5+TmaMGSNnuTPuf05eTCvVZuEcgsFjxfW/vkI0i+JXKJIXVmVqpa5/mXWPodcLE+yD4fDRHouCD6nL5et39rawu7uLvr9Pra2ttKcPHXtvZtuNBrh8vIyEV4HhqhEWC08P9cHaAL5uXi5JiJeg2f/cx11kbVfDUH6Z2AZ173sdzlXNJfE83o8Y3lad++lJwmVTMzWd7vdRPjd3V1sb2+XuvYAUl1eB3XQrSfhGUaoC6+DOlTK6/LhnAaBcG/HSU/PYpW6faCIIP2KUIuyKHm3KO7X4znh3cp7eY6EzwlxarWn8VHtdhubm5vY2dlZaOW9/Zak50gwDSV0caHHQgtP4vNay7L6fi8AFNqR1bVXUc+ihpuw+vMRpP8IKLPiuZ87lOzeNOMZe5KdKjh1szVGJuk51XZ7exv9fn/GyqsLznPWeN6rBDqSSxOFzBvoi5ber7HsvrnIyQk/z73X4wUWI0j/gchZ/pyVV6hrqtnonOJOrTwJ7269C150dr1a+Z2dnWTldZMLtZ5Keq0U6DBMV9Xp7D3txdfj6sKk98orGXq/XIKr3sgiTUCgHEH6FZGLQecl+XKE9ySWWjSdSuMuPcnHhcE3kSRxqK/vdrszVt4z9jnLmtPZq1fBayTBOW0nZ+VVTef1die91+n1vPhy1z+wOoL0z0CO+Mu+J/dVXXqtx+d07oyp3c3V8hyltr1er2Dlc269W3k9B1YLdPCmfpaTXsdl89p4TFcKqjzYS5m5e6f3OMj+YQjSL4kc0ZexNv6weoLKCa/TZnWuPklP8uQIry2zm5ub2NraQr/fT8m7jY2N1FjjwiC69czaU2uvn+s5A36WjszW2Xq+7RcXK4Weu5Le5wcEPh6C9CvCiesvd039qxI910hDwlEJpzV5zqLT4RhqMRnHM3m3t7eHvb097OzsFNx6JZeXB+nWc7Q3tQD8POYAfOMMEp+WntenLcAkvTfVuHsPLEd6T5rqzwLlCNKvgBx5PUnl6rQyN14n6nrSjiTXcpkKcAgXxlBbzzh+b28Pu7u7BSvvengt0fkmHpeXl4n0JCHfzxBCe/J1iu50Oi0Qngq+6XSajuFJPV2MdHJPTtcQJH8+gvQrwjPKmqQCnh5ILzPRfdbsvM/PJ+k0gef1cd3UQl1j1uNJ+P39/WTlNzc3C1ZYs+NqjWnhLy4uMBgMkqXXa6NHwb3udGecVquFer1eUPWR8LohBonv4YkulKoByE3/yTU6BZZDkH5JeOnJx0krMYBiKS5Xe/cMvU6i0bq8CnBIJpLPM/VU3b169QoHBwfY29vD1tZWwQp71UD35iPhz8/PC/vjUWLMxJ3mDFj3Z+igCyEXE35Vlz2nyV8kdgLKE39B/OURpF8CORddY1bfOIJxK9+jf+fqOmbInfB050kWjeNJet21lYQ/ODjA69evcXBwMGPlvTyn9XgS/uzsDKenpxgMBoV4ngRrt9vo9XqJ8CwDcpspEty9Go3ntexGeJzvyFl5F/QE8ZdDkH5JaBzvgyhJaHe7AWTltEzUaceckl0tu5IdKNbHtZFmZ2cnEf7Vq1cplqfbrWU0tcS3t7cYDoe4uLjA6ekpjo+PcXZ2hqurK9zc3BQ8C37e9vZ2QezT6XQKO874dfNFt36eos5lu275SXSfNhyEXx5B+iWQq6XTRedLSe9WnpZO6+/61VtkdbpsWW1cXezd3V3s7+/j4OAAr169wv7+fsrYU1+vbr1q60n4k5MTvH//HsfHx7i4uEj1eRJVJb1s3On3+8nKT6fTdP5Uzmm5TuvzTmovHXqZkwsBSa6tu4tkzoFZBOkXQGN5d891KqxPqwFQSGb5mKsc4ekW60gpAIUHnFn6Xq+XCLi3t1eI48vceiYBtZnm4uICx8fHODo6wuHhIU5PT3F5eVnol2fiThcYzRfU6/W06LkST6W7OSuu1tvDKC955sp7i8KCwCyC9AvgKjWOjrq8vEy1bCa7NOvsmXGfesOvXBA0N8D3A8XEoI+8YgxP6763tzeTWNMww0dgDQYDnJyc4PDwEIeHhzg5OcHFxQVGo1HByrMywKrAwcEB+v0+Njc30Ww2ASBdg6vxtMef11OWhNNqh1dF+HdlcX0QfnksRfoqyh75EI3H45lEF18sa2ksCxTDAd/oMWfdGfu6hdOHXOfV93q9VIdXC8+kGqW2ucEYzCkMBgOcnp7i6OgI7969w/v373F2dobhcJisvBJ+Z2cHe3t7hcWFVp4LnoYRqlnQa/Gee3+PLhTaTFSW1Q/Cr46lSF/lmzqdTnF9fY3Dw0O8f/8+xb7n5+fJRffElNbkaeW1TMcavc61yxGeZFe1HV36/f39lKUvIzyAQpWBngoJ//79e7x79w4nJycpecdQhYRkZYBWnvmCXq+XMvbMWXg5UFWDHHWV2zfPFwqV7PrkXPeAAqsj3PsFGI/HOD09xWeffYbDw0MMBoOU6FJNukJJr5s86qYUWt/PtZ2qRXQt/f7+fnLptXvOCa85hZubm0KW/ujoKCXuWJPnAgYgNe7QyqvYZ3t7O2XsSUwlvLv0PkZLm3O8hEfvSKcBAU9bZeWkzVX0RD8Ec0k/Go1KyysvGcwUA8Dnn3+O3//+9/jss89wfn6e3POcOo7QzLXu7uo17EXuvA+0pDs/z6XXGF5n611dXeHs7Cx5Kp6pdxFOs9lMijsmC3XqTqvVQq32tAcdP9PbfbkAUa+vDTra/AOgsBBqZx/vrS4yWt3QV2Ax5pL+4uICf/jDH/DHP/4xSSyrcGNVZPP27Vv89a9/xWAwKGzWmGt4YQZaXWoX8PChdp2+xrxsV1UtPZV2r169wuvXr5Obre2ySp4yd/7w8BDHx8c4OTkpzL1TC6/ehZbnVMPPsdcsz2k4o+VLZtlZddAGHVUJunRXFYh87qgF8MpAbgEIlGOhpf/000/x6aefAgDa7Xba0eQlQ5NT/X4fBwcHaLVaMz3lOvxRhSVKAnfjfS69HosxLlV2VL7R0noMr4TXGJ670gyHQ5yfnxcy9MxLcJQ1FyTgK8LT0usADic8Y3l1yX3XXJLVj8mXnrfLlNUjYkKRC7HKen2H3iD7cphLeiaxCG5u8NKh8ej5+Xkioso+XSTiLi4JTitUVn7SeFetu9fhNab2VlklvIpuzs7OUrLuyy+/xNHREU5PT9Moa22C4TFUB8DPyvXiewOR5yt4jfQc2B9Awnc6nZmBGa7i42Kkbn6z2UzEd/Ui7zOQn2gU+ApzSV+r1bCxsZH+3W63Cw/uSwYfnlarlR5kLTORJGwl1Q4yLTeVKetUZEKyq3WnhVX3ent7G71eL02y9RieiUNa+KOjI3z55Zf44osvCsIbbZflOXHhYYmO0t6trS30er3UtKNJwslkMtNLQHUi7w31+mzBVQ2BuvW8VyS7kp4eVK1Wy+7Wy7/1fEIgj4XZe7V6ucknLx339/cAvnJ93bV3qGvv2XhvH1U5LQdY6ngrEp3Z8rIdZoHiTjjcWfb4+Bjv3r3DF198kcpy2kRD0mqI4sM0uROOE16z7LoJhy8muksuN87kgkWXnVab16FJUG1i0hyBTwf23XqD9PMRJbsFUGutLjDjVFrrsuEZLiqhu6tTbtSVVsLT6ne73UK2W4dQkPA68YYx/JdffpnieCbt1ILyWnTMVs6tJ+E1Uelz9ChH1sYahgokPK18u91GrVYrlORUlOPyXRKZ97bZbBb28+N0YB8HHsgjSL8k+HBqS6uPkOaDqk03wFPbKGvUupkkXXkSnd1xGkdr7K4ehktrr66uCqKbo6OjbNLOPRBeD0uD6l3wOjVJ6YTnSC8lve6us7m5mV7sByCJVbrLa/KMPFCsxzcajdSwlJsfGISfjyD9kmAMzl1j6PJ6R51vL8X36Uw5Nq/oeGq68r6FND0DVa4BKCQLtXmGwhsS/vLyMiXt1LJqTsFbdHd3dwtxfK4UyMGZnOPHkV4s4zF04YSdzc3N5NrrdB1X5BEa5/N3WvuntVcvI1z85RCkXxJOeLq9msjzDjnPyvN9JJe+tASnk250Fjww29evhD85OUlKO+2Jd8LTwqvXoS2z6mVopp5hhM/Ro3yXVl6bgzRjzzIdz0Gluy5w8slDvMdcTBuNRlpscqQPlCNIvwQ0y85EFwmaI726oSQ8LZ5OnKEbzzlzGrerdadr7RoAElDFNyzLDQaD1C2nWXBeDwmvc/XobfR6vUJJTUtzzBtQjszyH7e8YhjDxZFJPCYgmcCjR5Aju7bNakw/nU4LOYP19fUZS+87/gRmEaRfAI97NRbXYZDeFUZieXaeL2bj1ZVX6+7uvJLe22NJ+Pfv3+P09BQXFxfJwufKhSrvpTvvPfJMUmoDjH4mh2eqN6FWnqEMyU7Cczy2X5f3yjM5SpGPKxnr9XqK53WeoIZXgTyC9EvA59GR+LSIKiUlNJGlcS0nx9IKkuxu3X2eXVnzDLX0R0dHOD4+ThZepbWqf2dG3fX8KuvNTbUl4dliTNKrbl97Btrtdnr5zje8Lienip6U4Orm0+uo1Woz+gAlfaAcQfoFYDytDTBq7b2kBTw1l/hseFp9koF7v7l11ykyGr/7EEudeMN23+FwWNicQodVkIy6GQaHcDB5xxo6s/S5OH4wGKQEnotxuNjlwpScRFljcCU8r5safwCF8Mk394xa/fII0i8BzdxrjE5rr1luuqdanmOsrhs9KtFzG1Corp2WVi28Ev7o6Cgl7mh19bw1S++z8VXL3+12UzlNp/fmEncs0WnSkvG8vlRApCU/ldoq6Xnv1MprTkN7P1SRp5uBBOnnI0i/JPhA6gQbik6080z74LVvnF81I6+z4fhwA7PDJNzCq0uvE2/44KvqT2NsJTx3v9Htq5lZJxlZGVALz8SZW3iSlV99Nh/BhKBv4AE8TfrlYtdoNFKGXxcBWvvcMJKo0y9GkH4BNLusAhu67IzXVUBDcutL3XeP1wmP331vOR1TzfZYZtA54kpdea84uC6AmgDNS9ASsw7PTD3ded2rHpjdWisnWLq/v09JQd/GS/vmVd1IN991EBoS6Hht194H8csRpF8SnqRifK4JOR8DpS9vv9WXd+LpmC2STzeiOD09xfn5eUraccQVFyUtybkQiJoA6uBVU6/uPC37+fl5GgDKEqDrENQLUokwz0kXAN3Sy/vmgWLzT06fwPuztraW7bALsi9GkH4BSCCd+kILr3V1dd+95dZ77Z3g+tLtqjWW5nZTmjVnmerx8XFmWIUmG1UExHDEy3IkEHfL5dZWFxcXSWarFQF+ljcQaZmPpPY23LJ2WEK9K/V8VJcPFLP5QfblsZD0mmBqNpuVaq2dTqeFbDctJF1i3ZM9R3JgdmtrWju+6OIyxtUNMTSepnvNabUqRPFpO2zUoVVXxR+tu7vz4/E4WXjdz06n69B91sSjDrrUOXluxX0ijqrrNL/h90wtuL4vt2CoNxW99OWIIRoLUK/X8ebNG3zve9/DmzdvcHBwkEp1Gr8CxZic/+ZXffB1e6t5LybNaNW9Fk3CqH6AJFdXXjv11J2nNfYsvXoUTBDSYqv77VUI9xp0bJhOu3FXXkMivV+6YPhoLG9o8kU3UI6Vhmh0Op1CW+ZLRb1eTw/5D37wA/z4xz/GmzdvCgkwJr+AJzeT32ttXK07yU53mVacFpxk1z5xatr1wQeeMuYU2uhsekpq1bqzuqAZdb6YuGPSjl+1c04XGSUqQxtVJebCFd3EUvv4udOtIjdqrMyFJ9G9MhLEL8dc0ne7XfzqV7/CT3/602TVqhI7qTvZaDQKsbC2m9KyMdOcIzwfeiblBoNBkrKS9LrNlWakfcMHrYVz0o7W3XOZeVp319K70s4baFiW0zien60CIy098rx9vz/fapsLhrr4AFKfPRfK3CBR/p0uHCp0CtLPx1zS7+zs4Be/+AV+/vOff13n860BH2LOl2PZSWNXADMWKJetVteZGXESnplxJbs37gDF2fHcTJJxu87Q0yGWWkb0nn+dlssWWS3LUXjjwytUXqszBVzQo9tu50Q4Tnh11zUJqIIbQi27Jll1olCQvhwLLX3VQTHO2dlZYVCjW2NVgtEqaZ2dxKJunSQjwfwB9/iZ37M9V3e60Z1nNH53K+xyXlp4r8PrOC0lvFYwcjPrNYTxUVZ6TVw4talGE8SeA3DSay6AZUmel4YwgTyiZLcAa2tr6Ha7Beujkk8d0KhxspLL42Wve+daQlUQxAecZTgl/MHBQeqDZwhC60fCawlNa//aLccsvdfh+fkqKXarqr32DFF0jJXuAqRVA83S6/Wrx8NFlfA2Zx2r7eFGII/YwLIE+tBwq2aSgA+hjpvWGFhVZyS9Ju9ICIpqvDNM23n5gCvhKaOlO6+bXlDb79ZdJ95oP7y3x1LbPq+PgJ+hNXklPEt8mhOg4s4HeQBPz5cq7dS913ZaLkI8FyYxPVkZpC9HbGC5ACQdQSEMLRIfcq2fM3FFYjMLrm2g6hkARcuuCTMlvI6z8pHYOsWHsTstKD0OhhmaSNT2WC5mFCRp7Kx98TkRjk6o1dKi5gXUa/ESm1p5zf7rgsGvuhkIm55UXRju/XyEe78AXkume0pC6QhoSmK184tkUK15bjglUGzqUbkvG3t04o5adm9dZWutynld7EMLzwVJm2d4LiS/Zse1Hl9GeHXPNVmnZT5tLdZOPC/7qWfgOwDpjAK/F1U2VIsQpF8ArU27ZeJDr66tb8JAoucaS4DizjI8Pl1p3RWGVk3JrjoBFc8o4bkosXmGmgDP0gNPWXESzF+8dq3v5wZZ6P4I3pasQ0XpjgNP8+9UaqtlOj2OLoRMXIZrvzyC9PhbZrEAAA03SURBVEuAliPXAKJlMN2Zhf9W91SHRPABpiehCSq+lPTs5vMGGW7Gwd1jc4sRrTy9EbbGatJOxS3akqsLARcTxvC+6YQm7fR+aT6AW1pxWIcODOH90peGBrp5ho4b0/AmXPvFCNIvAdd0u74eQMEqed1em1M4CYbHKFO40aJpTVzHcpHs4/E4PexaKnQr7NaYSTP1YnQWAL/X61PC62w69WbUHdcdcH0fO90TTxV/AGaSmsDTyDLN2nvyUv9fwtqXI0i/InwBcOKy7ZNKPuBpnLPH8UoyJT0fbt0NR3XtANLnqPbfB2+Q+GVtrEpubwvWOFt1CV6Wy7n0tO5K0I2NjYKiUb0Vlv0ogFJ1noY/8zodQ367PIL0K8Az7GoVmZRikk4TgNoNpp6CD93Qf2uNHCh2rgEokF0FQSpf9T3huOh4Uk0XGFUcujJO6/yqMdA6vMfd3LZLZcxcxOg1AEg73aiUWe+VKvBcIBSEXw1B+iWhhFfSMxN9e3uLVqtVcJnL1GSeKPMBFKpFd5WfzprzFlRNfrlW3SsDjLN9bp8nKXkOTni18GWE5/AO3aaLn0W3nqq8+/v7tBioB8QFlPdZcx6eYAwshyD9isi59CSRKtl8ZpsSQ8tPPn1Grbfq5PWrv7SFl+fI89AFxVV1vrkGY2ztfSc5XVqrqkR+lspiqSnQDTSYcNO8BMVOd3d36T4+PDwkwjMJqg01uq9fkH11BOmfAS/j0e3UujR/56TXXIC78VprVyUdCaiudm5B0eYV5hNUXMMkGuNhusqa9eaIKxI+1zHnwhut6es8Pt2jT2fx8XNo5e/u7goW/O7uriA00nvtMlsfUlJF9eiqCNJ/AHIWn6TXqbS5kVA6MIKWj/9mwk770dmUQ/JrWQsoymZpTXPZbm624TEx8DS1tozwWpZz4Y2WGHW769yW1/Qe+NU3/Gi32zP3S8MPTVzm5ufrfQ3MIki/JHIWRC2rWiMv2T0+PhaIDSDV6r3UR7deCa/xs4575nvKEoxq1Uk8Jb223WqiUduCdQiGhxPejKNyYQpncgk8ftZ4PC6o/XgcLngACouaVyl80EYMx1wOQfoVoS5kzmX3zLPPFFQ3lIuB/k4Vad5eyrKYegW5xKLvrKN757FWrnvL0arzmFxUlPTe8qvSWt+kU5tgdOsujcFz2gB/ae3erbuem5Yig/CLEaRfAbn40eNIJYQSXonuAzIUGs9rzO7KNJ8zp51n8/bPUwtPEpIw2srq+vmcxkAJzwWGi41O7KFbnlPL+aLlL2+/XVtbS3oBzTHkzjWQR5D+GchpxHNQK67DIrzc5sf2n2nI4EIfzSdwhBYJr0TXDjSSzysEmizUaTf62VpWVMEMP0d77fm3XnLU++DW2RV1Xp5kkk8n8+SsfRC/HEH6FVBm3XMPmbul/v5lHk6Wqlj7p4X3bL3G1bovvCbq3D1WHYAKb7RZyKfdjMdjtFqtQkY9Vzt3NR+TmtqroN6Ex+RajlQVIoBE+Ha7XdD856oZgTyC9EtC4/icOKbMxWdZSmP9HFz8o9l9EkXPg3+rpSwfWKlTakg04KksBzwNydQsvar4uNhwnzsv05WNzuIx6aVo4lKHcqpn4VN/vYFpOp2mUh4FUTp5KFclCcwiSL8EPHHn2XagSHR9Hx94kl9VZmpJgacMtR5H3VxFWSzM0pfKd5Xs7t5r/7pWClRvwHPWPAV/50o+klkXHIptuADo/EB307V5x6sGvJ5arVb4O58tGJiPIP2KWJS5589y0Pq9P6Qq0NGY2WNc/Ux+72VDko1k0Djcj6X5CR9cQSvfbrcLbcEe4wNPOn1d9PgzjfH5mcwfcJyYziPQwSO5Sbr1en3GM/BwK1COIP0zkSvTKWn9RcLz31oi02O6JNeJn1tQPCuuFYB556/QkIUE08w7F6qcRdXP0ho/Y+9cYs8beLTXX0mvoQaA1NTkYhz/fwmUI0i/InIWXS2eZqspw8254ZqU89o3E2dq8TUf4C6/E1ZLcGVJQ/2sXGjCa2EMre/zYRcaf9/f3xdag72hh/dHFwYdHuqTdHWR4WKp90zvazTeLIcg/RLIZeJJELXMAGYsoFp29QhIHBfveHupewsKTyqqi676fCWKkoWLizf+6HXzszX3QLJTSqu5CZclMzzQ2J+5AY3rdYefnJVXUY/mGnTH4CD+cgjSrwi1jEpQ19IrCVShpz/TphM/vn/v8Nq3Zro13s3tmKPnwKSf9vLzPPX4fL+qA31irSb/tKKgcb2XCjWGz40Gd++krK/ed7cJ4pcjSL8kcom0HKmd9EykEZ5kogeQSz5pplytHY9DEmqDTpnIJkd6LjhsFNLKgjYKuSRYs+paz/eFrtVqFRYjH67JTL8SP7cXgC4k2lPg03iit345BOlXRM4K+/f6leTxRYI/U4WdEofH8JIeQUJow0lORqtuvpKIVlPLirS+Shrv59dFJdfTrwR1DYNq6XXeHonPvQDKBopSeMSmntzc/7DyixGkXwG52B7AzMOtP/ckmv9NbjIO/y5Xv+fnO1lVyaZJPZe8EpoUm0wmKc/grn3OneeioolDHlOTnFzQKMxRaEyvtXZ16XnNFB35Lr06nEPn5OX+jwJPCNJ/AJTs3t+uf6O/y5XGSK6yxSPXbcZj63kAswIfDTv0fHxR0Pf679SD8MqAw72f3PkyHPH96ly3UKvVsn363LtPt/OKWXnLI0j/DCg5c8kuJ6OXtsqaTuaV1+bV6jVGp/Wn664EZ9acf1N2bZoc1K96PP9sz9zrWCudduOlvlyTTBnh+/0+dnd3sbe3h93dXWxvb2NzczPF86ppCJQjSP9MKEm9QUR/r0RRdzonLCkLARRauuK/ldSqWHMC6JhqXWx0sdLrKPNAdPFhHK1ZdR/hzThfLT3h5T4en8dQC7+3t4eDgwPs7++j3+9HPP9MBOlXQFnczq8ek/uLcJdbf87kVZml9zq+CnW0fk7C3d3doV6vp1HTwFNVICe/Vcuec+M1UcdzURGOblflG0pqpUKFR3rf+PccBKKbdh4cHKStuWnldT6A5w0CeQTpPwC5kh2Rc/P5wPMh15n4HuerVQVQILoKVJT4XrPnwMnb29uC+zudftWXnovfNaHGYxKepNOuPt+ySq0vE3os93ncrYugluU2Njawvb2N/f197O3tpa+7u7tpD7tcfT4s/nwE6VeA1+d1PNV0Ok2JKYe77TkvoCzL76U+l53mrL2SnrXv0WhUkMIqMZT4eo1cqAiN1ZXorJVrzTzXfed1ed47dvUBTzvZcJMMjeGZvOO8v9zAjiD7YgTpV4C62DrIEUDqQHNLre915LLv+tVLdq7Lz8lzdRIOa+BsZOFLB1AoAXXSrraz8ppz47E4+JJfc/319B50fz1+rnbRsTzX6XTSGO1+v49+v1/Yoltn70XWfnUE6ZeEJq5I+G63i1qthna7nR5sYNY1V8x7OMtKYLkSnBJeLbZaVd25loQfDoepldU72nTSbq6FVglPkuvE27Ipu6q+U0uvyj5+TrPZTFN1uR3W9vZ24fi08PQmylqQA3kE6RfAk2iaVeZD6vpzfa8eI/f9os/2c8gtAoSX22i5nfjX19fJ5XcClklgVSDDgZskO2vluaSakt5HeuvEGwDZybo654+WXcnuswKWua9VR5B+SZBklIPS6nc6ndISnD+Ebo3mPZy5WvyihcN1AU58bWzxLap09xytxetCx5p52eDNsg0peC4qD/aeAF1UfYtut+q5CkYQfnkE6ZeAZ+bV+uUsvP7dvK/+fdlnzzumI6cfUHdfFwCdG1/WmOOkz+2Dl3Oz9Xxy6j6XBuuiqgnDnEX3r3x/EH451OYJQQDE3KH/j5x8dR7hiTLS5n63CMv8fU5uq800rqNn4k5r87S8WpPXnWickG5xNcew7L3zqkhulkDOUwoLPxfZmxKkXxJl5Tb9XQ6ruPAfE35+85pwyhawXKlQv6q1LQs3/Hzm3bey3MUiDykIX4rsjQn3fkn4Q7ZgsfxazsORO6dlNALzFq95RFzVyvoiMO/6FpE6iP58hKWvGMr+vxeRcNmfB75VCPc+EKgYsqSPDoVAoGII0gcCFUOQPhCoGIL0gUDFEKQPBCqGIH0gUDEE6QOBiiFIHwhUDEH6QKBiCNIHAhVDkD4QqBiC9IFAxRCkDwQqhiB9IFAxBOkDgYohSB8IVAxB+kCgYgjSBwIVQ5A+EKgYgvSBQMUQpA8EKoYgfSBQMQTpA4GKIUgfCFQMQfpAoGII0gcCFUOQPhCoGIL0gUDFEKQPBCqGIH0gUDEE6QOBiiFIHwhUDEH6QKBiCNIHAhVDkD4QqBiC9IFAxRCkDwQqhiB9IFAxBOkDgYohSB8IVAxB+kCgYgjSBwIVQ5A+EKgYgvSBQMUQpA8EKoYgfSBQMQTpA4GKIUgfCFQMQfpAoGII0gcCFUOQPhCoGIL0gUDF0Fjw+9rXchaBQOBrQ1j6QKBiCNIHAhVDkD4QqBiC9IFAxRCkDwQqhiB9IFAx/D9Z/OAmPGj9/AAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 20\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 21\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 22\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 23\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 24\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 25\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 26\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 27\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 28\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 29\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 30\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 31\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 33\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO19S28jWZrdoSS+3xJFUc/UI7OqegbwYoABZjPoAQwv3FvvZm94541X/gfe+i9404B33sxuVt7MAG6ge6qm8llVXcqUKIl6UOJDJEWJXhTO1YmrICUyc7q6Mr4DEFKlyGBEVJz7vc733dhoNILBYIgO5n7uEzAYDH9aGOkNhojBSG8wRAxGeoMhYjDSGwwRw8Ijf7fU/i8Io9EI9Xod//iP/4h//ud/xsLCAuLxOG5vb2c6XiwWQ7fbxdraGn7zm9/gL//yL5FKpT7xWRv+DREL+8fHSG/4BWA0GiEWiyEWi+Hu7g5v3rzBP/zDPyCZTCKVSs1Eeh7v4uICf/EXf4G//du/xdycOYafA4z0nxlGoxH29/fxww8/fLJj3tzcoNvtIhYLNRyGXxhs6f4MsbBwv5Z/CqImk0kj/GcEI/1nCHXDdQGY9hj87MLCgpH+M4K59585Zk3i3d3dgRLtWY9h+POEWfrPEHd3dz/3KRj+jGGk/wxhWXbDJNjTYTBEDEZ6gyFiMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSG8wRAxGeoMhYjDSf4Yw7b1hEoz0nyFMe2+YBHs6DIZPiP/z+wP85n/+X/zn//X/cN4Z/NynEwrrpzcYPhEarT7+2//+A4Z3I3xbv8JS9hX+x3/6dz/3aT2AWXqD4ROhd3OL4d39AOlWb/gzns14GOkNhk+EzcUM/suvdxGLAbVCCv/137/4uU8pFObeGwyfEP/9P/4K/+0/fInEwp+vPf3zPTOD4ReKP2fCA0Z6gyFyMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSG8wRAxGeoMhYjDSGwwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWIw0hsMEYOR3mCIGIz0BkPEYKQ3GCIGI73BEDEY6Q2GiMFI/xni32Kr6tFo9PibDL8IGOkNjyIWiyEWi/3cp2H4RDDSGwwRg5H+M4Ba4YWFBczNfdr/rf1+H8Ph0Kz9ZwIj/WcAxvC9Xg8HBwfodDqf5LgkebVaxXA4RLfbdX+zGP+XC9u19jPA7e2tI/w//dM/4ejoCLlcDt1udyZykuyJRALb29v467/+a4xGI1xeXiKVSmF+fv6TexOGPx2M9L9w3N3dYTgc4vz8HG/fvsWrV6/QbDaRSqUwGAxwc3Mz8fNM0s3NzQV+n5+fRz6fx87ODvb29lAsFnF3d4fBYIBkMukWBnP5f3kw0n8i/CndXX7XaDTC7e0t+v0+zs7O8P79e9TrdXQ6Hdze3k48Bok9Pz+PhYUFLCwsIB6PY35+HvF4HMlkEktLS9je3sbGxgYWFxeRSCQwGo3cSzGJ/I/dm9Fo9FGLhy0808FI/5FQEvAV9hB+zIOppOF33N3dOcvbbDZxcnKCo6MjNJtNXF9fO9L73xuLxRzZ4/E4UqkU0um0eyWTSSQSCWSzWVSrVezu7mJlZQX5fB6JRAJzc3Pu+/l7LBYLJbb/b7pYhf192vtEz0RfhsdhpP8IkHi3t7e4vb0NiGL0IRznCoc9pJOIomS/vb3Fzc0NOp0OTk5O8P79exweHqLVauHm5gZ3d3fOVed5zc3NOQufTCaRTqeRz+dRKBSQz+eRy+WQSqWQSqWQy+WwsrKCtbU1FAqFB4Tnz0kIW6z0OsaRftz98t+v3sr8/LyR/okw0s8Ikm84HGIwGGAwGOD29tZZvkkv4GnucBhR9Dt7vR4uLy9xeHiIg4MDnJ6e4vr6+sHiMz8/736fm5tDIpFwxC6VSiiXyygWi8hms8hkMshkMigUClhZWcHi4iLS6fQDwuu5jnP5/ffw/PWln/FzC3qP/HvC66JnYtb+6TDSzwA+sDc3N+j3+7i+vsb19TVubm4wGo2cReVDrL9PIn+Y++uTRReZdruN8/Nz1Ot1nJ6eotvtunq6fqcuRAsLC5ifn3fET6fTyGQyyGazKBQKyGQyyOfzKJVKWFxcRC6Xw8LCT48JFzW9B8Ph0Hk5/Jt/jb6H4n+G58d7pfdM77l6F1y8hsMhALiKgpH+cRjppwQfPBK+0+mg3W6j0+kESM+HkD/9h3mcZVKL6bvSJMxgMMD19TVarRYuLi7QbDYfEJ7ffXt7G1hg/HPSBSCTyaBYLDrrXyqVkMlkMD8/j9Fo5AjG0GIwGKDf7+Pm5gbD4TCUvPxuDYOGw6Ejvi5I6qrrZ5mw1IVlYWEBqVQKABCPx5FIJLCwsPDRScEowEg/BZR8g8EA3W4XrVYLV1dXAdL7Dy+tq5JNCa81b3XNx5FevYter+dCi1gshng8jng8jn6/79x6/o3f47vjc3NzSKVSAQtfLpdRKBSQTqcxPz8fsNS89k6ng06ng16v5/IIvF6tBjDRx8WC18Fr85OLGqPz2nWRmJubQzKZxGg0QjKZfLAgGCbDSD8l+AD2+310u1202+2ApecDTKIvLCxgOBw+WAjU/QYQsGr86cfz6hrri5/XxSUejzuikrR6DRpT02rm83mUy2UsLi66GD+ZTLrFg9fd6XRweXmJZrOJy8tLtNttDAYDdyxWBZLJpDsnvXd88Zy0dKifIen5/sFgAOAnK393d4dEImGEnwFG+ilAAtJi9Xo99Ho99Pt9DAYD5/7SzdSYVcnLv/vxtv9dj0EtpFrXhYWFgEs/ruTH715YWEA6nUahUECpVEKxWHSZfB6LC0y/30e73cbFxQUajQbOzs7QarXQ7/cB/ETgdDrtwoVEIoF4PB6w9r5rz0WKOgBeA8+XhKc3QW9AFw7D02GknwE+ofkAzxJPjkvs+UTV93DhUMs+LpHlhwj6dxKemfxCoYBCoYBcLodMJoN4PP4ga39zc4Nut4vLy0ucnZ2h0Wjg6urKkT6RSLjk4GAwQCqVelDuI/EBuAULCJbgGJKod8DQAEBg4TArPx2M9DNCycoH1U9k+e78pMSe7+YrdHGhxby5uQkc339fWClNf/K8xxGebrZaeVpdJhHPz89xfn6Oq6srDAYDxGIxJBKJQPlyOBwilUq5cyTpuQDxvoWFJGHhjSYEjfCzwUg/A3yNusatGtP7ljgsrg8r5/nwvQif7CrWIeHoCtMy8vO6MCWTSWSzWZetLxQKyGazSKVSzsr7n1VL32w20Ww20Wq1XOWALjqvjZ/XuF5Lf7TyzH3E4/HA9Y7LbRjhZ4eRfkb41pxW0U/kTSK8uuRPIT2AgIuuSUXNL/T7ffc3/ayGEAsLC8hkMiiVSqhUKlhcXHTZepa/6F7TNR8Oh+j1emi1Wo7wTOTxfZq0ZG+/5i+0/MZMPwBn6WnFVU3oqx59D8YwHYz0U8Cvr08i/WPWPczaj1OiqShFS1gs3XU6HbRaLXQ6HVxfX7sYWMnhEz6dTqNYLKJaraJSqaBUKo218gCczp+CoLOzM1xcXLh4ni458FNcn0gkAmVDEpjxPM9JPQP1jsLKdSS9X40wJd50MNLPACW9Ep9/G0f4sHh+Eul9S+YrAbvdLq6urpzFbbVarmaudXA9Ds8vk8lgcXERlUoFS0tLKBQKLluvpNNkWrfbRbPZxNnZGU5PT9FsNl2pEoDLurOSwRevzy/X0TOg90LSq36B363XpPG+YXoY6WeEb+m14WOShffluWGk96F1dZYK2+02Li8vcXFx4Sxut9t15UO+3wf16vl8HpVKBSsrKyiVSkin0460YYnBXq+Hq6srNBoNHB8f4+LiAu1223X08dzVw1CpLgDc3Ny4l4qJuACwFMfvJ7n1c9QCjLs+w+Mw0s+AMEu/sLAQiEUnxe8kVlgiT6HkobXr9XpOHEOLyww69f9hOnWe99zcHNLpNJaWllCtVrG0tIR8Pu+y9TwPWlEq8FqtFhqNBur1OhqNhrPyJDld7jDrq9oG1TTEYjG3QPl5EB6TpGe/AasJvLZJi6UhHEb6KTEurlcp7aQs/VNKdn6ZjbGwuvTn5+c4PT1Fo9HAxcWFE8jQBfaHaPC7k8mki+V9K6/eCnCfKLy+vsbFxQXq9ToODw9xenqKdrvtYnk9b/0u9Rq0utDr9dz5MSwi4XkeKmJScY56B2H/bwyPw0g/I8KsPf99EuHHkX5SAk9lvyR8o9HAyckJzs/PXSxPq+nX4wG4RFkul0OlUkGtVkO1WkWhUAjU5HXRYfLu6uoKx8fH+PDhA+r1eqDBR0trwH0Wni9aa54PE3IqqZ2fn0e/30cikUCv13tg6TWmZ6lRy36+4MgwGUb6GeFbe9+FniTGGUd6wieJxvEXFxc4OTnByckJTk9PcXl5iW6369z6cX3qFOKUy2Wsr69jY2MDlUoF2WzWKebUW1EhzsXFBQ4PD52VZ/JOZcd+sw0z+PF43L1PCay1dsbz/X5/rKXnZ5goVNLzGg1Pg5F+Bmj5S4nPf3tKtj7MtQfwwK1XK395eYnT09OJbr3f187ziMfjKBQKWF1dxfb2NtbX11Eul5FOp0Nn5TNp2Ol00Gg0cHBwgKOjI/d9/sBNXo+O4FIPgpbdVw0yRlepLd9LT0JJzyYbn/SGp8NI/5EIi/HDsvPTWnltY6Ug5uLiwundJ7n1Clpfzrzb2dnBzs4OarUacrkcEolEqJT37u4O/X4fl5eXOD4+xuHhIS4uLpxX4bvWJHwymXSkT6VSzvX3E5W+UEd77bmgaLmQCwAAtwBoPsHwdBjpPwK+xQ9T1z2lJu/X5Uk6ZrtZniPhz87OHnXr1eNIpVJYWlrCzs4OXrx4ga2trVArr/E8E4fNZhPHx8c4PT11ctuwKTlzc3Ou2SabzTrSA3DZ+TBy+l6On4RkXkHDAT88MEwHI/0nQtgCMI7gYeU5IGj9dEIOY/nT01OcnZ2h2Wy6HvZJbj2TXoVCAevr63jx4gX29vZQrVaRy+Wc8i6sVMh4nlWCy8tLp/bzVX4kfCKRcKO3SHouHnp//J9+h6CqD1XQw+/0Fx49nuFxGOk/AmFWZhLJfVc+zMLTzdXkXbPZdIRnHK9ufVh8Sz1AOp1GtVrF8+fP8fz5czfd1q/L++cxHA7R6XRcSKE1+bDSHAnPF+W8wH1ZTqECnLDWYJXsatJwbm4uIOU1TA8j/Qx4ysPmkzxMQKLHUfWaWngm7xqNxgOLG6ZK0+RdIpFAqVTC1tYWnj9/js3NTTfd1ie8npPq7DmDj7V137oyZ5BKpZDNZt3wjWQy6Qga1iTjlzGZ9VdxkC6CdPn9zkHD9DDSzwh9iMd1so1Ti6lFBR4SnmO4lPB06zudjsueh5XngGDyrlarYWdnB9vb26hWq8hms2PdekJlt/Qs6FUQvC6WArPZrHtxUVEprp9x5+c57YcSYE7Z8RuM+N/j+gkMT4eR/iMRlkzyy1/+e/Wh9gmv9Xjq3E9OTtxYql6v98DNJjQ+ppXf2NjA9vY2VldX3aYV45JqWibsdrtO199utx9k7LmwMFuvI7Q5V49uOaW3OvkGuB9brcTXUEBdfX+hnBQuGSbDSD8Dwqy8/1CGfcb/qXGrEr7ZbKLRaODw8BD1eh3Hx8c4Pz9Hp9N5UvIuHo8jl8theXkZm5ub2NjYeJCtV49Er4GJt1arhdPTU1xcXKDX64Vaebr1hUIBxWLRkV5FNX6vvzbbqKVXUQ8z9ATDBH63fx5G9ulgpJ8SSlr/pZZJLZa68equ0hLqHPtms4nz83McHR050p+dnaHdbjsr75MduI+RWaIrl8vY3NzE9vY2VlZWAtn6sOvh77Ty5+fnrpvO19jHYj/1wbNbTyfvcCtrbf/l6/r62oUJTPLR0vN42rhDj8TPjYQl/oz4T4eRfgaogMWvF/sk0r+Fkb3X67n5+exV52aUx8fHribPDrqwTL0mxUhEKu/W1tZQLpcdGcflGOjW93o9NJtN9/1XV1eBchkAR1ISfmlpyXXrpVKpQMlPNwPRRhsuPtqRSGuvpPeJH9bBaISfDkb6KeBbed9yq6SW/62JJ39nGE3YaR2emXq/T94f+azEYU0+n89jZWUF29vbzso/lrzzM/Zsrjk+PnaCHP2eeDyObDaLcrmM5eVlrKysONKzeebm5sZVIHRTDC4e6gnxmCT97e1t6KQhAO49/lxCw9NhpJ8SSnjNTCvJ/TKaEp4jrtrttsuOUwCjtXjumkMLz0SaXyngQpNMJl0cv729HSjRqZUPux56H91uF6enp9jf38ePP/6I09NTR1QgWBUolUpYWVnBxsYGarUalpaWXPcb43ffynNDDLbGUp6rCT0dr+UrGpkD8IeOWlw/HYz0U8J37f3xT5qg8i08iaCuPMtxOgyDE2k04x0mfQ0j/O7uLr766ivs7e09iOWVGBpy0BU/OzvD/v4+vv/+e7x//z7g2pN4qVQKxWIRtVoNGxsb2NjYcN8Ti8XQ7XYxGo1c6ZGxPD0VnndYJYDf4S8G9Az8ur4f1xueBiP9lFCZrD/+aW5u7sHUGrrNJLw/AIM98bTu3J8ubLgloUSJx+PI5/OoVqvY3t7Gr371K3z55ZfY2NhAqVRyc+98jbvG8dfX12g2mzg8PMTbt2/x3XffodFouJ55AAHCV6tVbG1tYWdnx3XrJRIJdy/YrMP99jRrr8TmcfXF69Nr1f565hNUzGOYDkb6J8K38CQyH2rtJ+fDzdKT7v/GRB3jdibqOp2OI5kKb/jdQNCd151pGMN/9dVX+PLLL/Hs2TMsLS0FYnm9DgCBxN3l5SUODg7w5s0bvHnzBh8+fHAbWPB7E4mE8yaePXuG3d1dPHv2DMvLy8hkMgDgwhYudFqmC5PN+u3F/DluKo4m+7T0aJZ+Ohjpp4AmvDirjmOj6JL6GzYOBoMA4RuNhnuFJep85Zo/504Jn8/nUavVsLu7iy+//NIRfnl5Gfl8/oEQxyc8W2dJ+G+//Rbff/89Go0Grq+v3XdzRv7S0hI2Njawu7uLnZ0dp+PnoAz1dijIoa4gTLOvsbyWOzVX4st2NXuv7r0R/+kw0j8RdOtZU2fGXfdx09gUgEuOXV1d4ezszFn58/Nz1ykXZt3HTXlVTX0ul0OtVsPz58/x1Vdf4YsvvsDW1pYjvA6w4PkDDy384eEh3rx5g2+++QavX7/G0dFRoGde3fq1tTXXuLOxseGShADcfYnF7rfB0iGdzNr7iTu66trPr3kSf2deP9Y3TI8nkT7KjQ3q0lOPfnp66uSx1KUD9+UkPvi6w+vZ2ZmL3Vl31045zQWExe9aLqOF39vbcy49CZ/L5UIJr1l6n/Bff/01Xr58iYODA1xeXgbCFS4wDCH29vYCo7b8ujqAwKQbLWdq9j2ZTCKZTIbuYc8Fww8L/DDHMBueRPoo3+DRaBTYyun4+Bjv37938+LoBvtWnq2plNU2m02XmaclnTTXDsCDWJd1eCbt1KWvVCoBwod1q9HzOD8/d4T/9ttv8erVK0d4Sm75nRyXzU499SY4W48DKwEEJuDojjQAAnvXc5yWnq/2IPDFe+RrHvz/R1E2TNPC3PtH0O/3cXx8jD/+8Y+o1+uo1+v48OFDoMdcLRgfXpXWtttttFotl/SjJR1n3YEg4am0y2azqFQqLmn3xRdfYHNzM5TwwMM5e+12G2dnZ3j//r0j/Lt371Cv113iTmf3JxIJN1dvd3fXEV7ltsB93kG/S+fhqzvPyTrahktJrk4L4othBu+xttqOWywNkzGR9N1uN5I3lbEsALx79w6/+93v8PbtWxwdHbl4vNPpuIdd1WR07ZnsoxSVD3BY7O6780Bwg0ytw+/t7bmyHJN2kwhPd55jrP/4xz/i1atXeP36tUvatVqtQAcck5GZTAaVSgVbW1uuU49lQL8FVgnrD70g8blwFQoF5PP5B224et+Y+dfQSafo8OX36xsex0TSN5tN/O53v8PLly+dKxeFG0vS393dYX9/H999952L3+maM1OtmzTw/lCcoi9NTo2L3YGgjl7LcrVazbn0X331Fba3tx8k7ZTwvjtfr9fx7t07vHz5Eq9fv8b+/v7YQZcs0RWLRWxsbLhMPTv1/Hn2auF9IQ7vC+fnlUol9+IEHwDuHrEUStLTY2CYoF6AL14yPA2PWvrf/va3+O1vfwsASCaTD0Yff45QkU0ul0M2m0UsFgtk2bVmzgebRNBklJ/FDpv64sfujH1V7rq7u4sXL144eW2lUplIeJYKqbJ7/fo1vvnmG7x588ZtWNHv90MHW8zPz7vk3dbWFjY3N13dX8uAmi/QHXQp3eW9SaVSrsS4uLiIxcVFFItFpNNpzM3NuX4ELhx8aYMOF1l6Ab7wx68SGMZjIulHoxE6nY77b5amPneo1eDgirA5b4xVdRFQIqguf5zYRo/DZF0qlUKpVMLy8jLW19exvb2NnZ0dbG1tYXV1FeVyGdlsNnRnGtUGNBoN/PDDD/jXf/1XfP311y5EYV++Wkj1MPj9a2tr2NzcDOyE49f9tYzJ/AVzFlyMmIAsl8tYWlpy58/96HnPuKiqpef58Xupj+CLcmXd0dYwGRNJH4vFkM1m3X+zoSJKoOtKd9UXg2jjCBAs8WmpTOHH7er+FotFLC8vY21tzU292dzcdE0t+Xw+4GKHxfBsnPnhhx/wL//yL/jDH/6A169fo9FouOTjpGGamUwGy8vL2NraCrj1fhmQ30fCX15eOtIDcF6BduTpttgAnJtO0vuZe80zAPeqPy4wrIbk83n3/8Is/WQ8mr3XB5ZuVFRBEtOakDS+gk718mE5EN+V55jqSqXiiL6zs+M62MrlsiM7xSy+xSVpuA3V/v4+vvnmG/z+97/H69evcXx87AZqjtsSKhaLIZlMYnFx0W19tby8HNqaqyIfLUtyNDePxTh+eXkZ1WrVWXlm4gEEqgDq6vNc9b6yHZmLjFZFMplMJHJOHwsr2X0ihGXiCXXjNRdA6760tIT19XXs7Ozg+fPn2N7eRq1Wc3E7yR7WSqqEp+jmw4cPePnyJf7whz/gzZs3OD4+DiTsxpUHE4kEstksVlZWsLm5iZWVFRSLxYBbr9+nPQWsarDiQ7VdsVhEpVJBtVrF8vIyisViQMU3GAxcAlRLcVqao/WmR8UZBHy1Wi2Uy2Ubi/1EGOlnhN/eCtwPzlAX0+8YY0abWXkKbZ4/f44XL17g2bNnqFarLtGl206Ftcdqpp4DMN6+fYtvvvkG7969cxb+McJTiFOpVAIbXHLmnbbD6tRe3V+Po7JHo5Gb01cul1GpVLC8vIzFxUXkcjmn4gMQaAhiyDBOw6DxfavVwtXVlXt1Oh2USiVz8Z8AI/2UUJJojMu/6QPqZ+WZ1KLLS9HLF198gd3dXadn9+vuYS2nfnssE3fff/89Xr58ibdv3+Lk5CSwpfQ4L4TnRX29Ju+46PA7/f6D09NTN62XU3NjsZhb1BYXF13yrlAouIw93Xc/ZAiDnnu/38fc3FyA9LT2rEZQ7GMIh5F+Cmh3mK8ZV0KppWHZKh6PI51OO5EN3fmdnR08e/YMtVrtgXVXN95vnAmL49+/f++EN/V6He12e+IOr7weWuVqteqm5y4tLSGdTgfi7dFo5BJ3fptws9l0kmReq1+TZ8mP8L0Xv5NOt7imy897wrieL53BZ5Z+Moz0U0AlsVou0/o7QXENLTtLVszMb25uYnNzE6urq1haWnLWXRNm4x5cP45vNpv48OEDXr9+jVevXgX64R8jvCrvNjc3sbW15fa64/WR8Pw+Nh3V63UcHh6i0Wi472P4ks/nUSwWUSwWkc/nA/PwlZRavtQOOp4bqybq7nO+IGcQcCSX7rVnGA8j/RRQEjOjDQSn3qq7zBIc49pqtYparYZareZiXLq82mI6yUqpS+93y718+RI//vhjYFb9JMJrnzzHZVNq629LxS7DVquFs7MzHBwc4ODgwI3JppXX+5PP5x3heX2UKWt4olqBeDyORCIRmC2ghCepOUVYXzoi3Or142GkfyJofbi5A8Uq6t6zzk2N+eLioktiVatVLC0tYXFxEaVSCblczpGB1t0nvOYIgHDC1+v1QPOMDsAYpw8g4Vk52NzcdA011WoVmUzGzZ9nrZwbYJydneHo6AgHBweu07DdbmM4HLqMPQmfy+UehCv0inRjSs1/8P7xb7T0wH1plP0EtO5U6PV6vYCk2BAOI/0TwZJWJpNBsVhEqVRyMa82x1BuqllrJrLYZJJKpQL19jDCA+Ejt9WlPzg4CMhrqbbzR2X7yj8KZkj458+fY2dnB6urq8jn8y67zvCALj03wDg8PMTR0ZEj/GAwcGFPKpUKbFetiUBabR0Dzpo88FMmXwlPD4NNNyp00oYmle6GbaVtCMJI/0ToQAmSnokp7s5Ct7ZYLLqsNZNYun3zY2RXaFlOh1hyxNXXX3+Nb7/9FgcHBy577hNeJba0xBQC7e3tYW9vD5ubm86tB+Ay4dfX127yz9HREer1upv+QwtPD4elyEwm4wjv1+DVSuuIb4qeEomE29eeHoZf0iOhSXy/sSnKArKnwEj/RKilz+VyyOVyLl7NZDIufuW+btzbjT3jGrM/Ztn1v9XacVNJEp4jrnTijY6WokutjS9spNnc3HSVg9XVVSwuLiKTybgGGNb9ua/e0dERjo6OcHJy4uriJDzJrc012nqrZOR1sOTGtmOd1KMLhF/H1+y89t5r27K595NhpH8CfFGNEr9QKLiyFDPVdOOZsVadvJJdlWaEJgV9qSs75t6+fYtXr17h+++/R71eD4y4Au6HaPo5hnK5jNXVVWxtbWFra8vJbKn6Y+KOWnpad7rz5+fnbroOy2c8vk94HSaisTg78Uh4JuB4PFr7m5ubsaO7tTmHC4om/QyTYaR/ArSezXIdy3ClUgmLi4sol8soFosuQUfrroT3y1T83X+pa0vV28nJCd6/f493797hu+++w/7+Pk5OTgKWEriX+pI8mUwGpVIJ1WoV6+vrrg5PTT+TiQAcKTkW7PDwEAcHByX0ZzoAABRJSURBVKjX6zg/Pw8IYLQCQNdeS47MBTBe57FZYuMmGNpUQ5mtyo3576rS054HJf04AZIhCCP9E6BZZQpsGNuXy2WUy+VARj6ZTI4twWlyTiWnuluObn3FHWz39/fxww8/uD3mKIbhYE3gPlGn5ULq+jc2NrC1tRXo1qPWgBZ5MBi4CTv7+/vY3993GXouLkp4kj6M8Hwvj61xvI78JtH9JiK9X/50HJUD++IjS949jkdJr+4V+5+jBDaPUGHGMly1WnUWnmozTdSFufJab9aJr/5oLQ7h5A44nM3HWflM2ClpGFuHkX1jYwOrq6uoVCooFovIZDIPXPDhcIh2u43T01N8+PABP/74I96/f4+zs7OA0Ae4H6elhOciNxqNAr36KqShhdfcg25TzXun2gB6Akpuf+FkmDRuvz5DEDZE4xEkEgk8e/bMzXzf29tzPeYkO627b600vtQYXTPY2jHG9lRuask97i4uLlwLKfvMCU2gFQoFLC0tBRR/6+vrWF5edtUG7ZhTwnc6HVxcXLjBn7TwV1dXoVtM061XwgL37dd077mIsfddFw8NQbRnQfvqdcyYIqxxyA8LDOGYaohGKpVyMdrnDGawR6MR9vb28Dd/8zfY2dlxwyzYHkr1mJJda8nqmurQR2bFuZ8dX7qnHefxaUlKM9OTknQcvLGysoJyuRyYOkuvgFZTlXbHx8eo1+uuBk/C043mNZLsmrijmIfvZ3jCwRoMD9Q74TF4PcBPCwHPideuswV5fzVZyYXPH/9tCMdE0mcyGfz93/89/uqv/urBMMTPHcwQx+NxlwjTUdMa9hBKJNanNQNPa3pycuKSZMfHx65hRQdC0CPQRQQI9r7TlWejzM7ODra3t7G2tuZGVfvtuXo85g9arZbbwENFN7rVlk+udDrtXkwE8v06SUe37VINAbfC0uQdAKe3p8JOcwPjrDsXPy0VGsZjIulLpRL+7u/+Dr/+9a//VOfzZwO6vxx3TZIlEokHctKwcpG2oXJrKzapfPjwAQcHB64Mpq67ztRTaDMKy4aVSgWrq6vY2dlxG0pyhl7YxhfAfbecEp6luaOjIzfPPyxBqITn7HougIy9WYPnIsbuN52Cw3vLYzNUoGZ+OBw6L4e5C03WqdiI3hYXIH/DTsNDPGrpo45MJuMeWh2YwQdYM+76gKp1Z1JOS2DsTFOyj5tbpx1o3FeOXXG7u7vY29vD1taWm3SjDTz8vFYLeG4kPN36cTE8s+upVMptUkHVXTwedzV4zVGwDk/iagKYx2QtniIbVdqplj6s9u6fExOp/owDw0NYye4RkGhKSM0iszylQhNm4lutFi4uLtBoNHB8fOz2v6P3oEMhNQ/g95czS86a+/LyMra3tx3hNzc3AyIb7fUn/AEYvvim0WgEhDf8fi1XUpRE8ZHW92nhSfh2ux2YyecLh25vb51190MZJjrHqey4kDEJqN185t4/DtvA8gkg+bRE5MtKm82mm+DSbrdxdXXlNq7kOCmW23QvO7/27H8nXepMJoNyuYyVlRW3P/zu7i7W19dRqVTchNmwoZlMJLL+f3V15TyPDx8+4OjoyG18oaU0Fd5Qn6BuPaWw9Bp8woftS69JOJ4f76fW9TUHoGEB7w3PibP0mVy17P3jsA0snwBtn9UHWN3k8/NznJ6eOqlqs9l02XhOiWVyTLd98kUltGIkHPXyJLwm7NbX190ADk3W8bhqOXWm3dnZmcstaBzPUVe04LFYzCXIGMdrI41KhFlx0CaasH3pdUCIhh68H/RGdPPKMCvPhZDaCbY6W+b+cZh7/0T4pKRbqttRq0Vnzd0ngh+3q9XTbDQtGfvyq9UqNjY2XP2dM+w4j16HcwLBra10aq12yzGOJ+HpyvN4WpbjLrN0n2nhSXiN4Znn8AlP0tNSj9t7T8t0fuWC3g/FUpxRkMvlLIn3RBjpp4RafR0DzYw1X6xP+zuw8Bg6NsonA62YDuKo1WpYXV11HXGMqbWSoAKXMF0AZ9oxt8BwQ8dcUbyjZTBtGqLizie8ZtvD5urTe2HfPfsSuIjwfmoiVEmvdXxu+cWZBaVSKTC11zAZRvoZoTJR3WmVtWUdBKEyUSBo3X0NO8txbNEl6fmiZp4CG+YF6B6rB8KEHUONRqPhPBESVV16kpIqOxKTu8uomlCn0bJ5RptfCF+nT+9BvQZm/8N09gpdjFjB4I45/pZbhvEw0s8IjZn9xhmtJ/vCE7/2rVLWdDrtCK+DJbkApFIpF0uzxMXNIoAg4TWbrrkFhhskKEnOerevg2co49fhmbSkS69lR0LDFb1GdiCq5+BPvg3LBaiVZ38Brby59k+HkX5K+BZI3XM+3CSQlr7U4mvsrDEzs+P8yQEdzMrf3d25Mli32w2o7OgSa4deWIJNm12oYFM3nuQkgWjZdfhFWB0+zMLzGrU7kclA1epzIfNbj1UXoeEPd/PlCDKz8tPBSP8R8Ic50nVl7Z2WTjf+pKtLoulMOZJck2Z0rVnTBxCI3bUtl++hToDyV82E+9p5Ktl09Jd232ndnBtLhNXhlfDqzvPa6LWwD0CVd6PRyO0MrFl93mOdD8BqBgeW+D0FRvzHYaT/CKgOno0vJIouBsxkq9CGwhK69KpjZ9IMuO8ZZ12fOQT+zo40fY8mwwh/Dr96FGp96c5TpKNlScbwk+rwJLwKZ/xdbhKJBEajEa6vr50ij/vN6/bfYVbeXyTNyk8PI/2M0Iw0H8Z0Ou2sMeNPrcmrXpxWXl86OZaZbN9y86e/nbPflELyUVFIt5jqNeYMtPauhOfCocKby8vL0Dq83hN/ajArD5w/kM1mMT8/j5ubG7RaLQBwcmUuduy0U9JzMdS8gMXxs8FIPyM0WaeuJ7PQXBC0XKeyVn+UlpasALj6uu7gwherBFoPB4J1bK2xU6/POJjz/HQuvU684TEHg0EgL6AbSoSNmqY3wd5+TtxdW1tzfQFspe31es7Kt9ttR2LtvvObcvyqgi9EMjwNRvoZMK6UxJjYH9/kJ/J4DJbLGDeT/HTTOUmHSTlNxjGMUE07XWC6u6rXZ8kvbLMNfq8OsSTh/am1Wof33XpVEHKYx/r6ekA5GI/HcXd357a07nQ6gTzG9fW1ew9JzWPrT+C+bOqP0jJXfzKM9FNCRzX50lwd6sjMtcbWSnyWy/r9fkA+q11w3LpJZ8T7vfZAcNw1PQzddKNarboddnT3WN1bTo/pLzj+QuNn6TU5qEq5arWKlZUVJ6DRibt3d3cuJPLDHJ1LAATbb3mf/Gm4Nvr66TDSzwDNmvt7rfkZZFXvjct0qwZdZ8vpdk0U/Sg5/Y48jXkLhYLbMLNarWJ5edlN7PUTYCyXKeG5G6xWAMbp4DWvwQnB9CzY20+vghJeVeTRQ1IxEAd38Ht0UaQnxHtC4hvpnwYj/RRQy+4P0KB10lHNfA8tko698jXl+h08LrvN/BHPfjlLB0loDXtpaSmwfx5bb3W4hk7RYdstN4TkgsMSZNj5hnXica8/5gxY9w9Luqnwhi+695of0XvjnyfvkR9CGcJhpJ8B2q5KUvuWXBcFPqjcjUXn5hFKCG3f9dV9GtNqtpyuMjfe4KRexu9+dYCLkmr06dKHjalWj0LPWUuWWn70t/LW/gDeD1+nT9Kz5s5QgPdb1YY6XVd3qzU8DiP9lFDCh1l73/L7iwAXCd/N91tOffUe3Wj9jE6kZe26UCgELLuWtng+1O378/s4C0Bn3AMIWODhcBgopYUp+jTuZpjC42jDDhdBlfD6AzB97wpAIM+hjT4W1z8NRvopoQ9kGMnDYl5+Th9if6YeEIzvddS0Jg/12BpLM2vOyTYqtqE1Z/zux8c6b58lQX+YBmWz7B/wQwtVD1IuzNr7aDRyCUvmDSjp9ROU/j31KxQAAnvT87PjxmoZHsJIPwPU+vjxOS0zraJmnjWbr262dqLpy8/KA0FZqqr72I6rWXlKaUl2Kt7oSajElsk7dt5xSCWtOK/Nb3fVMhqP1+12nXfB//Zn46voR910FR35o7Z43iS9djSO68wzPISRfkZoUk276WiZ/aSeP7PeHxbpJ7L0J+NcnQKrE2opDtJhmNwQg8MnNVZW0uugDZLo7u7Olf3owVBoFDZ/H0CA8MC9a99utwMKOuoSdA4Bpb3asUeXX0VAtPQMCfx97AxPg5F+Rmj8rSo7n5RqpTVLrcozv/TFn3ypNeXx/UVAs+O0fnquYecPBMMV5hsAONKrJ8Jz8BV5jNN5DGbXO51OYOqOCoHoeaj4SAeLhk3fAYI76Khiz5ptng4j/YzQUhNJShUZyeqryJTIOmSDx9NmFX5ef9fZ9/4DrtUEP9/gVwr879MwArhP0Ol7/fwEiaszBAaDAebn553Ett1uP5i+w7hfJ/MyMecTflyZUisaGjoZ8Z8GI/0MUAtPMnOYJPveOeLZnyrLB58CEz7YGiYo4fk5380H7kt7WhnQmFhjY+24U49DwwLNvOu1admRpOKCwmtgKOOHIDqYg9ei0mOdOOQP4/CrGz7ZdacdliON9I/DSD8lfMKr7HY0GrkMNeNiWnn/vX7N3q/H+2OiSSgtXdGd1jFW1ANobKyusmbd/Tl4d3d3gUYWJbPvQegCo7kLgvdH36d9AbwO/3z9aoh/73UPgHw+j0KhEOghMDwOI/0M8IlPcmtnmHbVTTpG2LZNSmz+Tg/CLwFqT73Kdce5ykBwH3u/RMZrAe6Tcex1V5Weyl/9ciXPUe8JF4ww0utxwgiv9zuRSLihmOwl0BHgZukfh5F+RoSV0fhgMtOswzSGw2Egxr+5uXGWkPDdWX2FZd/VxabnoFl4JX2YN6GWm+EAcweM2XlMTbJp6BBm5VVNp3kCldX6giU/P6DwO/gWFxdRq9VQq9Vcj75OzzFMhpF+BoxLGKmlV6s9rpzkZ87DxChhWXpCS26+vp8kUimwWmKGIfx8PB4P1PF9ia6fJ1CC6nWP63Hn774Ho55CmKKOIRF1CIuLi9jc3MTW1pbbrJOz/43wT4ORfkqoe0342XJV3fnWzM+oMx7XbL4v9lHS+1JdJXeYhJXnqi+eM9V52rLqC3dIfL8yEEZSvysuzEvh+WjZzb9mQkd8ZbNZLC8vY2trCzs7O3j27BlWVlZsMOYMMNJPCZ84Wt/WraafklXXJJsuCtotpgo8HSzhLz4kGpNdem7893HWtN/vP/i7n8ALc721lAbgAcm1WsF/BxAIaXz410ELX6lUsL6+7jbtXF9fR7lcdptcmGv/dBjpZ4Rac3+gg98Z5pM+rJ6ulk+tshLWT8SpGo6k8mvuqnunNfUttf+daoknhSlKMl8l6GsMSHh17zVUUe+Av9PCc+zWixcv8OLFC2xtbaFSqVgCb0YY6WeAL7MNa75RS+mX5fQB14Ya1q99955k8sU+Wh0IS+p1u11HIjbRaHVBZ9Gpd6LXOC4noXkNPSfdwcavzY9G96PANBmpPwG4z3CS7tbWFvb29vDixQvs7OygVqu5eXsamhieBiP9jPAJTEunGXJmr9V6qQw3kUgExlf71lWTd74eX4dqMvHGBhtuTMFNL7QNlXPm6Zor2X2ij0tA6jX59X6O1OYmHboHnpYAuSDNzc0FxEO8Ns7Z29jYwN7eHvb29vDs2TPUajU3esvm3c8GI/1HgKSksIUlOD8uVm/A9wp8LbnfhONrAUgytfbAw11qSXg2tHD8FTXu/hhtkjIMmktQD4VtvWzpLZVKbmoO97DnOWpvvS5C3AOPHghnA5TLZdRqNWxvb2N7exsbGxtup16KccZJkg2TYaSfEtpgw9oxANdAM849DouZ/dh5nCBFlXz8qTE8v8+39Oxi48x63ayCAy+19s7XuNo7SaY7zeTzeTeSi3vLcfCmSm5Z+tNR3jphl4umjs9eW1vD2tqaq8f7E4CM8LPBSD8FtBuOSaa5uTnXgur3dE9KfIXVsNWt9wU/YTV7vwlGu9zYc05LT9LrdBwOsPAHb/pz/Ph92rfPAZi6q64OwaRbz0VNSa8NNjqhh/Ja7ta7tLSESqUSsO5+m7BhehjppwStPC28bls1LgYGgjVs/Tnuffx90ovvUQ9Cqwkkvu4j729oqeOttY+dL3XnGbMzwcYXx2rncrnAXvbAw7BDJ/zSyjOTz+Ge9CDy+byb3OvnMIzws8NIPwXUtQd+irk1Iw48HGk1ze/j/i1sofDfE1ZuYxmRFpYxPi29P31GZ/epToD1du5/VygUArvk0O3WmryeV5gQSZV9wH07r2b/wyy7Ef7jEZtknQDYOJIQ+HH5Uyz8Y/82zd/99/ihgk9+ko0JPnoAfvOM3+qrijhuHKk762qf/CQrrPcqTJPA69GypD8o5Kn3xRBA6A0z0n8EHrl3nwTTPOj++YxbAFRM5O90q+U8zdLrphQquHmqBQ4T+eh38VrDwhfDzDDSRxXjNPh+SVHfNymR+Cms7zjBj+GTwkhvuEdY9WAczOr+YmGkNxgihlDSm2jZYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWIw0hsMEYOR3mCIGIz0BkPEYKQ3GCIGI73BEDEY6Q2GiMFIbzBEDEZ6gyFiMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSG8wRAxGeoMhYjDSGwwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWIw0hsMEYOR3mCIGIz0BkPEYKQ3GCIGI73BEDEY6Q2GiMFIbzBEDEZ6gyFiMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSG8wRAxGeoMhYjDSGwwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIYeGRv8f+JGdhMBj+ZDBLbzBEDEZ6gyFiMNIbDBGDkd5giBiM9AZDxGCkNxgihv8P2IHQIJzwWOwAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 34\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO19S3Nb13rlAoj3gwAIEnxTpChakq99K5V56qbqpgd9pz3LvKtnPcko/6Cn/Rd6cqt61pPMMupRKp2KndiiJcuWLZEECT7AFx4kQaAHztpcZ/OABCjda1vnW1UokiJxcM7RWft7re/bscFgAIPBEB3Ef+4TMBgMf14Y6Q2GiMFIbzBEDEZ6gyFiMNIbDBFD4p7fW2r/V4TBYIB6vY5//Md/xD/90z8hkUggmUzi+vr6QceLxWJot9tYWFjAH/7wB/zmN79BJpP5wGdt+BMiFvaP95He8CvAYDBALBZDLBZDv9/Hq1ev8A//8A9Ip9PIZDIPIj2P12w28emnn+Kv/uqvEI+bY/gxwEj/kWEwGODt27d48+bNBzvm1dUV2u02YrFQw2H4lcGW7o8QicTNWv4hiJpOp43wHxGM9B8h1A3XBWDcY/C9iUTCSP8Rwdz7jxwPTeL1+31Qov3QYxh+mTBL/xGi3+//3Kdg+AXDSP8RwrLshrtgT4fBEDEY6Q2GiMFIbzBEDEZ6gyFiMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSP8RwrT3hrtgpP8IYdp7w12wp8Ng+ID4P19s4w//8//iv/6v/4ej1uXPfTqhsH56g+EDYf/sAn/3v79Erz/Ai/opqvlv8D/+y29/7tO6BbP0BsMHQvfqGr3+zQDps27vZzyb4TDSGwwfCMtTOfy33z1GLAbMTWbw33+/8XOfUijMvTcYPiD+/j8/x9/9p6dIJX659vSXe2YGw68Uv2TCA0Z6gyFyMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSG8wRAxGeoMhYjDSGwwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWIw0hsMEYOR3mCIGIz0BkPEYKQ3GCIGI73BEDEY6Q2GiMFI/xHiT7FV9WAwuP+PDL8KGOkN9yIWiyEWi/3cp2H4QDDSGwwRg5H+I4Ba4UQigXj8w/63ttttXF1dfdBjGn4+GOk/AjCG73a72NnZQavV+iDH5WKyurqKiYkJI/5HAtu19iPA9fW1I/w///M/4/DwEOVyGefn57i+vh77ePF4HPF4HOl0Gp9++in+5m/+BpOTk7i8vEQmk7EY/1cOI/2vHIPBANfX1zg+Psb333+PV69e4fT0FJlMBt1udyTSk8QTExOIx+NIJpNIJBIolUpYX1/HxsYGpqamEI/H0e/3MTEx8We4MsOfCkb6DwiWtT6EFbyvRDYYDDAYDNDv93F5eYnj42PU63UcHByg0+kEziXsWEr0iYkJR/R0Oo1sNot8Po9qtYqFhQVUKhXk8/kA2QeDwYOu80OX/szjGB9G+vcEH2KSkHifh9Enhv7M7/v9Pvr9Pnq9Hs7OznB0dITDw0Ocnp6i0+m4+Dsej986npI9lUo5oudyORSLReTzeRQKBUxNTaFWqyGbzQZcehJ+VAL756/3zP+9f9/8n/2FNRaLIR6PG/nHgJH+PaDWtt/vhz68wx7i+4gdRgz/83q9HrrdLg4PD1Gv17G3t4fT01NcXl665B4z+foz3fh0Oo1MJoNisYhisYhSqYTJyUnkcjkUCgUUCgVkMhn3Wb1eD4lEwhF+GCH9n/Xc/ful1+rfs/uIzGvh9XzoqsXHCiP9A8GH9/r6GtfX1+j1eo5YtIr64r/7x/C/DnuRJPzMXq+Hy8tLnJ+fo9FoYG9vD81mE5eXl+6zJiYmMBgMnCXkSwlPgpfL5QDpM5kM8vk84vE4Li4u0G63cXFxETimXkeYN6JeCXMPes/4s5J+2L3zP4fXl0qlkEqlkEwmLcE4Ioz0D4CS7+rqCpeXl7i6unJJM1odJRkQtGBhhFdi+1/1RcJ3u12cnJyg0Wjg+PgYnU4H/X4fsVgMiUQiQCpaZv4uHo8jkUg4956LAL8nkQDg8vIS7XYbrVYLsVgMqVQqQHolbpjHQsLzfvV6PVxdXeHq6uoWkTWhGEZ4/m08HkcqlXKhh95zw90w0o8Jn/AXFxfodru4vLy8RXp9EH3ihx0zjOD6ur6+xmAwQK/Xw8XFBTqdDs7Pz50VHgwGSCaTSKfT6Ha7uLq6QiKRQK/Xc5/tn48PXaj4N5eXl2i1Wjg7OwOAAOl9V12PEXa/uEhyodQFg5/JRUnvlX4OFy6WD5PJJJLJpPUHjAgj/ZjgQ6zWttPp4OLiwpFeY0yf/GEuqB/rhhHdt/QkUK/Xc+52KpUKWOvr62vn7mvoAcCFCLyOXq/nPAPgJl6OxWK4vr5Gp9PB2dkZrq+vkUql3DF5jnp831JzoSLhLy4ubnlHfF8ikXBxOt+vnzEYDDAxMYF0Og0A7jrVEzBrfzeM9GNAyUlrS9LT0tNK6oOvi8BDiO97AX5cm0wmXXyey+WQzWbdQqSfF5YnIPF1AQEQICAA9Ho9tNtt9Ho9V6/XhYdhBd3/RCLhkn4AAp4RSc+FhveMZUN+Ls9ZzxP4SWrc7/eRSqVu5QUM98NIPybCEnj6lQ9wv9935Kf1CbP6elz9SvB9GpOTDIzHfcKn0+lb1hIIWns/QUhvgVY0k8kgm80ik8k4y06Cc5HQBU9zCZoX4DlwkaBrT9LzPjEMoavOBcMPDQC43+siZRgdRvoHwreaw/5d3WUS467SnhKc3+txADiiAD9Z4Ewm49z6ZDLpFhY/kRZWJeDnMDRgrb5YLAYy+YnET48Kyc4Yv9VqodvtOg9Aj5PJZFxWnedKa89FEvjJq+C98RdF9SiY+ON5mJV/GIz0D4Sf8FKSjVI6GlaWAoYLfnQB4OfROjL5pe4wSeFn8CmlZXiQyWRc2W56ehrT09MolUrI5/PIZrMBwjMmPzs7Q7PZxMnJCTqdDnq9nvMScrkcut0u8vk80um0e7+fi+BCwd/TbefL90joXcXjcSP8e8BIPyb8erfG6+oma6Zc//6unxVhdW9+T0JcX1+Hus8aN2s93Afr3Pl8HpVKBbOzs1hYWMD09DSKxaIjfCwWczE9AKcPOD4+RrPZdLE+M+p09+lhkNTqpqtrr6EB43n9nRLez22EeVuGu2GkfyDUwjN+9l3m97X4RJhbzp+ZT+h2u2i32zg/Pw+43CQXicXPBH4ifTabxdTUFBYWFrC0tITFxUWntadrfn197RaSwWCAbreLs7MzR3pa+mQy6eJuLoYAbpFek3iJRCIgGVb33ic8Fy+ek1n6h8FI/wD41tp38e9Slfnvv+9vgduyXL+CcH5+jpOTE+dun5+f4+LiwtXB+QLgsvGsbxeLRczMzGBhYQGLi4uYnZ3F5OSkS8INBgN3nHg8jqurK7TbbZyenuL4+BgnJyfodrsusQjAJfOYXyA5eb5ao6c6kCDh6TH5JUq+xxceGUaHkf494LvxPukBDP1eMUp8z+9p+S4vL13tvNlsYn9/H/v7+87d1kSX1sK13JdKpVAqlVCr1TA3N4eZmRmUy2XkcjlnnUksElCt/PHxMc7Pz3F5eemOzaw6PQxWNGjlWUpkCMCFxO8V4Gdy0WHGn+/hZxjhx4eRfkz4BFUX3xeHKIHftxnEVwG2222cnJy4Zpvd3V0cHBzg9PTUqfGU8EBwAYnH48hmsyiXy6jVapiennbZ+nQ67QhH0vb7fedVNJtNR/hWq3WrPMlrV6vd7/ddvkHFTLFYDOl0+lbOgclG9RCYvZ+YmHCENxd/fBjpH4gw8vuWWol+X9weBk1aKeFbrRZOTk5wcHCAnZ0d7OzsYHd3F4eHh86118SXngO/plIp5HI5VKtVVKtVlEol5HK5QG1dS31XV1dotVpoNps4OjpypO92uwB+kubSOlMKrPp9xvD0UFi2Y5LQt/RMUvK9tPS8176YyDA6jPTvCSW8CnH4O/27hyTtNKZVwu/v72NnZwdbW1vY3t5Go9FwrvZdSS6eZzqdRrlcRrVadYk7El5dbCX80dERGo0GDg4OcHZ2hk6n40powE0szyEcuVwOyWTSLVj+4sUEnkqJSfR+vx8o9TEPoKS3uP5hMNJ/IPgxPf/N/5v74nZCLTzd4vPzc5yenjoL/+7dO2xtbWFvb8912dGiDiM86+JM4M3NzaFcLrvynLrkdK07nY7r5mML79nZmSNeKpVy3kM+n8fk5CQmJydRKBQwMTHhCKuJOVpuXisXI9X7JxIJdw7M+HNh4KIx7FoNw2Gk/wAYZsXDSO//vYIPr+/SUwFHwtfrdbx9+xZbW1uo1+s4Pj52cbw2n/ifTT19oVDAzMyMy9aXSiUn3VUrzwXn/Pwc+/v7gUEdnL/H62C4UCwWUalUUC6Xkc/nEYvF0Ol00O12A1bcDz+4GHHhYUyvng4FQIlEIlD2M9KPByP9B0JYln4Y6f3vw1x6P4Yn4Xd3d7G1teXi+GazGYjjw0Q4akWz2Symp6exurqKtbU1zM7OolAoIJlMBmJ5tfLNZhO7u7uo1+s4OjpCq9VyhGNZjhN4mCOoVCrIZrPOirfbbeeuc0Hx6+4axqg4h9l71elrstKSeePBSD8mlKA+SOT7hDlh/66ddLSwHF5xenqKw8ND7O3tYXt7G9vb2y5x12q1Aso738rzPCi3rVarWF1dxdOnT7G2toZqtRpw7fV81Mrv7Oyg0Wjg9PTUudZq5fP5PKampjA9PY2pqSlMTU0hlUq5jDsbd7TzzhcZ6UQg/k4bfJjcS6VS5t6/B4z0D8AwbTwwesIu7DjqypLwHHrZaDRQr9dvZeqpvAuzdmrhM5kMKpUK1tbW8Pnnn+P58+dYXFzE5OSkc+3VylOFx1i+Xq879R1jceCn5B1LfzMzM5iZmcH09DQKhULADadYhyEEz0s7E4Gb0IaLhSbxSPp0Oh06hMMwGoz0D4Sv+76P/Po+/6taOrq3KryhW8+Y+ujoyLn0/vALrZOTTKlUCuVyGaurq/j888/x+eefY3V1FVNTUy7Drlae59PtdtFsNrG3t+c0ANrpxhi8UCigUqlgZmYmUP7j53e7XVe+U329Nv3ogEsAtzweSoATiUTodRtGh5H+gdAauj/Ygl/vk9by6zDCHx8fY39/H7u7u9jd3XWE55hrvzznE54z8CYnJ7G0tITPPvsMv/3tb7G+vo5areb09f6UG5bp2u02jo6OsL+/H6gOaHlNBT4zMzOoVCooFApIp9PuHtHC+y921XEh0OEZJD3de71OHURqVn58GOkfAN/C68MXFk8Py9KHJe2U8AcHB9jb2xtKeL53WAw/MTGBXC6HWq2GTz75BJ9//jk2NjZc8k6FOHpddK/Pz89xeHjoQgkVwzCWZ/KuVquhWq1icnLS5QjojvvdiBTwqMdAQY+vXKSLr9N5dKEdR+xk+AlG+jHhkz2s/3vUY9xFeCbuSPiDg4NA77rvYSgBSKx0Oo1KpYLV1VX85je/wcbGBubm5lAsFgPZeh907U9OTpz6jrkDfo7G8rTyqupTzQKtszb9MCHHBSCZTLp6/2AwwOXl5a2QQ78Co3UoGm7DSP9AhBGfD99dxPcJz5g1jPD1eh2NRgOHh4c4OTlxU2+V9ISGFSRSsVjEwsICPvnkEzx58gTz8/MoFouBLLqfSWcysd1uo9ls4vDw0AlxfCtfKBQCVp5uPUtzPJ6/NwAXDZLfl+xyMdMKAe+r78lwgTOMDiP9A+Br4vm9P6Iq7H2+hdcsPV36RqOBnZ0d7O3tuXiahNeM9bBsPZtppqam8OjRI6yvr2NxcRGlUsmNvhoWdrCxhroAJg05lJILCq387Oyss/Ja+uN9US+GtfXBYOC8DI7X8kdysWSoiwNwM7CTIYGqCM3ijwYj/Zi4y70HcMslVUvKv2MZit1yfpZ+d3cXjUbDtcqenZ252fp6HAUtPMtzpVIJCwsLePz4MR49eoSpqanAJJxhhGcCj1n7w8PDwO63auVnZmYwOzvrrDxzBADcsTib//z83O2xxzId4/hsNuvOjQsCh3Jo4o8eAt/nk94wGoz0D0AY6e9q+girw6vS7ujo6FbS7uDgAMfHx47wqj4j9EHXOLlYLGJ2dhbr6+tYW1tDrVZzqrswgmjZsNvt4vj42C0+x8fHgfn0auVnZmZQq9VueRA64IPXyOEeXEC4QKmlZ3KPDTWXl5eO+FwQGPszJDDSjw8j/RhQUivZtUbuu/f3SWsPDw9vleVI+Ha7HaqpV+Jrhx+VcTMzM1hbW8PGxgaWl5dRqVQCApyw61IFXqPRcI08rVYrMM4qmUwin89jenraWfliseiOD8DlKtgReHh4iGaz6SoPg8HAeQVq7ZnxHwwGbpcelh157f72W0b68WGkHxM+sZWMwywo/47NM9otx/idpOeACk3aad4AuAkhVICTTqedy72+vo6nT5/i8ePHqNVqAQGOn7xTt77VauHg4ADv3r3D27dvcXBwgHa77T5XM/azs7OYnZ11GnvfyrMz7/Dw0OUGzs7OcHFxEWisoeVmIo8LqWb0dbIO/1ZlvaPOIzT8BCP9A+An8Rijhqn0lFQcXqnNMxyCoXX4drsdkJkOk9iy+URn3a2uruL58+d49uxZIHnn1+P5lXXwTqeDo6MjbG1t4fvvv8fW1hZOTk5uad65sHC8VrFYdMfnvdEJO/v7+85z4ZSdwWDg9qGjtSeBuWgwgccFgqSnV+DH9IbRYaQfE75sVne2oaVTwQ5J5U+8qdfrgQEYLI1xvp0qznzCs0zFkdOFQgGzs7NYW1vDs2fP8OzZMzx69AjVatXNu/NdYM0xMI6v1+t4/fo13rx5g0aj4c4FuJmcW6lUMDc3h7m5OVSr1YCqj9fa7Xbdwra/v++sfLfbDQwQ1XZazdCrNl/Ve0wi6ouLmVn50WGkHxF+bK6NIBzuoC2ihB/f6sSbra0t7O7uBkjBtlI/XwAER0QzoVYqlTA7O4vHjx/j6dOn+OSTT/Do0SPMzMwMVd0BCCTbTk5OHOFfvnyJd+/e4fT01FUL1MrXarVAH7669gxhdH7f4eEhTk9P0Wq1Ah6DSoW5KOkMfCCoLuR7dRSXxfMPg5F+DKh15I61mo3WB1a7xTqdjqvB68QbbY9lSc4vASpUeMPYmmW558+f48mTJ1heXnZdbn7yTgmvXXS7u7t4/fo1Xrx4gR9++AEHBwdO+Qf8FMvncrnAqGx/UdFkYKvVcjPxSXjth9fr8EtyPE/fw1GLz3jfrPzDYKQfEb473Gq13N7wnPKSyWSci0vLx5HRYYTnAAxKXHUHF19uqlN3WYdfXFzExsaGI/zS0hKmpqYCyji/mYaE53nt7u7i22+/xVdffYVvv/0W9XrdzdobDAZu7h0XmEePHmF+ft6N2NINMZT0JycngRn8OpVX3Xp/RJd6Uv6sP3X7LXn3cIxE+lH05B8rtB7PBBWt9tHRETqdjos1Ly8vA3JSNq2wBs8YnnPmSC6dET/sXpP0dLPn5+exvr6O58+f45NPPnGE1wGXYVl6uvSnp6fOpf/3f/93bG5uYmtrC8fHx66Nle436/4rKyuhnoSfuzg7O8Pp6anL1vO6SHbeI38Qpz9PgN+r52N6+/fHSKSP8s0dDAaO7GdnZ27OfKPRwPHxsROQcGtnEqHf77vYljp6fZ/Ofh+WoQeC0tp0Oo3JyUkXwz979sxZeCbthunqtWTIGP7bb7/F119/jc3NTfz4449oNpvodrsuTEkmk25M9srKirPyYWIcTeK12+3A1lp6PN0Gm7G5ztjnOfrbXwG4dY/ukjwbhsPc+3twcXGBRqOBd+/eOWksLXWn0wEAt1MrSReLxZzQheIbzdBrL7xv3bXer40lvvDm6dOnTnzDYRgaw2sJkclE9sfX63W8fPkSL168wMuXL7G9ve0sPAlGr4Jy3tXV1VBvAridv2i1Wm5TS4Y+sVjMkT2fz6NQKCCbzQZIr/JkJjWZKOW90AYeG4H9MNxJesarUbuhdEUB4PXr1/jiiy/w5s0b1/zCTDsHRFA7zhhXm1aazWZgRxhfcKM1cwAjEf7Zs2fY2NgY6tL78TE9lcPDQ7x9+xYvX77E5uYmXr9+je3tbeeGa+KOyrvZ2Vk8evQIKysrqNVqAfVd2D51tPI8nibf8vm82/e+WCwG2nDpync6HdecQ+KrbNff6lpzIVF7Th+KO0l/fHyMf/mXf8Hm5mZgRf7YQdL3+31sb2/j+++/dzE4m0b4N9owog8wE2XabKLlOFpUP2HHpB1Jn06nnfCGMfyzZ8+wsrLi6uS+S+8nHc/OzrC3t4c3b95gc3MTm5ub+O6777C/v4/z8/OAtl4VfmHJO7r1/qhsHdVNcRFwk3XPZDKYnJxEuVxGpVJxW2ilUil3T9TKU4LM/IJPeu6iG7bpRZTD0VFwr6X/4x//iD/+8Y8AfnJjKdb4mKEWbHJyEqVSyTWBkPBKjk6n44gHINBOSleeFumuufTaKcc8QaFQwNzcHNbW1hzhV1dXXcmMWfowwlMK6yfsfvjhBxwdHQVccD2HiYmJgJXXnAFLZUBQqETxkTbVcNGilddpuZywA8CFOrxv3W731kaXXGh8L8Cm4o6PO0k/GAzQarXczxcXF3/yE/olQGvkJycnTi+uLriKRpjM0zntfOkcuzDr7h+PRGECjXX4jY0NrK+vY3l5OdDkchfhj4+Psb29jW+++QZffvmlS9hxEo6vB9DPr1QqWFxcxPLy8i23PixfoC20JD1LctQUTE9Pu51x8/m8a7AhaXkcElqn9fA8ubjwpQlRI/1ouJP0sVgM+Xze/ZxOpwP11iiA8TnHN6n7raUqxsP6s064uWurKe0Tz+VyrqFleXkZ6+vrePz4MVZWVlyDi2bp/f59uvQnJyfY2trC119/jS+//BJfffWV09P7AzV5TQBu7YCjbr2/A472FLCJyN/Ukq2+JDzn6HFw5sXFhasA8D5TqKSbVPIrcwZcYHTWQDabNfd+BNybvVdLoN1OUYMfLzJ25+94X5TkJPp9hGfNmjJXTrt58uQJVlZWMDc350Q37Du/K2l3enqKnZ0dfPPNN/jXf/1XfPXVV05aq0Ti9aj4hbH8/Pz8Lbfe39jS7ylgklMTeByPPT09jenpabdocVAGjYgvbdaEnU4lisfjTgfARUYTh9RIGIbDSnZjwO9OoxJN4avqhi2SvjvPpNnTp09d/X1xcdG58qwM3NU8wzLh3t4eXr16hS+++AIvXrzA27dvcXZ25nILfonQ1/NPT09jcXERtVrt1mYYwI2IhmXAk5MTNJvNwOBOVQ6S8FNTU25GHwA3E5/3jRl8vnTh1G5GHcxBEZCO5zbcDSP9B4Bq2ocJRpSk2habyWRQLpextraGTz/9FJ999hk2NjYCUtdhfeOqtNN++O+++w5fffUVNjc38e7du6GEJ3R6brlcxtzcHObn51GpVAIiHF6j1v056kun5gJwnku5XMbU1JTL2Gssrxbcl95q6zJfXCRo7Ul6bUdmAtFc/OEw0j8AKgMd1sutYUBYp5y/meRnn32Gv/iLv3Bz6ScnJwPlMR2cAdzulmM//I8//ogXL17gxYsXgW65YYTXnEI+n0etVsPCwoKT2upYahXhsBTIzTC4sSW3pGbloVwuo1wuO8Kzj17vnVpyXTA1WagLQywWw9nZmXvRzWem3+L6u2GkHxM6dllHPWttH0AgVmaJiw97KpVCNpvFzMwMHj9+7LaaevLkiduIQgUwYQ+wX4vXTL1m6e/KbGuIwQz73NwcZmdnUS6XA5tPqAin0+m42X6c2EuFYr/fd9fHfeqLxaIjvI651utQoZJWMzRM0r9R0lMPwWx/Op3+IP/XHyuM9GNA3XJfoMKXL2BSq8aONSbsVv9jys2nn37qBliqus637v5n+Ym7V69eYXNzE2/evMHR0ZEryw2Lc1VrUCwWUavV3HAMDt/g5/DFhhrO5udMP4YQXNSoviPhdQNLDYPCqghMAtKqcwHV8h33CfDLd5r4M4TDSD8GSETdgkmtkD682v/N2J1DL2q1GpaWlvDkyROsr6+7LHmYnFahMbxOqNnZ2XH98K9fv0aj0UCn0wnV9hPa8cYS3fz8vAstmGzTRBoz9bTw2jHIgZdUKBYKBRQKhVuE53XwGrS0qR4Up+n4bbdMEnY6HbTb7cBL6/qG4TDSjwi1itls1sXbWpcn4Vlzz2QyzuKVSiVMTU25WfELCwuYn593YhVVu41CeFr43d1dfPfdd/j666/x6tUr7O7uOqXdfTE8CT89PY35+XksLCy4+fixWCxQ2tPhGBzVXa/XXSzPchkrAPl83jUB6Tgtbayh7FY30mDbbTqddnE+VZC6wFLxyG4+vvRvLa4Ph5F+RNB6ZzIZ1yySTCYd4SlPJpmKxSIqlYojOoUp1WoVlUoF5XIZpVIpYAmHDYYYZuHr9TpevXqFf/u3f8M333yD7e1tl7jze9D1GvwmnqWlJSwvL2N2dhbFYtHV0Gm9lfDsGGw0GgHC+2pCLowcssFzYYhAqa0mGVV+rFUCuuoaClCC60tyVVZsCIeRfkToA10qldzmEayPM2utO7my9DU7O4vp6Wn3vlwu50Y4h9XefdGMnzXXIZbU0zNxx4k3QHC3HT+vMDk5ienpaSwsLGBlZcV17FEpR/fZHxyi020ZQ8fjcacjYBijhNd43N/1hp9B915Jf3V1dUsURNJz+g/VeHyZHPd+GOlHhCa8SqWS2/mVDzTbP7mH3NzcHJaWllz5S7vKlOh+TdkvV6m+ndtN7ezs4Ntvv8Xm5iZevnwZmHjDh96fMKPtrdydhuc4NzfnSnTxeNzF7szSc8stDrqkS81rZn6D8+jpuVC8xI47VfCx1ObPz+PGFnrNAAJk5z1ib4Oq+Iz098NIPwJoJTVGn5ycdOUnPmjJZDKgW6eqTbdwHjbfzRf00LqTKOyHf/fuHV6/fo1Xr17h9evXqNfrThSj7bG+K88kInemoQeie8rH4z9tPElS0rrzpTvncsrFYFMAABSoSURBVGHhJBzG82rhee4kI/vtaeVp6XVQBmfcU5Dkd/TpQsjcgCYDjfD3w0g/ApQ4LEMxpqf7quOsuF87W0j9MtywEpw+0GrpTk5O3PSe77//Ht999x1+/PFHVyqje8xzVYUd6+9TU1OO7PPz8y7coFvO2F03qdjb23OxOyW2OkuAGX6Nxaneu4/wmm3XzD1DEC1Z8j5pbR/ALX2+TdEZDUb6EUAC5XI5l5WmRSOJtYVUk3Qkgk94PxtNy0WyMO5leezdu3f44Ycf8O7dO7exJBNhnEHHkCGVSrncA0txWi2oVCpuIdKhH9S0NxoNbG9vo16vY39/323CwbicsTerDbpDjR6PMbb22vNYDEXokfiWnfdIx2L5xKYnFBbSGIbjXtLraptMJiPZWjsxMeFIROuoO8co0YrFouuG05q7WnIlOuNSWkJ/62p/qGaz2Qx0lWmZkPPpuQEGO+UWFhYwOzvrGl50L3hm6fnZnKHHrbbo0uvwEOYHtKauwhu18Fy8qJxjPsAfltnv990IcZKZx6A19/cN1EVBW54Nd8OGaNyDbDaLp0+fuvHPMzMzyGazgS2YaPnoCfiZ67C2W/aN091lp1qz2cTh4aHbvpqjtkk+f0Ksin9o2RcWFrC8vIzl5WXnymsikQs5LfJgMAhsRUVpLfef0118+F4VKekobB1dTXeeHXG6KSfPnR6U5iF4HB1C4uc7fMWdhgVG/Lsx1hCNTCYT2LLpY0U8HncZ588++wy///3vsbKy4rrOtEyn02OZudYpsWohtc7OMphOy2VJ7Pj42DWR6HbVSna1kvl8HtVqFfPz81heXsba2hqWlpZQq9VQLpdvbX6hWXCN5bV5hjG836zDRYZ7xOsYa85b6PV6bqNO9tjrRB0NEfg88Z4xkcdRY/44LD9eV9mubXU1Gu4kfS6Xw9/+7d/iL//yL537FoUkCUtNvV4P1WoVS0tLmJ6eDsx0oxpM42oSArgpT9GNJbmYmNNda3d3d13tm73hnCLjS2lVTad72S0vL2N1dRUrKytYWFhwWfmwMEPjY1944xNe42UlV9icfy6EJDx3ueHCpRoChgQAAkk7jiDjgE0V3PjPnp4TqwjaBmwIx52kL5fL+Ou//mv87ne/+3Odzy8KfJC1hETyaqzKGJtuPONkCnYY5zIz3mg0XJzOhhVOzB02D1/dV1YRpqam3By71dVVp6rjDDp/aytf3MIEm+7Yo4MwVOTDZBsXG6ruSFzd6IIWnnV43acPuFlUAbj5g0p6egr+UFG/kUnFRplMJpBcNQzHvZY+6lA1GYnjb6DIv6N1VgmrbvVEwu/u7rq4mdlsWklNVKmwRrelprhmaWkJKysrWFlZwfz8fKDmzvMLK3upSIYWnu2xmqWnJfU7BNlIo/0HTAbqcAvO+dc+dwCBvMDExAQuLi4C3YlMADKs8ZPHXMR0zwFWVZhLMQyHlezuAUmnSjk+VDrB1a9Nc5wziXB0dOSSc4eHhzg+Pr7l9qoLH0Z2imvm5uawuLjoMvM6YVZ1/GFDKnSQJRch3X1H1XGanWd1IpfLueoEQxmWGDnFhhae3o56DdoHoKVK9QSY5AxbMPheTZ6yZ1+3zTYMh21gOSL0QdLpN7T2dOHp7pPsjG2ZmfdnutG68zOU7GxRLZVKqFarrt9dBTYsw3GsVpgeQEtgJCf74Xd3d9FoNAKNOszdMJzQGfz5fN5p65m84zF140pNPvI8CF1ASXqqAZn8pOejjUP+PeI5VSoVt7+eZe/vh21g+QD4iyAfVD78nAzL18nJictgM0nnZ+JpVZmRp8a/Wq26dty5uTnUajXXqUeya7+6Ep4koiXl4Imjo6NAEpFeB7X0jN3VracLrXGzdvwNI7zvwYSBuRPeW5XXqhhHR5BR8ky1YdgAT0M4zL1/D6jb7A+K5IuE94c80FqR8CyBsSGGE2RJdN0Zhp16JLs/xUeTdbrHHEdcMa+wu7sbaI+llp4NNFqaYzlSd/HhIqLNM8MID9zetivsnLVVmQlNvpdfKUKanJxEtVp148EtiTcajPQPhC8FVVUdG1b8jDyAW2TXYRu0WrVazb2q1aobLOm35NKy+7p0XwDEufTU1FMX0Gw2cXZ2hqurKzcrALjR0tPia/2bVpmDMVVpx5BlGOF5bJbZGCIBNwM+9WtYLM8Enm6TRVmxJfFGg5H+PaAEU+28CmlIRhKcD7tucMGpOuyAm5mZcQ0xvgvvT8fVrbJ8aS/LiiQ8W2OZW2i1Wk5fwAVES3O09FxYtDKhLr0m7bQCQWh/AhcU5i1IUrX0qiMglPDpdDowT99c+/FgpH8A/K44H7TiGqerbJcx8uTkpCO7Ttcpl8u3yM7jqeZcZb1Kdq2Xs0VWQw3tYSexWYbk5+k5c2DF9fV14LjDsvR+YpJk1Q0t7/JSwrrlVJSUy+Xcrjl+85Dhfhjp3xMkuA7BZBxMnQMFLCR8Pp93hFeyMxPvD5PUTLx6FTpEglNk2DijTS5aUWCszPidRGfMroIeJigZ82tFQpN2fhWC98VX8fGlUmWKhHRSUNg9ppfAJCdHkVF1aFZ+dBjpHwi1ZnRZSXQms4CbzkQ+uEp4zszTUVoqbfUtu+YOtDOOhOYoaP47BS5a/uI5sSSoLyU8ycgwxRfehBF+WOmRiwpLfdxAg3kHxvE+aTXpx7CDMwvYvqz77Flb7Wgw0o+JYfpvJuRyuZwT2yQSCSfPpZViwq5SqbjSm/be6wOsca7q/bX+TwLqvDklK89XLS5FNvl8/tbUWoqMuFj4zTOjlOV8YREFPbzGVCrlEoKs9fsThXhftZzJcy8UCi6xqdt1G0aDkf4B8ON5bTPNZrOB6TLsymN2nJae03fUugI3WWx+T2UfB1xw3zi232oHGxcYfrY2o9ALKRQKbvqPX/qj9Q0jPJtn7irLDRMXUXNAV1xFPUwQ0sX3m7r8EMEfZDJsZLhhOIz0HwC+i0+ix2KxW+OlNDEH3JCc4QAJT3de23BZY9fmGOrbdaoNXWF6DlxoSqWSK//5G1H4hOf36lGo1mAY4UlQ7RPgBpaspQNAt9t196fb7SKVSgUy94RWOjRM0M5BwFSj48BI/wD47alh8b3G8vxKl111+cCNhp81bN1CiiU39t2zMSZsKIUq6Eg8Jr2YKGQZ0Cc83W0lPGN4Li73CW/Us1D5MMMY7ljb6/XczrXdbjdQLeA1+F4USR82MFP/D1S5ZwiHkX4M+KU63ePNJ7+Wj1Qhp5adwhm/550EpOJNXXr23LPspv3uJISKfVjLJvFU5KPTfVgJ8MdUn5+fu9bhYXPl1cqz9ZZWnln2UqnkEpRM3nW73UBJU/cR8Id26FZX2qxz14ANQziM9A9AmCCHiTN/IfAntvqJKVoxrYurlp/E03ZVtr+qyo/uPF35SqXiyoGsZzPbrQlDbR0miZip11kBYaIbjaU1U6+xPEMJVgf4Of5ef7x+kt9PQGqbsG784U/WMdwPI/2YUCuvdXJaQhKc1pzZdH8YBC2jPvg63UZltLrbjL/vGxcR3X2H/fa+hadLr0IWuseaMNThIDoZKExWq9fhD9nQJKFOudX76OscfKutZTs9T92/TptzDPfDSD8m/FZVJbzutqI/c95b2C4s2qbrz3fjQ87FghZdhSy0kszMl0ol51Lr3H32v/tkpzvPUIOkZzegDrDQsEV77pXwXFT8ZCU9Bd28ktqBsHvhN9qoToGlSy5Kmsi0mP5+GOnHgDbZ0BKT9GrpSdQwxRx/z4ddJbu0iL6+nladlpDQxJm61Jy9ryOz1IPwvRV/TLVWBICgrJg/a6lMXXN6LNqIxLZdkpmLjHpGYa45/43nQZeeikMKkXTTDMP9MNKPCb/JhiRWi+xv0KDxv2bI2b/OV6/Xc/GszpX3FwCSTsuAFMFQcKNxuyrf/FKhP/VGE4SanONio+2uAAJxOBcXXUw4804Hq2p/gAqJeM+4MOlMPd7LWCwWkBrrHL2w4ZmG2zDSj4mwzjoluG+9Nfbl+/2GGS1TabxPQtOFpxVVi8pyl86gZ8xOq0orq2VDnVCju8jSampHm4759pV+avVZBaDQhgsLXX911ekh+Raf5PWJz14AAI70fjxvhB8NRvoHQN18P+mkpNSe9Kurq1strITuP6fTc6hV1x56DQH4WXpMf9MJX62mixZJpuEHNzRh6U8Jn0gkAgM8fXean9fpdAKehF+d0NieoZGf7NS2ZODGw4jFYs5b0kXCCD86jPTvCZ0Go6IS4ObhVpefllznx9Gq+p1o2qRCFZrGz/6mDrS0OlvuvpevH1D1IHee4bV1u1332ZeXlwGvgYsDPZfLy0u3SGlfvnbXqcX3J+boMXmPGCqod6VafUvgjQYj/QOgLrtm3il24b+FdY3x4dWdY1TJp/vX+0o0f2IOEFQH6gAPTSrq6KkwEZE2ugwGA9cc5J+3/3naIcff6d+zkSaZTDrlnXo4WvbkOdMDCdMEqIuvCkDNJxjx74eR/oHwS21MwPFnTnjVeXD8mkwmnaiEJPTr9cMaSTQDr114Wj5krDxMIwAEE3B+2KA5Ba3jh22coSOufJIyUamZe43/6ZmohfeHYfJYvA/a48CWYCYtfS2AIRxG+jHht35qHE7XmOT13W+1rPw7LTWp9VZxjybg/Fq7El4HaTArrzVxEomLlXoSfGmd2y9RqjehHkRYXK3ny2MBcMQH4N7nH2eYEIj3TGW+bEtm+GCW/n4Y6R8A33L7wx4ZaxLqEvsuNgBnJcOGSei/c3HRMVO6OFC9x6+09P5kWVXQaQztLypa0gs7Jj87rPGI90atvS5WAG4tJmHJUV0gU6mU6ylQebEO0jDcDyP9A+Bbe10EVLVGt50uPV90ldlOqy47cBPrqsuuSTG1/GGWXjPxw1SA2s2nGgJ1v5X0VL/pTrJ3lSt5XWHQjjgVC+m/8z5r52ChUMDU1BTm5+exuLiIubk5lMvlW9NzDHfDSD8m9KFSy6IPrP8Ke79afj8jrfkCzX7rBFk/rladv1rjsMm8fL8uLky0qXhHJcaUEau4SOvp/n0I84aUlGH3KcxTYFKxUCigWq1icXERq6urePTokdus02bkjQcj/QNBS6txL8kLIPAzv/cFPVqmUiLx+Jpsu7y8DCT6lJxhC0dYSOFbZLrcbHFVQvJYXEy0jTWM7HpffGmxtsbyM4bNxGPOgdfPHXq5Zfja2hoeP36MxcVFVKtVc+0fACP9A+HHpWE1ZrXA2oCjJTXV7/ukJ3G4WHAwh26WAeCWQs4nnirhVFRzdXV1K3+gLjeJzu/1c8ISbbHYzdRanQysuQj9HM19aLKOx/Et/OPHj7GxsYFHjx6hVquhWCwG5t2bpR8NRvr3gGa2w/T3Pul1Y0b9vXoDqkKjpaRFptpOcwVav9a8gp4fG2CA4CwAJZ/vtahwh8fyXXD/q0qD/a47LkAquun1eu7cmGPwk3bT09NYWlrC48eP8eTJE6yurmJ2dtZtWGmx/Pgw0j8QfizqN9f4jTe+rNQv+/F7QjUAOjdeN6TwZ8QxDr+6unJ/2+l03DF9NZ5fIlNC3pWX8K+BikIdwulLiLUiwKSj7y3Qg+H71aXf2NjA6uqqS95RoegvdIb7YaQfE2EWT2vzWucOexB9N1wnvarARY+pm1H4OnyNZUl67eE/Pz9HMplEu90OJP+4ACnZhyXWfB2Bhg866prDMPnSKT3AzcYWHAqSSqUCgzgBuDp8pVLB4uIi1tbWsL6+jpWVlUC2PmxbbsNoMNKPCT9mJinpomoyTRNs2lYbpprzs/dM4inZlfS6qSTJrIk3bn5xfn7uZtXrfPxWq4V4PO7KhsBN33oY4fX6VZDEll5uQMEXR3zTGnNBIuF5HjqZJx6Pu80sZmZmsLy8jNXVVSwvL2NmZsaN+/Kv3Ug/Hoz0D4Bq5bnTKy21nyn3XX1Vs6nu3I/nack1NtapNDpeC0CA9Nouq9tQcS873VFXBTd8/zBVnPbwk+yc1MOdejgEkwM8mIdgzV8XI92BZzAYuAlA5XIZs7OzmJ+fx/z8PKrVqtvbz7fwRvjxYaQfA751Z6snd2zxFWX+9+oB+C9fheYPjdTSF8nu69hVZKMTZnR2PQdlcOqMEl+3qQpT8HERyufzgZn23IuP5NSJPUBw0w4KfdgPz8WG91G37K5Wq267Lx7PCP/+MNKPAZ/0TGD5pSy/rDVMiKKLglpV1edrG62+/Cy9xur+7rW0+GrplXgc4+UPs9Dz0S2qOG2Xm1goOf1x3sCNZkEHZ/h77FEWzOk/DA+y2Wxgi24NrwwPQ2xYZvY/YJMJPKjVDrPS/t8O+7ewejehD7Yv8eXv9asey2+z1Tiabj3ny9G99tV7vqSWicZsNot8Po9SqeSm7nJ7LCW7r47TUMefIeh3GfrDNdWzMbKPjdCbZaR/AO6T2o56jGHQB/uuSsBd5+bLfNXK0qUfpqVXwtOlp5Wn9WVmXsuHd7UDh52XCoWGeTZG9veCkf5D4yFkfx/c9+CHaeDDFgD1AsKGbPCz/BZcLRWG9f2Pen5hIZDvyYy72BlCYaSPKsJyC74Wf9jgCpXz+kNB+Hcf4tyM3H8SGOkNNwjzCobBrO6vFkZ6gyFiCCW99SMaDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSG8wRAxGeoMhYjDSGwwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWIw0hsMEYOR3mCIGIz0BkPEYKQ3GCIGI73BEDEY6Q2GiMFIbzBEDEZ6gyFiMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSG8wRAxGeoMhYjDSGwwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWIw0hsMEYOR3mCIGIz0BkPEYKQ3GCIGI73BEDEY6Q2GiMFIbzBEDEZ6gyFiMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxJO75fezPchYGg+HPBrP0BkPEYKQ3GCIGI73BEDEY6Q2GiMFIbzBEDEZ6gyFi+P/bxq/th5w+KwAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 35\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO19OW9jaZbloSQuIsVVpPZdsWRWA2O002ijUQ0Mxphyx2t/MN44bc0/GHf+wjgFjDdOeW2N0w1MATnVidhziwjtJEVK4ipKHKP6fDrv06NEMqIqK+PdAxARGaEg32O+8917z91iw+EQBoMhOpj5uS/AYDD8eWGkNxgiBiO9wRAxGOkNhojBSG8wRAxzj/y9Sfu/IAyHQxwdHeGf/umf8C//8i+Ym5tDPB7Hzc3NVO8Xi8XQbrextraG3/zmN/irv/orpFKpz3zVhj8hYmF/+BjpDb8ADIdDxGIxxGIx3N7e4s2bN/jd736HZDKJVCo1Fen5fufn5/jVr36Fv/u7v8PMjDmGXwKM9F8YhsMh3r9/jx9++OGzvef19TXa7TZisVDDYfiFwY7uLxBzc3dn+ecgajKZNMJ/QTDSf4FQN1wPgEnfg/92bm7OSP8Fwdz7LxzTini3t7dgifa072H4y4RZ+i8Qt7e3P/clGP6CYaT/AmEqu+Eh2NNhMEQMRnqDIWIw0hsMEYOR3mCIGIz0BkPEYKQ3GCIGI73BEDEY6Q2GiMFIbzBEDEZ6gyFiMNJ/gbDae8NDMNJ/gbDae8NDsKfDYPiM+N/fHOA3/+P/4D//z/+Leqv/c19OKKyf3mD4TDi77OEf/9f/w+B2iBdHF1jMvMJ//0//7ue+rHswS28wfCZ0r28wuL0bIH3ZHfyMVzMaRnqD4TNhs5TGf/n1HmIxYCWXwn/9909/7ksKhbn3BsNnxH/7j1/jH//DcyTm/nLt6V/ulRkMv1D8JRMeMNIbDJGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSG8wRAxGeoMhYjDSGwwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWIw0hsMEYOR3mCIGIz0BkPEYKQ3GCIGI73BEDEY6Q2GiMFIbzBEDEb6LxB/ilXVw+Hw8R8y/CJgpDc8ilgshlgs9nNfhuEzwUhvMEQMRvovAGqF5+bmMDPzef+39no9DAYDs/ZfCIz0XwAYw3e7XRwcHKDVan2W9yXJl5aWcHNzg06n4/7OYvxfLoz0XwBubm7Qbrfx4cMH/PM//zOOj4+RzWYxMzMzFTkZwycSCXz99df4m7/5G8RiMVxcXKDf7/9JhELDnw+2qvoXjtvbW9zc3KBer+Pdu3d4/fo1ms0mkskker0erq+vH32PWCyG2dlZR/aZmRnMzc1hYWEBOzs7ePLkCQqFAobDIa6vrzEzM4PZ2dk/w90Z/hQw0n8mTGpRw+Ljcd+DPzccDnFzc4Nut4t6vY4PHz7g+PgYrVYLt7e3D8bgJC5f8Xgc8Xgcs7OzSCQSSCaTKJVK2NnZwfr6OorFIhKJBIbDoXs9dC/T3Ne0MK1hMhjpPxFKgrCH+3M8kPq+/Jzb21vc3t6i3++j2Wzi9PQUJycnaDQa6HQ6GAwGGA6H9z5fLXk8HkcymcT8/Lx7pVIpJJNJpNNpLC0tYW9vD5VKBZlMBvF43IUMPFRisdiDpPavPexX//rGBT+f92QYD0b6TwCJRxdbY10+vP6v/u/DMIooSvabmxtcX1+j3W7j9PQUHz9+xOHhoYu7SfiZmRl3XTMzM+5FsmezWSwsLCCfzyOTySCdTiOZTGJhYQGVSgXLy8vIZrOIx+OO4Le3t6EHyijy+wfjQwel1gQ89v7qrfC/DY/DSD8lSL7BYIB+v4/r62vc3Nw4Mjz0Ah52732i+4QfDAa4vr5Gt9tFs9nE4eEhPn78iGq1im636/49Sa+fOTMzg0QigVQqhYWFBWSzWZRKJeRyOeRyOWftc7kcyuUyCoUCEokEYrGY+3zeYxh5/cMg7Pp5QPK9CL1evyDI/05isRjm5uaQSCTc9VkR0Xgw0k8BPrDX19fo9Xrodrvodru4vr7GcDh01pQPsf8gh5H/IcKTHDc3N87Cd7tdtFot1Ot1HB8fo1arodVq4ebmJvT9+Wdzc3Muhk8mk8hkMshkMs7ip9NpZDIZ5HI5FAoFpNNpzM7OOrISvC5eUxiB/Z/lzw8GA/fv9IDS70sPK/89ALjDK51OAwBmZ2fv/RtDOIz0E4IP32AwQK/XQ7vdxtXVFdrtdoD0dDv1IQ47AMLeP4zwSph+v49ut4vLy0s0Gg00m020221HeH7u3NxcoKiGpPKvi+KdWv9CoYB8Po/5+XlH+n6/78IFXgcLd0h8n7iEXj+9Ip/0KiwqgfX+aeVnZ2cxPz8PAIjH40gkEpibmwsNOwxBGOkngD58/X4fnU4HV1dXuLi4CJBeH1xaVp9oAEItEz+Dvw+zkvzsTqeDbrfrcuf8PIp0t7e3jrD8PACBg4SH1NzcHObn57GwsIBCoYBisYhsNotUKuWIfn197X7tdDpot9tot9vodrtOOOQhwkwA4216KiQ9DwolMa+d/041BPUoqEkAQCKRwGAwuOdpGEbDSD8hhsPhPStPSz8YDAD8kVx86PUh9ok/yuKPiuX14fcfdFXk+dlanKMioxKJ1jmRSCCTySCfz6NYLCKfzzvSz87Ouhx9r9dDp9PB5eUlms0mLi4u0Gq1AgceU36JROKe4u9b+rBr53dG0jOk4T3zQEskEgFvwTAejPQTQMlyfX3t3Nt+v49+v+9cabVuvotO8tMqjuPmA/fVfz1A/Dy7FtqMOlDUytLK060vFApO1CNped+9Xg9XV1eo1+uoVqs4Pz/H5eUler0eADjCMwVIt5tC4GAwCFh5AAGNgYcb78EXS3nozs7OOu9iVLrUEA4j/RRQ4oSJWPpzYb8Pw2Nqtcaqw+HQucK0kCQJf9X30UMn7PCgoJfL5ZDP55HL5bCwsIBEIuEOKFrZ6+trtFotNJtNVKtV1Go1XFxcuMq/ubk5l/pLp9Pu4FCrrVY+FoshHo8DwL3wxz8oNENiLv30MNJPARLHr2ojaIVHCXmjhL2H4JN2MBg40qs2oAKZEp7v4QtnzMnn83kn3i0sLATIqqr5YDBwImKz2US9Xsfl5SX6/b4jMElK70APD7+mQfWNeDzufoZ/rvehqT4lvRF/Mhjpp4S61ozdgTsy+bF8WFxPqzyuok/rqO4v/55xvh8z89/4qjZd6nQ67YS7QqGAbDbrCnRI1Jubm4Bq3263cXFxgXq9jkajgcvLSwwGg4DAxu8CuDug+Hs9iHhY0l2/ublxP6v37usb+neGyWCknwB+nj3M0vupp1Einu+OjxPf8/dKdhUVO52Oa7Kh0g7cH5/FOD6TyaBQKKBcLqNSqaBQKGBhYQGpVCpg5bUYp9vt4urqCo1GA+fn52g2m2i1Wo7YmjbkwUci+yERrwOA+3kKeVpN6Kv3Sny9J8N4MNJPAb+QJMzSjyK7uvSaj/ZJr8RW115V8H6/j3a7jVarhVarhaurK3Q6HfT7/VC9ge9JhT2bzaJSqaBSqaBUKjm1nu643i/z9O12G41Gw1n5ZrOJbrcLAO47mJubQzKZRL/fd2RXd58WnVkDTfWpcq+uvN7PqPsyjAcj/RR4zNL7xTlhxNc/G8fSA8HS316vh1ar5Qp0Go1GgPS09LSIepiwsKVQKGBpaQnlctmp9aq2q4UfDAbodDpoNBpOwGNRUL/fBwB3WNDTYLjB+9KsB9+bh4F6BxrnUzzki2lBc+2nh5F+QqiI58f1/PvHKvL8GN4vOyXRgCDh/RJcCmm1Ws3F1uyw891gVcTj8TgWFhawuLiISqWCYrGITCaDZDJ5b9wWXfJer4eLiwvUajWcnZ2hVqu5Q4YpNFpuFdh4SPHgYHqT18XiIS0s4uczNNCUHfBHTyLMxTeMByP9FBgV1/PvxrHu45TmPkb4Wq0WsLqdTidQxOJ3/dGaplKpe1Y+lUrdywTwPfr9Pq6urlCr1XB0dITT01M0Gg1n5UlwuvL6ebwP7VXo9XpOYNSaBVp6HnpaFOSTXvsAxsl+GO5gpP8E+IQGHib9Q4RXS6xWXglPl56EZw99vV7H1dWVa/oZZQXVypfLZSwtLTkrT9ecBNKMAd364+NjHB0d4ezszH2euu9hJbVa+sv78F11AIFGIFbw8e/03/AewnL0RvzxYKSfAmGuubrEkxD+ISsfJtpdXl6iXq/j5OQEZ2dnqNfrgdjaz8vrNbLyrlgsYnV1FSsrK8jn867UVq08P5tW/uTkBAcHBzg6OnKDOrTBSAnP6kC+6NprlyAr+GjZqdprG6+KgBQnZ2ZmXL19WExvxH8cRvopEUZ8/rlaev9gGGXllWz8VWvV2dxTr9dxdnaG09NTnJ2dBdxsjeOVELzOeDyOfD6PtbU1rK+vY2lpCdlsdqSVp3hXr9dxdHSEg4MDVKtV93laVafhA8twGTIwh++n7LThp9/vI5FIoNfrBdJ4vuJPoTBMpDSMByP9J0KJz/9+KC03jZWnW99oNJxbTyt/dXXl2lvDCM/PSSQSyOVyWFlZwc7ODra2tlAqlZBOp+/F8hqDt1otVKtVHBwc4Pj4GBcXF4HZAerW++O32KEXi8WcZSfxSWYAge47egEsQFJLT90gmUwG6u75vRvGg5H+E6APmm/5lfBhpPcLfRS+W8+utvPzc2flWfPuu/VhFn5mZgbpdBqVSgU7OzvY39/H2toa8vl8QLFXPYGu/cXFBU5PT3F0dOQGdfiutXoSqVTKDeJgvzvjc79dVjULHgQkP4BASKCHmvbvGyaHkf4zwSd8mAs/Ki8fVoijVp4VcNVqFScnJ6hWqy6OV1fXV+sZZlCt397exvPnz7G7u4tyuYx0Ou2EM9/T0Cm71A+urq7udcgp4ROJBBYWFtwEnvn5eXc/WjasnxXmYbBwRz0OLd/V/zZMDiP9JyBMPfbJ77v7YS++lxKebm673Xb5eLr0LMR5zK1n5V0ul8Pa2hqePn2KJ0+eYGVlBblc7l4sr9ehxThnZ2c4Pz9Ht9sNNPPovbGOXzvsUqmU81bCDkB+Z7xWXoP2C6iIx/vTg8cKdCaHkf5PhFEEH5WL99Nz6taTeBrHa3rOHyShh838/DyWlpbw5MkTPH/+HFtbWygWi4G8vA+Srd1uu775Vqt1j3z8jHg8jvn5eTdrj007FOT0M3jvGgIxXedbfX4X/JX/ztpqPw1G+inhV8wRvqj3WOzOX7VTzid8rVZDrVbD+fl5YDTXqMYTWtJkMol8Po+NjQ08e/YMOzs7WFxcDBXv9Do0VXd+fo5Go+GsvA96E+l0OuDaJxIJR1D//fVQIuH9rkTtrNNuwVEZCsP4MNJPgTDCP+Tqh5F9FOHp0quFPzk5wenpKc7Pz53FHeXWA3fjp+bn57G8vIzd3V3s7u5ieXk5MBwjTPHWeP7i4gLn5+e4uroKVN7x/piT52w97cXXcly64xqH83thbl6HW87MzARcfD3cRhXlmHo/Poz0U0It0biVYf4h4cfwtPDsVT89PcXx8TFOTk6clVe3fpSXwRRdoVDAxsYGdnd3A2q9H8f710TX/vz83I3D0lZdJSy34XBu/sLCgvsMTcXxoFKrTYKT8NrdR49Av7dRpcWGyWCknwJKdj9VFnYIPER2jeE5aPP8/NylyY6Pj1GtVl0VnMbVfnspBTGW2i4vL2N7e9vl5Ofn510FnCrpvivd6/VweXnpZuB1Op1AXz0AZ6F1CAc79bSSjnsBtNdfr1kr8dhP72cGwtR+Xxzlzxseh5F+QvjkHmXtw/6dH6PSCoa59EdHR470tVoNl5eXI628nypMJpMoFovY2NjA1tYWVlZW7lXe+ffD3w8Gg8ASjfPzc/eZPCAYg8/PzyOXy6FYLAZIPzs764aG6l4AvX4dHsJyXZ3Ww5/Re3xoNoFhfBjpp4Bv5Wm1tbhFf84nPPPMtIKtVsvFz6y4Oz4+DhTh6FLKUYRnCWw2m8Xq6ip2dnawsbHh1PqH3HrWBXBVFsOKZrMZsM4kfCqVciuxdAgHh2Iw5ccR4drrz+vm+2m9vpbe0nPhn+nn+4q/EX98GOknQJiV98U0/xBQ919deZJdR09Vq1Wcnp6iWq0615pWUsU7fhazBKrWZ7NZLC8vY2dnx4l37KIbZRV9xf7k5AQfP37E6ekprq6uAh1x1AsWFhZQKpWwvLyM5eVlLC4uIpPJYG5uDt1u15UOX1xc4PLy0o3zYu+9ZjhUwWetvj99yJ+RrxN2DJPBSD8hlOz+CKeZmZmA9QfuRk1pdxnTcRTsdDCFzpLX9tWw3LSmvnTT7O7uLp48eYLNzU0Xyz+k1lNIbLfbqFareP/+PX766SecnZ2h0+kE0mycrVcqlbCysoK1tTXXoptMJt33wUpC3ke73Uav13PfH+N+7QAkkQG4ll3+Pa9fu/e0tNfIPz6M9BMijPTaAaZ5ehJfB2BwkizLas/OztyvzInTKqri7Yt2owi/t7eHr776Cvv7+y5FN6rUltdIV7xWq+H9+/f4/vvv8eHDB1xcXAT23M/OzjrhbmVlBRsbG9jY2HCfE4vFnOinnkyr1XLxPK+fUAFSc/R+pyJ/r2QPqzUwPA4j/YTQnLpOdPHdfM0r08Jz7522xzJubzQaLnZX665eA6GFLfF4HLlczjXT/OpXv8Lz58+xubmJYrHo1HStitODS8ttDw8P8e7dO3z33XeuhZbFNdQL8vk8lpeXsbW1hZ2dHaytrbl11tQpqA1wYCf37bGmXjMBvkDnq/H8exUQNb1npJ8cRvox4Vt4XVOtCyTj8bh7uAG4Qhd/4o0SvtlsOqFLp8o85M5TTGNqbnd3F8+fP8dXX32FnZ0dlMtlZDIZZ+X1PoA7C0/h7uDgAG/evMHr169xcHCAZrMZEN10eu7W1hZ2d3exubmJSqWCdDrtrDyr8JimY3yvM+11bp9a+FHk9XsY/JjeSD8ZjPQTQONfbm3VajUVo2KxmNtuSwuvhPen3nAnnnoMauFVtCPhc7kclpeXsb+/j+fPn+PZs2fY3t7G0tJSaOWdT/herxcg/IsXL/D999+7WJ6fz6q7xcVFbG5uYn9/Hzs7O1hdXXWfQ++H980DUfsD9F6U8L6F90ttR8X+auWN+OPDSD8m6Nbr2CoKbrSIGmtqZZsSnvE7O+VYRz+qRVahnXNMy+3v7+Orr77Cs2fPsLW1hXK5jGw26/rkRxGeZbYk/LfffovXr1/j+Pj43hbaZDKJQqGAtbU17O3tuQq/UqmEVCoF4I9z7FSEYyEOLTyh5bu63IKTdbSOQbUMZkNGDSExjI+xSB/lxgZ16bnDrVaruXp4rnTS1BNVfG6DqdfrgdZYte6cEqMPd1geXltYaeEp2rF7rlwuuzJYn/B+DN9sNnF0dIQ3b97gX//1X/Hy5UscHBzg4uLCXRM/jyHE3t4e9vb2sLGxEUjR+SlK1Tv8slkSntttdfmmr5f4h4YvZBqmw1ikj/IXPBwOHdkbjQZOT0/x4cMHHB4eol6vo91uO4vIBxqAy8VTqdc+eC1JfahrTF1XzcMzLffs2TNH+Eql4lztsFHW1CHYLnt0dIS3b9/i22+/xatXr1wcz/HU/Ey69VtbW9jb2wt4ExxiyXQlcJep0MpBkp1eSiKRQCqVQiqVcgcUr9Nf/83WWk2H8v8Lfx2nItJwB3PvH0Gv18Pp6Sl+/PFHHB4e4vj42A2IbLVa7oFUN5VxP1NWzMlrKarm3R9qntFKu0wmg3K5jJ2dHTx//typ9GrhNdZV666z6z9+/IjXr1/jxYsXePfuHQ4PD92OeSV8IpFwgzT39vbcZ3H9lZbMAnDhj9bYK+G1I48tuOzrB4JaAwVA1UtYpKO1EUb4yfEg6dvtdiT7likcAcC7d+/w+9//Hu/evXO16GxCoVvP1lB9ePngttttR/Yw687PU/hFKZqH39/fx9dff33PpdcUFq9B3fnLy0scHx/jxx9/xJs3b/Dq1Sv88MMPOD09dfl4pucYpnCu3ubmJra3t7G6uopCoeCISneen+cvs+D3yAwC74ODNnRZJr8zWni+jw7EnJ2dddepL7/pyfAwHiR9o9HA73//e7x8+dKVcUbhi+XDent7iw8fPuC7775z8bsOsNCuNgp4ANzDqA+uro8ex7pryyljeE3L7e7uuhHW/joqLavtdDo4Pz/H4eEhvvvuO7x8+RKvX7/GTz/9hHq97oqA/HiZrbnr6+tOuGPen/cblg1g6MIDkYehbsnlWmySHoAb0sHDki8eRCQ+v1N+r/6QTO0ENITjUUv/29/+Fr/97W8BAMlk0lVVfcnQ+HFhYQGZTAaxWMwJTEoQPtCqQPNBZEGKxre+KMX3Ae6WZFDV5pJJjq1+/vw5njx5EqrShxG+1Wq5Kjsq9G/evHHxu86843XQHad4t7W1hc3NTSfchaUBKXJyg2632w0IgbOzs64jr1QqoVQquSUbOl2HYYgSn2TmIcI/1xqAUfMFDOF4kPTD4RCtVsv9N2eXf+lQxZmxbtgsOXZ/cZkDDwvtlfd3qj/myicSCUeQSqWC9fV11zxDF7tUKgUWTpKsPuGr1Sp++OEHfPvtt47wx8fHrrZA8+eqH3B67vr6OjY3N7G8vIxcLhcYwMHviYebdtRR/adLTm+lWCyiVCqhWCwim806b6HdbgO4Iz2Jreo/vx+t9Gu1WoFyZb8d1xCOB0kfi8WQyWTcf7OhIkpgrAoE3W998Jm2UuKpGx+We/eFOs6Mz2azWFpawurqKra3t7G9vY3NzU2srq5icXHR9azTgvoWXhtnfvjhB/zhD3/AN998g7dv3+Lk5CR0jLVe09zcXCCWZxyv5byM5fl5TE2yspDGgY0xmUwGxWIRlUrF3QPderrqw+HQqf4Mhyh4AnChUzwed+KoNvNks9lAtsAwGo+q9/qw6sikqIJuK3DnotPSa655VCqJD6Qv1GWzWSwuLmJjY8NZdg7AKJVK9/bH+y42wwrOqn///j2+/fZbfPPNN3j58iVOT09dLX3Y9Fz+mkwmUSqVsL6+jvX1dVQqlXvlvJoV0Ln8TEly5HUqlXIhytLSUmBhpm6epXXmIaKk11idXgErHLVtt9frIZ1Om4s/BixlNwEeeqBGKfGEPyGX8S5Jsba2ht3dXTx9+hS7u7tYX18PWHaf7D7hKYI1m00cHh7i1atX+MMf/oA3b97g5OTEZRtGWXim6DKZDJaXl51b78/V0wNG123V63Wcn5+7jA/d+nw+j0qlgqWlJVQqFWflY7GYE+OohejwTN14Q+vNA5ekbzabgb6FbDZrpB8DRvop4be3Agh14f1f6ULH43Fn3be3t/H06VM8e/bMDb4oFApulDTd6sdGVl9eXuLk5MSJdnTpxyE8C3HK5bKz8tyCozvjgbvYm4s4OAeAo7KHw6Gr5CsWiyiXyyiXyygUCshms64piYq8HiZ+daIeplruzNoHkn9xcfFeQZAhHEb6CeELbyrwaUxP8O9VmZ+fn0c2m8XKyopLwz19+vSeKk+XWr0EQknix/EvXrwIiHajCK/XmEwmkcvlsLq6GuiRZ6qWn8lsBKf2siSZe+76/T5isZhrCFLxLp/PY35+3in219fXgYNs1PWpAEpRVUlPN5/1AayKNITDSD8BtPdbx0/pw0oyqgvOlB7HRS8uLmJ1ddVNuNEGFlr3UV1kfvmprpP+8OEDXr58ibdv3+Lw8BBXV1eB2oBR90OrXC6Xsbm5ifX1dXctdOtJPCU8d+uxgYhTdijecYYeLTy1AV6/306rnpN6UEBw/HUsFguIeZeXly5VyHs1Sz8aRvoJoCktJaZuX+HPqRvPvnfWza+urmJrawtbW1vY2NjA0tKSi3W1AWXUg+sLd2yPff36NV69euWm3rAg6CHCU61nff3m5qZrzSVBeX/anVetVnF8fIyjoyOcnZ3h4uLCWXlqA4VCAblczq25YqjCTAfvRb8z9YgokPopT07ZbbVaTthj+s7fqGu4DyP9BODUFqrSyWQSQLD/W6v0dPNLqVTC0tISVlZW3KtSqSCfzwdy7o+1i6pyTsIfHh7izZs3ePnyJX788UfU6/V7hTcKJfz8/DyKxSLW19exvb3tJuEkk8mAhadwxy7Do6Mjt7OeVv729tZ9N1puq0Kkkt1PZ+pkHC2x1fQnf880Icucw0ZsG8JhpB8TdDcZq5KoGsfrz9DSLS4uolwuO/V6cXHRWcBMJnPPa/DdXT908Pvh2R774sULvH37FtVq1RFwlLCohF9cXHQFQGyoSafTzsKyQIYkq9Vqruno6OgI1WoVl5eXbioOt9eyqYaEH9U+q6uuaOGV9KzEAxAodGJVHsmuY8bM0j8MI/2YYD6dK5zYeKIiGwmvqvXS0hIWFxexuLgYsHwU6h4a7ujH776FZ7ecX23nP/iqCzDtR8JvbGzg6dOn2N/fx+rqqlPXqZbrHAHuqme3Ya1WcyOyKQamUim3slqLiIA70mpjDqvpADjdg2TXhZ78HnhAaOWe1uPrbgCL68NhpB8Tmscm6VmlxhcJTwtPK08XnlZdq+nUnR9FfLWOHGLJiTccgPHx48fAjHqNlbXyj6uoSPjd3V3s7+9jY2PDTcIh4fl5qtIfHR25ZZo8YKjWU79Ip9OO8NqPANzpAozJOReQwp5P+l6vF9hvpyk5nVHIl3oOhnAY6ceET3qKU8lkEvPz886lzefzKBQKAdVaLbs/E84vtFFoHMu8+Pn5+b0RV/4ADO1j10IgHcLByj/G8VTrZ2ZmArv1uISDG2/YistZAhTu+P1wMAYJzxCBZGRBDwtsWq2Wq9XXcmSmBlUHABDQKbST0R/cYRgNI/0YIDEpzinJM5mMI7u+GLNrTKuqfBjRw9x5HZ9dq9Xw4cMHvH37Fi9fvsT333+Po6MjR3iNjXnddJlZ/76ysoLNzU1sbW25Mlu/4416AffZ8cVRXxQJSXh+NyS9TtTRhZu6xotpNsbkusnWX1tNaN+8bgvSbbhm5R+HkX4MqGvMuHV+fj7g6vPFdc105/24PYzs+q4hr8MAABRZSURBVDCrK69VbxzTxbn079+/x+npacBSAnAHC683k8kgn89jaWkJa2tr2NzcdMU3xWLRpdIAuOYZbs09PDx0Cn29XnfNNCQ8U3r8LN4vVX/1PHSVlz8P3++F970hv1KP3x0PFS0+Miv/OIz0Y4CqMl15Wnef8Izd6faHjWpWa+634erwDbaq0tpy1dT79+9xcnISWF2thNf2XNa9r62tuTbZlZUVLC4uugEWbG9lTNxsNnFycoIPHz7g/fv3ODo6ctV2SngdX02dQl16Kul07/2NN3wv/X7ZSafuvNbh+01MauFVwzA8jEdJr+4Va6ajBLbOkkQcAsHUG135h2J3fVA1Tqc15+CITqfjXN/z83O3BYdrq7n6ioIdlWp+jpKdqTiunlpdXXWioopstMjX19e4urpCtVrFwcEBfvrpJ3z8+NGtyaabDtyN01JXXNdMk9AU4rSAhh1xFAAp3vHFEEPDG51NEPZd0kMYlQUxBGFDNB5BMpnEzr+tb9rf38fu7i5WVlaQz+fdcEeq1aMKUAim3HSvHfvQm82ma0/lyupareYWXPrba/nga7deNptFuVzG6uoqNjc3XUltpVJBoVBwtQXaykoyc6zW8fExPn786IZ/Xl5eBmJuGgFaZh1lDcC9n2720VJZP0XHbALvh8MvNZ0Xpsgr8YFgOtKI/zAmGqKRSqXc/7AvGVSwh8Mhnjx5gr/92791wyz8uXR8aXqKcTktkApPLHJhOyqtObfWNhoNNJtN1yeua6GU7L5IVyqVXHkvr5Vxuw6g1I5AWtFut4tGo4GzszMcHR3h5OQE9XrdEd5f0KmVifq+6tYzPGHrK/vs1Tvhe/B+gDvSs+BGdwWqwMn7oHVndsKWWj6OB0mfTqfxD//wD/jrv/7re8MQv3Qwt5xIJNwedo6polg1ypKry63DJtrttiPX4eGhK3JRt53W0E9BqWXnsItUKuUWSm5sbGBvbw/b29uuLVZ78RluqJbgF94wLacxPAmvqT+GEXxRCOR1c/pus9l0o791lh3wx1BRvyt6H5x4qzPw/K29Cqb5+H3w/41hNB4kfaFQwN///d/j17/+9Z/rev5iQMLyoQ1Tp3UTC2N0/luNSf0CF7rPrGrjtlq6xtpPDtwRncU8zLeXSiWsra1hZ2fHEZ6TdsLq+YG7TIFOvWGl3cnJCarVamDOHXDXFkxyMaThZ9Azurm5cSu/Go1GoPtNN9Xw++N7Ux9grp7rwHRHgIp1vB/VFObn5+95M4ZwPGrpo45MJuMeWpJO3XctOtEx18whc1stC1wODg5weHiIarXq1ltp2onwy0ipcKfTaTdHj9Z9f3/fhR4U6lRf8NNezMWzeYbdcmGE5z2z4pCZCy2zZcst1XlaeN1Lr+GOuua01JyTB8AdlNpA48O/Jl6PX8xjuA9L2T0Cqst8uAEEFGOKYf5SC7q4jUbDWXjtPb+6urpHiLB6ee08S6fTKBQKbjQ1hUWKdWHtuYQ/AMMn/NnZWaDwBggSnulKLqngOGwAruhGXXqOsPLn0ivhtUVYi3jo3o+qsuNBxu+EPQ3pdNrc+zFgCyzHgFp4fQBpNem+U4Djq9FooFqtOgWeW25p3bVOPuyh1pp+1suvrKy4vXLMKrCZh5tn/KGZfikv++GpK5ycnLitPVzT5YuUbJelVWWHIcXJMMJrWpGgCOen3egx8RDV1d0aFvD/h04P1jn6pt4/DltgOQa0xVXJxNQSh0NSkNPUmy6upCegVs1/Xy18oY6wsLDgpu1sbm5iZ2cHW1tbbga+v8eO16eEopBIwrMfnm59q9UKbN/l4UFysSiJoYOW7LKOnjG8T/iw5h8tFeZ3qbUL/r4//X9BIZPty5wWTH0h6s/rYzD3fkwoKfVBVdJzQKQSn7Gtrnsa1faqU2P4UHOM1fLysquqW19fD0zb0ThWS1rpzpPw1BbYLfcQ4dXL0KEhdJ81/cg5dSrahRFexUi+v163jsBWy6/flfZAsAiJB5+JeOPBSD8FwiyoP5aZrr5uYPEtXliumcUu2WzWrYGqVCpYWVnB8vJyYMON7hf0ww6N3ymu1Wo1nJ6eOm2B9fQ65ooCIMtq2TWnn8WyWr3nx7wYLZ7h5/AzNBuio6/9uXjAXYqODUSsjNSpvYaHYaSfEn6nly5d1IffLxNlagq4v7tOxbJ8Pu8myZbLZWfR/L3w1AW0dFWbdVgIRC+EnghTkdfX14E6ehKRRNeaeK0m1Gm07XY7kHL0Y3AeaFpyq3P8/XZZ30sgKGpycm+lUglMD7Z4fjwY6aeAim8kv3aBEUxJ6VpnPQBYlaY9+blcDrlc7l6bLmv7OYiTabVerxdwkdWdJ+G5Xltz5yQoMwMkE6+HB5FmKDQPT09Gu+X8tCOAgHVnAY12HzLdx3n5/vcL3HlGauU5qITlxebajw8j/SdChTdVu5PJZMCiKxn8KjIWujD1xHHRFM4Yt7OCjnPufVGR5NHGHS2D9TfB0s3mddAKa/UlxTp+pqr0mof3Ca/uvHYnsuVYvQd6CWFWWkMgeiK68tqs/OQw0n8idJgjH27m3vng+w0yvnXnEElt4NEZejqAwi+j1SGTuuK50+m4AhdNDwIIxOssbtHP1O47phe1tLbZbAZGTqtLDwRXeOv473w+71KLVP9brVZAJ1D4IqdmM/hezM0/NkXYcAcj/SdA69FpsbXnPJFIBLrK/Akzmvsm2Wl9abloRUlq5rD5e75YyKJlwZrj1oUbOhNAra9qBdoe6+fhw9Jy+p34U3EpuLH5h15Qt9t1Hkyn03Gegd/jobqHVgWS8GblJ4OR/hNAC6RkYjkpXXglvf4sSa+DJBlbA3CE0mo//6XDIHVclA7CpFWnW0wrSZ1Ay2mpF2jaTdV/tfB+Hl4VehKeKTWO/2bWYXZ21pUoD4dD14LrDx1R194XO63OfnoY6SeEryj7rabsDVfSUZ1W8c5XxinC8Wd9QY5quc6VCxPPVFdghRpz2oyDOfyDc+nDWmPpcpPw2uo7SmGnlfZ7+1dXV90GXLbSdrtdV3N/dXXl9IRut+ssPasDtRRZJwob4aeDkX4KhJXNkuBc1KAxPMkM3O1iZyxOz4APuBb9MI4m6dl6q+KZ5rFJXFas0eJy0g/TfoVCIbCIQvPvPuH1sNGmIl9dJzHpfrMdmaO6OKIrHo/j9vYW7XYbg8HAXQevJZlMBg5JfW9qHLo4I2yclrn6D8NIPwW0xDWM/Lpa2m9r1Tx6v98PxLF8b6rwOnlGG3pGWXitBdCtsZVKxeW0OZZbF2VSpafYR6WeXXOsJvRr4XnPeujRq2AV4crKCsrlMorFYmBj7XA4dGGNEp4HJ78v4C4s0jJjrTYMK9c1jIaRfkIo4RlH+8MZFf7Qy7C+cI1ftTnGX900ivBKOpbvkvBLS0tYWlpCuVx2xT1U6mkxWYJLwjOO9/Pwo+rgfaVeZwlyQjAPGS2l9WfsUXugN+FvD+L3Tw9JF12M+v4N92GknwB+QY6SWQ8BHYLhD8AM2yTru6O6IIIWVkMEPShUU/AXZpbLZUd2uvQ6qZfhAAB3jczxs8qOLr1/vXSjtfiGWQGWENN1HzW7jvfhi46sWqRHoPUItO48DHXQphY/GUbDSD8FfOutVtx/MYWmm1h8iw/cEQC4PzGXf68jounOh1lZlu8Wi8WAYEd3np+hE2t11ZROrSXhta2V0Ek+2pijBwvBNCaJq6lFVf/9Tjz+vVYb8mDyr9MWXYwHI/2E8ItjHiM+LRZjZlp8v5lEXwoSh7ltfbC1BZfDJOjWayGMzvSjt6DXxuYZvkgkFR9pibmsktet7jnLeH2dgEU3OmOfYYMO/fRJ69fkc5yW7qX3V1Sbi/84jPQT4rGY/qGHTuvzfeVdy3n5ex4AiUQi0EFHC6txPF17LuFg4QpwtwlG43e+l8bwHIBBEgEIxN7A3cQb/l5ThFpQxJZjqvUsxCHpWdKrbcfqBWk/gz91Jx6P3wtBwg4NQziM9FNArX2Ymq1kUOWZ1WeDwSDgZivhVf3XLABwf0CmL4Spa03XmEo8ye3vifdn8LPwBgiuq+Lna5eg1sP7bbfNZhMA3OezZgCAG3zZarUCFX4qzPlhEFN4LObR0WSjRo4ZwmGknxJ+maiKUfx7tez+GGd9oFXRJtFoYTVVpeutSUB+JsU8fr7OmdPW2TDdQOv22b1HnUDLeDV2DqsP6Pf77oDSabvpdDow7EPr+lkHoFZbFXl/DgEPFoZK/vdqeBxG+inhN4P4LrCfo+ef82d9FZ+k11cY+ZW8egj45Ov3+2Pdh4YrjMEBONKrJ0Lia05fRTYVBhkyUOBjJR2tNbUECnJcrBG23EMPRhVISXb9Dky5fxxG+imhPd60toy3NfXkt93ycPAHTqjl1jJdbXXVbrIwq824dlQmwS+ZVW2A70cSsUCG9xqWXdBUJd+71+thbm4OnU4n0Lqr9wTcFdcw9abLLbQIyPeoNG73B3haWe54MNJPAV940yoyxrwcUKEv9Qj8bjhfnFN3nX+mQp9fhqrZAc0S6OGiBwzfS1t4aYn1Z9g7wDw+oaGBHip6GCrxdee8pu60HZiE1/fzRTx+/9qpqM03Zukfh5F+Qmgu2Y+r2V3Hh1UtkLr28Xg8UD/PXDwQtMBAcFGjptz4Z2G1ACSQvwSS76Wpvm6369zv29vbe/vutHTYL0jSoiFfZeeL15dIJJy+oEKi3yoc5ploKEXvR1OUnBdIodDwMIz0U2AU8VXZ1hZXRVglHsUtTcvxIFBrzoeapNFcuBJeX/x7klItMV1vv+7AF+PoevNXVdkfm3yrPQrMsxN67X5I4gtzWgikQzHZo08vxSz94zDSTwmNcf1qMsbFfMj9mF4FOR0MqcRnTl1/Lsy1p7dA0vvuspLed7+V7AwJ6Jmo+02lXQmv22fCavJ5/3x/33PRHgMeNmFxvIZRJHy5XMbKygpWVlawuLgYmJFnpH8cRvoJ4YtaGmtqDOq75frvFVoZp3E3f/YhwS2stt8vcvFjbh5IPGz4bxOJhMvj87q08Ue1ApLdd+v1+xhVA8/70zTmqBy737KbzWZRqVSwvr6O7e1trK6uolAo2A67CWGk/0T48+r0AQ4r0/Wbc9TKKgmAYP7f/z0QVNHDxC+F3yxEL4GWvdvthqrz9BT8a/c9EyAYrmhcr9evoYmm/MIOR5/w5XLZLe3c2trC8vKyGwluI7PGh5F+SoTlt7XFM0xVf2imnZJKXXElOl1yP30GBInGyj/9N/xZ3zJfX18HyKKHgqblwlxv35r7JNfUpVpiHmqjwgK+1+zsrCP84uIitra28OTJE+zv72N9fd1ZeXPtJ4ORfkL4Fsq31trrrqT3ya315Q+V9Spp1Vr6Fp8CnBKHoAio1YF6D76lDSP5KPdbr1PJrilHba1lt50KnWEvxvA+4Z8+fYrNzU2Uy2UT8KaEkX5K+OTXAyCsC09J5BOXjSgkhar0KuL5YiDfQ8ms4hvHYANw8+41u0DV3S8X9u8vrMRVvQ3tL2D+3N9kQ4Tl+3lo8T2ZluMev83NTUf4nZ0dLC8vu4WVVpQzOYz0U8Ang+bg/bSVlo/6jTgsXFHhzVfwlezqKrNYx8+pM3xglRvn6ulATd6DpgrV+vv35xfIaEWg9vNzPh5HetP11lZbZhdY0jszMxPwjpiWW1hYQKlUcmu59/f3XRwf5tabpR8fRvopoVaJU2NmZ2cDMbD/UvEuTOBTsoVZea3L1248IHxLLWvauUaawzX9Edq6D28UNNbWDj8O7+AAD87g0002TD/qOG8eRCxSIuk5G4Crube3t7Gzs4ONjQ2Uy2XkcrnAYWKu/eQw0k8Iv7iFTSmcgqtFNaNU6lGHQpio5Rf/aJ5fFWslPcmlq624qII982yjZe5ddYeHrkfvm5trdNouZ+L5o7W1zp4Hj5KeqcRUKuUGa3KS7vLysivCYcmtEX56GOkngB9zptNpxGKxwNhmnyxh8TD/XEUyP9ftV/35qS8t1OF7aG6ePee09CS9jtLWPnbtTQ9rn2WpMWf7Z7NZFAqFwCw+EpNDMLVAh/l+38rrbj1/SQbn+/EQ0RjeCD89jPQTgpY3lUq5xg/G4sBokusD+tjDOqrSz9cJFH5tAAt1aFlp5Ul8Ei9sRZbfoKOE54hrlsFyFh9r4NUS87rUA9FyXp3BR9Wfq7Cy2WxgkKdv3Y3w0yM26iH9N9hkAg9+Dl4J/xDGIb3/50r+x94jLJVIoqlbzdherbxaeL9jLha76/MnIblCmxN21e321XT/MPI7AbVKkKO/wnbYaxOSEX5shH5RRvop4Mfo/DMf45J7FB76Ob+gxr+2sDJdKudM5YXF9Ep46gi6UpsvtrTS5SbZR3khmiXQEl4/U6Ev3403sk8MI/3nxiPf3WfDuA+7fz2jDgDf4obNo2NIoVkD7Y1XCzwq5Ai7Nl/L8O/Tfy8j+ifBSB9V+IQblUnQn/P1BP/1qaScxDMyTA0jveEO42QYCLO6v1gY6Q2GiCGU9Fa0bDBEDEZ6gyFiMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSG8wRAxGeoMhYjDSGwwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWIw0hsMEYOR3mCIGIz0BkPEYKQ3GCIGI73BEDEY6Q2GiMFIbzBEDEZ6gyFiMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSG8wRAxGeoMhYjDSGwwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWIw0hsMEYOR3mCIGIz0BkPEYKQ3GCIGI73BEDEY6Q2GiMFIbzBEDEZ6gyFiMNIbDBGDkd5giBiM9AZDxDD3yN/H/ixXYTAY/mwwS28wRAxGeoMhYjDSGwwRg5HeYIgYjPQGQ8RgpDcYIob/DyJg5nL3B2W6AAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 36\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 37\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 38\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 39\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 40\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 41\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 42\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 43\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 44\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 45\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 46\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 47\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 48\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 49\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 50\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 51\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 52\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 53\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO2dV3ebV5amXxA5gyQABpESKVIURYpiUA4syS7aVttd1cs9d30/a+7mZq7mH8zt/IW5qdXTa1Xocru67JItK9nKlESJSRQpJuSc81xo9tEBxACAdChhP2txWRIJ4COM9zv77LP3uxWlUgkMwzQOTT/3BTAM89PComeYBoNFzzANBoueYRoMFj3DNBiqXb7Pqf2/I0qlElwuF65du4a7d+9CpVJBrVajUCjU9XwKhQLJZBKdnZ349NNPMTw8DJ1Ot89XzfyIKLb6x91Ez/wdUCqVoFAooFAoUCwWsbCwgC+//BJarRY6na4u0dPzhUIhDA0NYXJyEk1NHBi+D7Do3zNKpRJWV1exvLy8b8+Zy+WQTCahUGy5cDB/Z/Ct+z1EpXp7L98PoWq1Whb8ewSL/j1EDsPlG0Ctz0GPValULPr3CA7v33PqTeIVi0VQiXa9z8H8MuGV/j2kWCz+3JfA/IJh0b+HcJad2Qn+dDBMg8GiZ5gGg0XPMA0Gi55hGgwWPcM0GCx6hmkwWPQM02Cw6BmmwWDRM0yDwaJnmAaDRf8ewrX3zE6w6N9DuPae2Qn+dDDMPvKn6Q18+r9v4r/+nwcIJrI/9+VsCffTM8w+4Ytl8D/+7xPkiyW8cEXRapzD//ovJ37uy3oHXukZZp9I5wrIF98aSMfS+Z/xaraHRc8w+0R3iwH/7fJhKBRAu0WH//7rIz/3JW0Jh/cMs4/8z384hv/x0VFoVL/c9fSXe2UM83fKL1nwAIueYRoOFj3DNBgseoZpMFj0DNNgsOgZpsFg0TNMg8GiZ5gGg0XPMA0Gi55hGgwWPcM0GCx6hmkwWPQM02Cw6BmmwWDRM0yDwaJnmAaDRc8wDQaLnmEaDBY9wzQYLHqGaTBY9AzTYLDoGabBYNEzTIPBomeYBoNF/x7yY4yqLpVKu/8Q83cBi57ZFYVCAYVC8XNfBrNPsOgZpsFg0b9nqFQqKJXKfXkuWt2z2SxyuRyH+O8JLPr3iEwmg42NDUQikX15PsoN2O12qFSqHyVXwPz0sOjfA2hF9vv9uHfvHlZXV8X39irUjo4OnDt3Dq2trbyvf09g0b8n5PN5BAIBLC0tIRAIoKlp7/9rm5qaMDY2hsnJSXR0dECl4snm7wP8f/E9IZ/PIxqNwuVyIRQK1bXCq9Vq6HQ6aLVaKJVK2Gw2jI2NYWRkBHa7fd9yBczPC4v+PaBQKAjBb2xsIBwO1/wcRqMRLS0taGtrQ0tLC7RaLYxGI/r6+mC326HT6X6EK2d+Dlj0f8eUSiXk83kkEgksLCzghx9+wKtXr5DP56t+jqamJlgsFhw4cADd3d1ob2+HzWaDSqWCQqGA0WhEPp9HoVDg8P49gf8v7iN0pPVjJrxKpRJKpRIKhQJyuRxisRjW1tZw+/Zt3LlzBz6fr6bn02q1aG9vR19fH7q7u2GxWKDT6VAqlVAsFsVrtLa27qvo6b2SjwEr3zf579sdF3JysXZY9PtEsVgs20dTIo0+lPV+OGVx0Fc+n0c6nUY8Hofb7caTJ09w9+5dzM/PI5PJ1PT8Wq0WNpsNdrsdNpsNarVaCL5UKiGVSiEajSKdTkOn0+05QUi/A71f9DpU9adQKNDU1PTO+yU/jt4TpVIJpVK5L0nLRoJFvw8Ui0Xk83nk83mUSiU0NTWJD+NWJay73QDkVU0WfbFYRKFQQDabRSKRgN/vx+rqKl6+fAmXy4V0Ol3X9ZPQKv9NoVAgm80iFoshmUzCZDJBo9HU9RqVNy36KhQKQvSyiGXhy787PU6hUECr1UKn03GZcI2w6PcIfSDz+TxyuRyKxSKUSiVKpVLZB5hQKBQ7bgO2CmNJLJV/LxQKSCaTiEQiSKVSdVXMZTIZpFIppFIp5PN5sZcH3kQrpVIJmUwG6XQamUxmyxuEzHYClK85n88jk8kgm82KG6VSqYRKpYJarYZKpRI3AqD8pkqPo2ujn2eqh9+tPSCvPrlcrqxUVV7li8XitiFrNSuU/DNNTU1QqVTQarUwGAwwGAxQq9V1r3T5fB7xeByJRALZbBZarVasunq9HmazGXq9HoVCQUQS9DvJWxp5paYv+QZQKfh0Oo10Oi1WbfodlEolisXiO4/L5XLicblcDk1NTVCr1WXbA6Y6WPR1In8YacUqFAoA3u7vm5qaylZ+YqcPqPxhr/xZ+jOJ3mg0wmKxwGg0QqPR1HWOLguKxKbRaGA0GmG329HW1gaHwwGtVitOCgqFghBgNptFoVAQj6MbkVarhUajETc7Wq2z2SxSqRQSiQTS6bQ4FdDpdGK1lyMbOYqi1ywUCtBoNNwLUCcs+jqRw9XKhJT8M/TfWleiyueRQ27gbSGN2WyG1WqFXq+vO6GlVCqhVquhVCphNpvhdDrhdDrhcDhgs9lgMBiEGDOZDOLxOILBIILBIMLhMGKxGAqFAvR6PVpbW+F0OtHa2gqz2QytVitufrlcDslkErFYDLFYDOl0GqVSSZwWUHhP26LKPEYqlRLRBn2fhV87LPo6kbPylLijcLYyGSV/bfUc1b4WiZ9eT6PRQK/Xw2g0QqvV1vV7qFQqUZhz4MAB9Pb2oqurC21tbTCZTKI6r1QqiS1MOp1GIBDA8vIyXr9+DZ/Ph3Q6Db1ej7a2Nhw+fBg9PT1oa2uDxWIRYXg6nUYsFkM4HEY4HEY6nYZCoYDFYhGJOa1WK5p7KP8hRwnpdFpsceRMPlM9LPo9QB8++jN9ULfLQgN7O8IjEcjCp9cgcdSKXq+H3W5HX18fjh8/jt7eXrS0tIhcAUUP8jEZ1fkvLy9jfn4eLpcLqVQKWq0Wra2tIrGYyWTgcDjESp5MJhEKheD3+xEKhZDJZKBWq5HJZKBSqWAwGKDT6cpCd4qiKMSnHEA+n+euvzph0deJfKZMqw6JnoS43Uq/l6STnP0H3tbcx2Ix5HK5mp5LpVLB4XDgxIkTOHnyJAYHB2G320VIXrnFoBtbPB7H2toaZmdnsbCwIGr9m5qaEIlExCkGre5GoxHFYhHRaBQ+nw8ejwehUAi5XA46nQ7xeFys9BqNRiT1KBdAeZN0Oo1UKgWlUgmtVssrfZ2w6PdA5fHVVgUm24X2e4XC7Vgshs3NTfj9/ppFbzKZMDw8jDNnzmB4eBhOp1Nk77d7zXQ6Da/Xi4WFBczPz8Pj8SCTyYibnJzUI2GazWbk83kEg0G4XC54PB6Ew2Hk83nodDpEo1GUSiXxGCoQUiqV4tQgmUwikUgglUpBo9GIoz6mdlj0e6BS4HLGfa/7+N0oFotIJBJwu91YXl6Gz+erWQTt7e24cOECTpw4savggTeZ/lAoJATvdruRyWTE1oJ+30QigWAwCK/XC41Gg3g8jnQ6DZ/Ph83NTXi9XiQSCeRyOWi1WsTjcRSLRSF6EjvlAuLxOKLRKMLhMDKZDAwGA8xmM6/0dcKi3yNb7dfpz5Xh/H4KPpvNwuv1YnFxEa9fv67ZLUelUqG3txdjY2Po6uraVfAUWWxsbODx48dYWVl5pwJQPsaUV+dCoYBYLAa32w23241gMIhUKiWO6+h5qMKO8gY6nU48NhAIIBAIiGgmm83ynr5OWPR7YDuRbCXy/RI8CSuRSGBlZQXT09NwuVw1P09vby9OnTqF3t5emEymXa8vm83C7/djfn4eMzMz8Pv9W/4cCVE+dqOy4XA4jEgkIvIPhUIBSqUSuVyurKxWqVQim82W5QK8Xi8CgQCANzcsEj2v9LXDot8HthLMjyF4AOKs3OPx4MWLF3j27FnVq7y8BRkbGxM2WLsV9VDmfWFhAdPT01hbW9tWbJTYNBgMsFgsMJlMItMuV9RR9WKhUEChUEAkEoHb7YZer4dKpUImk4HJZEKpVEIkEoHf70c4HBYFQFQUxNQOi36f2E34+wE1q0QiEczNzeHx48fY2NioOoFHQnU4HDh+/DgGBwerWuWLxSLC4TDu37+P+/fvI5VKbfuzTU1Nopqvs7MTLS0tiMfj8Pv94uhNLmgiMpkMwuEwXC4X1Gq1WOkBiPA+Ho/DaDSiubkZ6XSaV/o6YdHvkcojNPnf9xNKlqVSKWxsbODevXt4/vw54vF4Tc+j0+lw9uxZjI2NweFwQK1W7/qYZDKJjY0NPHnyBIuLizv+rEajgcPhQF9fHw4fPgyTyYRAIACfz1dWKy8Llmry0+k0wuEwtFotcrkc9Ho9SqUSEokEotEoUqkULBaLaPXlDH59sOj3gUrh/xjNH5RI83q9mJmZwaNHj7C6ulrzh/7IkSP49NNPMTw8LNpSdyKfz8Pj8WB6ehovX77c8fWamppgNpvR09ODY8eOoa+vT1TYbW5uivN/uXy2ssY+nU4jEomgWCyK0t9UKoVkMin6AyKRCJLJJIu+Tlj0+8SP2eVFYX0sFsPi4iJu3bqFxcXFmvvnDx06hKmpKZw/fx4HDhyoapXP5XJ4/fo1bty4gbW1tR1/VqPRoLu7G8eOHcPg4CA6OjpE9VxraysMBsOO/QG04lObMJ37U1svtdTSeT0n8+qDRf8LRw7rl5eXcffuXdy9exder7em59HpdLhw4QKuXr2Knp6eqo0us9ksNjc38eTJk10NN00mEwYGBnD8+HF0d3fDarWKnv/m5mYYjcYtW4xlqLlGfn1K/FHrbzweF/3/LPjaYdH/giHBp9NpuFwu3Lt3Dzdv3sTKykpN1XdqtRqjo6P48MMPMTo6CpPJVNXjKGlIVXTA2x6DSlQqFdra2jA0NIS+vj7hqJvL5WA0GmE2m6HT6cpKbCttsqhpiSIbugFQ3T219FK3HYu+Plj0v2DojNvr9eLJkyf47rvv8OzZs5rDeqfTiatXr+L06dPC6bYa0uk0VldXsbKyIlbf7URmsVgwMDCAgYEBtLe3Q6/Xi+48tVoNjUYDlUr1Ttky8PZMn/rp6QiRMvxyLT8JP5PJCKstpjZY9PvAfju3UKIrm80iFArh+fPn+Nvf/oYHDx5sWxSzHVarFWfPnsXk5CR6e3ur9rijs/m5uTnMzMwIW+3tRNbW1obR0VEcOnQIZrNZ5AvkEmX5mE42DqU2YWqtpTJcAGLPLj9+qyM/pnpY9HtkL0YZOz1nLpdDOBzG8+fP8c033+DWrVvY3Nys6vHyacLRo0fx8ccfY2BgAGazuaZrTKVSWFxcxOzs7I5e+hqNBj09PTh+/Dja29tFSS+JNZfLIZFIIJlMim2JbApCzjnUWgu8ObeXtzCysWZl8o6tsmqDRf8Lg8JZamz55ptv8O2335aF2LUwNDSE06dP1zyAslAoIJVKwe127xhdKBQKdHZ2YnBwED09PbBYLO/szWOxGHw+n2iYoccBb0RPVXY2mw06nU40E1F57lavuZVXAVMdLPo9UBnq7mW1l0P6SCSC+fl5fP3117h27Rrm5+dr2sfTcdfAwABOnDiBzs7OmsZSUWjv8XjKhmdsVYik1WoxPDyM8fHxdzr16LjN5/NheXkZXq+3rFGGBG80GmGz2eBwOKDX65HNZqFQKJBMJre05iZTTNnkg6keFv0e2cnOupbnIMEHg0G8ePEC169fx1dffYXZ2dkdy14rIWHq9XpcuHBBZOtrEUepVILP58P09HTZlmKr/Xx7ezsmJiYwPDwMq9UqLLSpE9Dv92N5eRkLCwvw+XyiDl9O4hmNRjgcDpEApA68aDQqSnJlgxKNRiMcdlj0tcOi3yfqXeXlYzm/34/Z2Vlcu3YNf/vb37C4uIhEIlHz8wFv6uvPnDmDo0eP1jx8MpvNYn19Hbdu3cLKysq2P9fS0oLx8XGMj4+jq6tLVPhVdgI+e/YMy8vLiEajIglHYtVoNDCbzbDb7ejo6IBer0c0GkUmk0EoFEI0Gi1zImpqahL7f6rwY2qDRb8H5HLSSvPKah9LIbDb7cb09DSuXbuG27dvY2lpqaYVXsZms+HcuXM4duxYzTPoyOFmcXERT5482baDT6FQoL+/Hx9++CEGBwdhNpvLXiebzSIQCGB2dhZPnz6F1+stG7lFK7darRaip+2BVqtFIpGA0WgU7rj5fF6s8nq9vkz0vK+vDRZ9nciZ5FrbaGWH11gshtevX+Phw4e4fv067t69i/X19bqSdsT4+Dg++eQT9PT01DyGKpPJYGFhAd9//73o099qL9/T04OLFy/i9OnT6OzsLBu4USgUEI/Hsbq6ipmZGbx8+RLJZPKdjDvtzc1mM5qbm9HS0iL66S0WixC2SqUShThqtbrMW78er/9Gh0VfJ1udO29VeFL5GFrdU6kUgsEglpaWcO/ePVy/fh3T09OiBbUeVCoV+vv78cEHH+D8+fNwOp01rYLU0HPnzh3cunULyWRSXLeM1WrFxYsX8eGHH6K3txdGo1Fk7OkcPRQKYX5+HgsLCwgEAu8c+VFEpNFoYDKZYLVaYbFYoNFokMvlypxxyV2YfPRI9Lynrw8WfZ3QcRRZMstW2Nv9vDxe2u124+nTp7h16xbu3bsn9rz1VpgpFAr09fXh888/x9TUFDo6Ona1wKq8vmAwiHv37uHGjRtYXFzc8lqMRiNOnz6NqakpjI2NwWq1vrPa5nI5+Hw+zMzMYH19fdsz/qamJjGpx2QyCQMNcsSl6jwq05XHeel0urK5e0z1sOjrgARP3V9UUUarkuyESxEBTXchJ9np6Wk8ePAAz58/r8kIYys0Gg2OHTuGq1ev4tNPP8Xg4CAMBkNNggiHw3j8+DH+9Kc/4f79+9vefI4cOSJKeh0OBzQazTtW2ZlMBj6fD69evdrxjJ+SckajEXq9XjyXXNhTWZ+v1Wqh1+tFaP9jOA2/77Do60C2n45Go1AqlTAYDOLDSDXmdHNIJpPw+/3Y2NjA7OwsHj58iIcPH2JlZaXuZB2h0+kwNDSE3/zmN/jss8/Q398vCmSq/V2i0Simp6fxxRdf4JtvvkEwGNzyZw8ePIjJyUlMTk7i4MGDWw7OpI7AQCAAt9u9bX0BCdhgMMBkMkGn04lW2mw2K+rr5aYaGr8l1/Gz4GuHRV8HJHiv1wu32w0AMJvNMJvNYsSUQqFALpdDPB6Hy+XC/Pw8Hj9+jKdPn2J9fV0MhdgLOp0Oo6Oj+Od//mdMTU3h8OHDsFgsVe9zSfDPnj3Dv//7v+OLL74Q3XSVaDQanDlzBlNTU+jp6dm2N152r93J1UepVEKn08FqtYq59xQlkFNOPB4va6yh5J8cTTG1U5XoG7mTqfKDRefP6+vreP78OdbW1kSfNyWj9Hq9cHjZ3NzEq1evsLS0hJWVlbqGUmyFRqPBiRMn8Pnnn+Ojjz7CkSNHdjWpqCQSieDJkyf44x//iC+//BKvX7/e8ufUajXGxsbwwQcfYGxsDDabbdvXyefzCIfDYr4dsLWzEJ3Pt7S0wGQyiWM5efQVjceiLju5z0E+LmVqoyrR8x31rZ1TJBLB4uIifvjhB0xPT4uBDxTi00qfy+UQDAaxubmJzc1NRKPRHZtWakGlUmFoaAifffYZrl69isOHD9ck+EKhgGAwiEePHuGLL77Af/zHf2B5eXnbn+/s7MQnn3wiTgS2OwakbQ+F9tu146pUKphMJjgcDjHkUqlUCnNMr9cLn88nfPEoxKe+epppRxHAfnc5vu9weL8LFMrHYjEkk0ksLy/j1q1buHnzJl6+fCkmvAAQhSTAmxWP9qV7OXOvpKmpCX19ffjHf/xH/MM//AN6enqEI81uUEIxEAjg7t27+MMf/oCvvvpq25AeeNMnPz4+jkuXLuHw4cM7Tscl0ft8Prhcri1/b4VCAZ1OB6fTiUOHDqGzsxNmsxkAkEgk4PV6xRScaDQqTDTod5en15KxBlMbO4o+mUw2pAcZNawAwMuXLzEzM4ONjQ14PB68evUKL168wObm5jslsnJV3n5R6VRz7Ngx/OY3v8Enn3yCgYGBquvqyXxibW0NN27cwJ///Gfcvn17y6SdHI4PDAzgww8/FK+12xScTCYDv98Pj8fzjiApeWe323HkyBEMDg7iwIEDMJlMSKVSiEajcLvdcLlcYgoOhfYETc6Jx+Nl5pi80lfPjqIPh8N4+PAhZmdnRSFEI9wASPSlUgnLy8uYm5uD2+2G1+tFMBgsKyetfNx+Qx94i8WCwcFBfPTRR/jss8+EZ301Wfp8Po9QKITFxUXcuHED//mf/4m7d+9um1mn38NkMuHkyZM4f/487Hb7rjcX2pMHg0ExoJIgwbe3t2NkZASnTp3CsWPHYLfbAUBMwHG5XPD5fIjFYsL9lt4DOdFH03KcTmdDfCb3k11X+t/97nf43e9+BwBir9pIUPsmdY39HB8wh8OBS5cu4dNPP8W5c+dw4MCBqo/lstksfD4fnj17hi+++AJff/01Xr58uWvVn1arxcTEBM6ePYtDhw7teu5fKr2ZaEse94lEoixi0mg0aG9vx+joKCYnJzEyMoKOjg6o1WokEgnhEiT33Vd64FFon0gkxGy7Wt4L5g07ip4GDRDbrXDvMz/V77xVfTv1w4+OjmJsbAzDw8Po6Oiouvw0l8vB7Xbj1q1b+OMf/4jvv/8e6+vrVV2HwWDAxYsXMT4+XtUxIE2XXV1dhdfrRS6XK/O9a2trw6lTpzA5OYnx8XEcOHAABoNBCDmbzSIcDiMUCiGRSIgW3EpopQ8GgwgEAohGo2hubt6yZoDZmh1Fr1AoxGgh4M3dv9ESJz+V+SK9hsViQXt7O/r6+nD69GmcP38ex44dE80o1ZaeZrNZuFwuXL9+Hb///e/x3XffVTXzjq6jr68P4+PjoghnN+i0YmFhARsbGwDenMVrtVo4HA6cPHkSH3zwAU6fPo2uri5x2kCz7TOZDCKRSNnZ/HavE4lExLGex+MR700118lUkb2X77aVSRVmf2lubsbFixcxNTWFiYkJMQvOZDLV9IGmqTS3b9/Gv/7rv+Lbb7+tyXmnu7sb58+fF2Opdlvlydve5XJhbm5OuO1Q0m5sbAy//vWvcebMGXR3d4tcBPUjNDU1IZvNIhaL7epnT9uASCSCQCCAzc1NtLW1wWazseirhI/sfibkrLxWq8XIyAg++OADXLp0CcePH0dbWxv0en3NXWSUtHv8+DH+7d/+Dd9//31Vgpe3F729vbh06VJVU3DI8cfj8WBhYQGrq6uIx+PCBuvYsWOYnJzEyZMncejQIZhMJtGcJO/5M5lM2eiq7aCVPhaLiSIgygHo9XoO8auARf8TIzfhAG9W1YmJCXz44YeYnJzE4cOHYTab62oZLZXezH2bmZnBX/7yF9y+fXvXqTTyYwEIoQ4NDcFms+0qIuqdX1pawpMnT+D1epHP52EymdDT04PTp0/j1KlTZYKXT4GoHTeXyyGVSu0aSZJ/XzKZRDqdRiKRECu/0Wis2T+gEWHR/8TIH3bqWLt69SpGRkbQ3Nxcc3ecTDqdxtraGr799lv89a9/LTO1rAaVSoWRkRGMjY3BbrfvWIgDvNn6JZNJbG5u4tmzZ5iZmUE0GoVKpUJraytGR0cxMTGB3t5e4YW/VVccFfXIppk7kc1mxRk+FQN5PB5O6FUJi/5nwGaz4fz58/joo49w8eJF9PX1CVPJeqBSVK/Xi+vXr+Prr7/esay2Ejljf+7cOYyPj+/qkS8bX05PT+Px48fY2NhANpuFxWJBT08PxsbG0NfXB5vNVtY2W3ntVOJcbSFYqVRCPB4XM+08Hg9aW1tx8ODBmr39GxEW/U+ESqVCV1cX+vv7MTQ0hAsXLuDkyZPo7u5+pye9Hnw+H+7evYs//elPmJ6erumxVNHW398vVubdym3z+TwCgQBmZmZw+/ZtvHjxAvF4HEqlEm1tbTh27BgGBgbQ1tYmjhh3ErzcSbfV8WUlsVgMwWAQsVgMKpUKsVjsZ6uj+HuDRf8jQs4wNpsNhw8fxvnz53HhwgUMDg7C6XTCZDLtGkLvRqlUQjgcxv3798VZfDqdrko4MocOHcLly5dx9OhRWCyWbaMOqooLBAJ4+vQprl+/jgcPHmBzc1NEC93d3RgaGkJnZyeMRuO2x4yUvaf6erl1drejUhqgQef9W02+YbaGRV8H1BpKH+TKvajcVEITZkZGRtDX14fOzs5923uWSiXRHvvnP/8ZX3/9NWKxmPhetZhMJkxMTOCDDz7AwYMHtxU8NRFRhd+1a9fw3XffYX19HblcDjqdDi0tLejv78fhw4d3/D1lRyHan9OIK6VSuauAM5kM4vE40un0OxFDvdukRoHfnRppamqCxWKB3W6HwWAQ/fXpdFp84PR6PTo6OjAyMoKzZ89ifHxcnE9XTm7dC2SA8fvf/x5fffWVsKbaaZWv/J7FYsH58+fx8ccfi4w9Zddl26p8Pi8q7h4/foybN2/iwYMHWF1dRSaTETe67u5u9Pb2oq2tbdt2X3pOEjyF5uSKQ2F6LpfbUfjZbFYU8ZDZaC6X23P09L7Doq8Rk8mEgwcP4uDBg7BareLIKpFIoFAoQKfTobW1FUePHsWZM2cwNDQk/Nz3S+wU0tMK/5e//KVsKMVOQqHvNTU1wel0Ynx8HL/97W9x8eJFOByOspWZnG0TiQQ8Hg+Wlpbw6NEj3LlzBzMzM/B6vWJwBfXIHzp0CF1dXbBYLFuu8pWegaFQCIFAAMlkUtwwScy0em8HXR8AUZOfyWRqNhNpNFj0NUAVZj09PTh48CBMJhOKxaLomS8Wi9DpdDh06BBGRkZw9OhRYTqxHxll2gOTieUf/vAHfPnll1hbW6vpeVQqFQYHB3HlyhVcuXJFTJul40LZpjscDovV/fbt25ienobL5RJt1wDE0Aq73Y7u7m44nU7heSdfOwmeBOrxeLC6uoqNjY0yr0Hqky8UCjtGLYVCQWT9s9msCPflCTrMu7Doa8BsNqOzsxPt7e2wWq1Qq9UolUrQ6XQoFApQKpWwWq04cuQI+vv7Ybfb6xL8Vv3htDp6PB6Rpaf99FZs1dtvNBqurPMAABfGSURBVBoxMDCA0dFRjI+PY3R0FEeOHBF7b9nMMxaLYW1tDY8ePcLdu3fx5MkTLC8vIxAIlImdICcch8MhiovkYSCyg3AkEoHL5cKrV6+wuLiIlZUVRKNRABATbMiAZCdI7HTGT+E9J/N2hkVfA/TBJsETNOhCr9ejs7MTXV1daG5ursl3XqbyMTTYcnl5Gffv38e1a9dw8+ZNhEKhbZ9DDuNbWlrEMdq5c+dw9uxZ9Pb2wmq1lllJ0z6aGmfu3LmDGzduYHp6ekt3Hdms0mQywel0lt0MKSNPo7sikYhY3V+9eoXl5WW4XC7EYjERzpPfvex5v52IyXmXXHRqOetvZFj0NUAe7STmyumrFosFHR0dcDqdddXNy1B4HY1GhVf+9evXcf36dSwtLVVlwaVWq9Hf349Lly7hwoULGBgYQEdHB1paWmAwGMqO0kik0WgUs7Oz+Oqrr/DXv/5VjKTaDtnVtqWlBRqNBvl8HqlUSmx7otEo/H4/VldXsbCwgIWFBaytrYmaeTLYoAGYMjsJmG4mlEQll1xmZ3YVvfwmqtXqhmutlf3ZqMiEjERKpZL4oBkMBtjtdrS2tpY1lVQLTb+hM2sqb338+DHu3r2LFy9eYGVlBT6fb9dSVZPJhOPHj2N8fBwnTpzAsWPH0N/fj5aWli0TihSGJ5NJvH79WrjrLCws7Nqso1QqodfrYbPZoNfrhRtuIpFAKpUSQy8WFhbw6tUrbGxsIBQKIZlMij27Wq2G0WhEoVCAWq0WR2+7fdboPcvlcuI6eGb97rCJRhW0t7cLQ4ve3l7o9XpRVEJJo9bWVjidzrKS092g7DN1jm1sbGBlZQWbm5vw+/1wu9148eIFnj9/XlXjjMlkQldXF8bGxnDx4kXhemM2m8X0ne0oFArw+Xx48OABbty4gfn5+V3/f5NgrVarKJAJBoPCv87lcmF5eRlLS0tYXV2Fz+crG+6hUCiE9TUl+mhYJb23u4Xq9B7SIMy9RliNQE0mGjqdbt9snH/JkOtqsVhEf38/fvWrX+FXv/oVhoeHYbFYkMlkxHQbsoWi8LYya70VFLqTPRT1hdP0m7m5OXi93ppcdJ1OJyYmJjA1NYWzZ8+ip6cHzc3NYgrsTpDrzfLyMm7evIkXL15UdYOnCbJmsxlarRaxWAzLy8tiLsDy8jLW19dFGF8pYNpSAG8XFBJ9Op3e9bNGE2/IrIOug0W/MzuK3mAw4F/+5V8wMTEh3txGSJJQ8imfz8Nms6G3txd9fX1wOp1Qq9UiU5xIJEQPuFKpLJvRLnfT0d8pfI/FYlhfX8ejR4/w/fffY35+HoFAALFYTAx4qBYaRHHlyhVcuHABQ0ND6OjoqNoWm/rhNzY2MD09jenpaXi93l0fR3PoTCaTKFJyu91IJBJwuVxwuVwIBALiprgT8tEcleBuZ5clQ/kEmmnP7jnVsaPobTYbrly5gsuXL/9U1/OLQD6rBt6sPmRVJf/dbDaXebADKCsokYtcstksAoGAsNR+8eIFZmZmMDc3t2UWvnKQ41bf7+zsxNjYGKampnDp0iX09/cLV5pqTw1oDNXs7Czu3LmDzc3Nqt4fmjZLRTg0F0AeVFFtpEIrPr3n8nu/E5RLofmBNNKa2ZldV3pmayixR8dLtOKTvxvVj2cyGUSjUeEs88MPP+D777/H0tLSjs7CO41t0ul06OnpwZUrV/DJJ59gdHQUbW1tVW0tZCh5t7q6iocPH2J6elrU7m8HCd5sNsNqtUKv1yOXy4kMfTAYRCKRqNk1WRZ6tdGkPOp6t5wF8xY+stsj8kBFqiWnzHMymYTH48Hi4iIeP36M58+fY3V1FeFwuG6vQYvFglOnTuHjjz/GxYsX0d/fj9bW1prDWoo+vF4vHjx4gPv378Pj8ex4XSR4k8kEm80minCozZWy8vXapNezdVSr1WhubkZLSwsbaFQJD7Csgmo+SJScCwQCwq11fX0di4uLmJ2dxcuXL98pcKml/bWpqQnd3d04d+4cpqamcO7cOfT09ECv19e8wlE47ff78fTpU9y4cQNzc3M7Ju8osjGbzbDZbMJrnurnw+HwngRfD+Sx19bWho6Ojj25DjUSPMByn5BX9rW1NTEZZ35+Hi6Xa8vz7moFT040ly9fxkcffSTsrOoJaeX8AvXDP3r0CIFAYMubkEKhgEqlemeFlwdO0rn8Tz0IhRJ4bW1tZb0DzM5weL8PyA0qPp8PS0tLmJ2dxcLCAjweT0320zIKhQIHDhzAxMQELl++jDNnzogim3pCWeqH9/v9ePbsGb755hvcvHkTLpfrnXp6OkOnzjeLxQKLxSKElU6nxXCKn3qFBwC9Xo/W1lbY7XY0NzfXbBPeyLDo9wlylAkGg1hfX8fa2tqOc+92Qq1Wo729Hf39/RgbGxMmHN3d3TAajTVl54G3zTqJRAIbGxt48uQJ7ty5g7t37+L169fIZrNlCUClUikaXyhDbzAYRGNRLBYrC+n3cypvtVitVvT09GBgYAB2u50FXwMs+n2CQuN0Oi0q0mpZ/ZqammA0GtHc3IyDBw/i+PHjOHXqlBC7xWIpa46pBjo+TCaT8Pv9WFlZwbNnz3D//n08ffoUm5ubQrBUxqrT6WAwGGCxWGC1WmE0GqHT6YT1dDwe/9kFD7w5WTp48CAGBwfhcDg4c18DLPp9gEJh6hCjbP5uXWIARPjscDhw9OhRnDhxAkNDQzh8+LCYcCM3x+w2RFL2nUsmk4hGo3C5XJifn8fDhw8xMzODtbU1xONxlEolUfduMBjQ3NwMp9MpQma9Xg/gzSBTn88Hv98Pv9//s4X0MkajEU6nE52dnXtyEm5E+J3aB+SmEbvdDrvdDqvVing8LqrL5GIT2itbrVZ0dHSgt7cXg4ODGBwcRH9/Pw4cOACbzSZKaCvNKAga40z151SzTuOiV1dX8fLlS7x8+RKvXr3C+vo6/H6/6GyjyKKjowNdXV3o7OwUrcM0tzAUConSWp/Pt2+Cp99pp3qE7dDpdLDZbGhtbYXFYtk3k5JGgUW/D5DoLRYLOjs70dvbi0gkIvbK1PpJmXBa2Q8dOoShoSEcP34cR44cQUdHBywWS9mgSrmMlwSez+eRy+WQTqfFah6JREQmPRgMwuv1ilOEjY0NRCIRUTRkNpvR0tKCzs5O9PT0oK+vD4cOHYLT6RSlxDQei6bJ0Nz4vWTpNRqNKJul8l9qv61F+GazGR0dHXA4HFVP8GXewqLfByi8NxqN6OjowJEjR0TGXq/XIxaLIZfLCR+5trY2HD58GENDQxgcHER3dzdaW1thMBhEa6hcwit7ylF9PmXOaXLr5uYmNjY24PF4EAqFEIvFxM2GzrNphaS9MG0jyAmIzvzlYRLxeBybm5vweDzi96gVlUolwvG2tjYYjUak02l4vV54PB5xA6gGKsbp6OgQx5ZMbbDo9wESPVlAd3d3I5vNihA6FAohk8lAq9WiubkZXV1dwlKrq6sLLS0t0Ov1YnWXV3Wq8guFQlhbW8Pi4iIWFhawsrIi5rOTMSe5yFBHG0UWNEySIosTJ05gYGBA3GyMRmOZXRa9Zjqdxvr6OlZWVhAMBusSPJ1EDA0NYWhoCN3d3VCr1QgGg5ibm8PTp0+xurpateiVSiVsNhtaWlqqbipiymHR7xMU4hsMBrS2torWUJVKJfbRKpUKNpsNHR0dZWYbct15pTFlMBjE2toa5ufn8eLFC8zNzWF5eVmE2ttdC1ltazQa2O12HD16FBMTEzh58iSOHDkiVtzKAh/aPqTTaXg8HqysrGBjY6OuWgONRoODBw/i9OnTogPQbrejVCrB5/PBYDAgFouJbrxqSpPpPeYW2vph0e8TtP+WO/BsNhvi8bjwjKefoyYcqoLL5XJl5bTk7BoIBPDq1Ss8ffoUjx49wuLioogadrO5LhaL0Gq1cDgcGB0dFeOie3p6hMvNVvZSsuPu0tKSMK2sNdlGK/y5c+fw8ccfY3R0VDgDF4tFmEwmJJNJrK2tYWlpCcFgsKrVnpKg1My02yQc5l1Y9HuEss/yF1DeGkv7cfKLi0ajYra63W6HzWYT+3kqfvF4PHj16hXm5ubw8uVLuN1uRKPRXVdDygVotVo4nU6cOXMGly9fFvPhKdtdOVuOrpvMJt1uN+bm5uByueoyTrFarRgdHcWlS5cwPj6OAwcOiPnx5IhDR27kNlSLky3VDJDDDp/TVw+Lfg/IXu7UWUdZ9VQqhXg8jnA4jEAgAK/XKzLfVPFmMplgNpthMplEWyyJ3ufzYX19HS6XC+FwuKYMt1arRXt7O06fPo0rV67g7Nmzwqefwv7tRk3lcjmEQiG8fv0aS0tLOzru7vT6nZ2dGB8fx/DwMNrb20VkQa+rUqlEERCV0JJ11m7kcjnEYjFR85/P57kirwZY9HtEPiPPZDJC7GSF5Xa7sbm5WWYsQR9s6sWnDzytgplMBslkUiTlqjUjpdbX9vZ24aZz+vRpMVJru/nwBOURNjc3RVdgPWXERqMRBw4cQE9PT9mx2lavS9Nxthtyud01RiIRBINBhMNh2O123uPXAIt+D8jGliR4qksnwbvdbni9XpGsIn92GfKOpw+97B5DkcROyKcHDocDY2NjmJycxNjYGLq6usQKv53g5ckz4XAYy8vLWFxcFAMoaoHKiWnLQkeA8u8hFxHF4/FdcxQyZNhB7cter1dMAObju+pg0deJPJNN9syjD6Pf70cgEEAoFEIkEikbcknHcZWQ8OVON5nKkl65E47O/wcGBnD27FmMjo6is7NTCE8u8qmcfkO/RywWw+bmJpaWlrCxsVHXKk+vlclkEIlEEIlEhLkqHQlmMhmEQiG4XC5sbGwgFotVnTegGxNtnXw+n3g8i746WPR1QisxrfJUHZdMJoXAaeADleHKJbNbIc9gI/GTsGXolIBWd4vFAqfTid7eXhw/flyYY5Lg6Xrla6f/yoU/NKTy9evXe3L3oeO++fl5GAwGZDIZkawj511y/11aWhJHmtVsY4rFImKxmKhNiEQiSCaTDeHSvF+w6OuERE8lsRS2U7ktrcByA85201vkf6dQX57VTs9DX1TOajAYYLVaYbfb0dbWhoMHD4pyWhKY7M0vr/DyTYtq9Wm2nNvtRi6XE9dSi/hpVsLa2hqUSiVisRg2NjbE6OpisSiGYs7NzYlkIRljVgN5EVIZL8+vqw0W/R6QK+eAt5bM5DBjt9tFKEorvhxSy9CNgkQu97MbDAZhNU1/NxqNMBqNsFqtsFqtsNlsaG5uhsVigUKhEF598g1H3lvL+2oanbWysoK1tTUkk0nRNUg/W63wC4UCMpkMfD6fKLWdn58XVYdNTU2i1dftdsPv9yOVStUkenkCDp/T1w6Lfg/I4bdarYZerxfz7SgTXzlUkZJ5lR9WWt3lVZzKTe12O1paWoQ3nclkEr3v5PVOZbRkhUWvLUcicscfiZ5OCigXEQgExCReKpahAqJqhE/+eyR+mtxD1lbka09bIpo6W6tw5Zstd9jVBot+D8iCl0N6Gryg0WiEIOloLhAIIB6Pv5PFlx9L2W+n04n29na0t7fD4XCgublZjG6iYz4Aon+e9rlyAVA8HkcsFhO19PK4KDlvQGF8oVAQE3gr98nVCh94u4WgMDyVSr2zxaDXq2elpiYiem9Z+NXDoq8TEgqZN5Bo1Wo1dDod9Hq9WN3oJkCrMwk/k8mUrVbyKk+FO+RNZ7FYYDabxdRcEmk2m0UikUA4HBYddx6PB36/H+FwWAyhoPoAWciUI6CIgW5UcjkxRQT17O8JeXwV/a77EZJrtVrReMMmGtXD79QeIHcc4O0EW6oLl1f5yi8SPrWqypN0KMwH3q7gdBKg0WjE6kntqIlEAsFgEG63W4yT8vl8CAaDYgBHpYmHnCxUKpVIp9NlNyXay1fumevN5leyV8HTqm4ymdDZ2Ynm5mYWfQ3wO1UnlcdpFG5S2CqfjctVeyQiCq8p1CdBkZjj8bh4bjK1pJ53lUolKtOozNftdsPj8YibCdUEbJUgo2uU6+DpZ9PptChppRtOZRLy54Ym7LS1tQmXIRZ99fA7tQcq98MErdQU7uv1ephMJpFlt1qtomBHpVKVJfYo8UYVftFoFMFgECaTSZhUUjKMvh8KhRAKhcQUXQrld7OiIrHLvfsUbchZ/lr28j82CoUCTqcTIyMjGB4ehtPp5PHUNcKi3wcqi13ko7zKzrtKVxwSFSXYCDraopFRcqae5uRVTs+lTHjl6+527dRoo1AoxN67luf4KbHZbDh58iQmJycxPDwMq9XKgq8RFv0ekNtp5XPjStcbqtKjL7mZJpvNipWZHg+8u++Wi3PkmwbdMOjmUe/ZdWV9/C8RnU6HkZERXL16FadPn0Z7ezu0Wi1n7muERb9H5NW68jxcPgP3+XzCRpqO0uSsurxCE3R8JofdcqKPXr/yZlFZW/8+oFKpMDY2ht/+9re4cOECuru7odPpWPB1wKKvE/mcWa6/J5ssWuVlwwwa5RyJRBCPx8tWe9nOurI8l8J5uTR3q9p8CtF/iWH5XtDpdBgdHcU//dM/YWpqCj3/f3AnC74+WPR7gMJrWfDUZEOil8N52i+r1WpotVro9XqRxZfP0Cvdd0joarVaHAVSjzol9WiPL1e5yVHHT30TkMuKZXHWUtarUChgMplw4sQJfP7555iamkJ/fz8Lfo+w6OtE7lAj0csltyQy2TMPgPDHt9vtIoNPNwUSquxkK98gDAYD9Hq9OE8n4dN10E0nmUwKM494PI5IJCKO8X5sqM2Xiom0Wq04TqMbYTweRzQa3bE7TqPRwOFw4NSpU/j4448xOTmJ3t5enky7D7Do94CcyKPQW/4zFeJQYwwdw5Ew5S/qHKO9uVzPbzAYypptaGAE7fPlTD71mZOrDH1Fo1Hx2vRzqVRqz++BXH2o1+ths9lE6bDcTiuLnb62O15UKBRobm7G6Ogorly5gnPnzqG7u5tX+H2CRV8nFL7StBaqlqN9vrxHrxw9RV+UuZdbc6lohnz0SEwkdK1WK47t5NFQVFhDVl00dy4QCJR1+qXTaUQiEfF9Wm3lCKUyiy/XI8jo9Xq0tbWhq6sL7e3taGlpgcPhQHt7O+x2uzDPoNekG1AoFBI3nWw2K94veTR2V1cXJiYmMDIygo6ODs7S7yMs+john3uqmZcr6uRVS/5vpai2OtMnKo/raH8st8pWNq/QjYRW1WAwKEpzaWx2Pp8XTTnUiEOipxsQJRgpMUg9AfKWAnizynd0dGBoaEh46VNDEBURUQ0AWYmRSajf7xduthTd6HQ62O32stl6zc3NnKXfZxS7JHjenxTwj4QsdpndEmfVJNYqbbO2s9GSn49uIPIgS5o0SyW7wWBQlP+S4KjWgG4alGMolUplTTnUAdja2irafjs7O9HR0SHC+UovPopyMpmMcLGVHW/oZEKj0cBms8HhcKClpaVsph9TF1u+cSz69xi5Zz6RSMDv94u5dKlUqizSqKw1kE8aKJlIM+kcDge6u7vhdDpF1x+dKOwkUDkakbczwNtiJI1GI7640m7PsOgbFVrFKcSmsJpCb7liMJ1Oo1gsCl96uZ1X3nNbLBYxA6/elbjys8cr+r7Dom905PyBPPZaPlUgtxyy/qImH3maLiUaeSX+xcOiZ7am8sSB6gTkCkDm7xIWPcM0GFuKnuMzhmkwWPQM02Cw6BmmwWDRM0yDwaJnmAaDRc8wDQaLnmEaDBY9wzQYLHqGaTBY9AzTYLDoGabBYNEzTIPBomeYBoNFzzANBoueYRoMFj3DNBgseoZpMFj0DNNgsOgZpsFg0TNMg8GiZ5gGg0XPMA0Gi55hGgwWPcM0GCx6hmkwWPQM02Cw6BmmwWDRM0yDwaJnmAaDRc8wDQaLnmEaDBY9wzQYLHqGaTBY9AzTYLDoGabBYNEzTIPBomeYBoNFzzANBoueYRoMFj3DNBgseoZpMFj0DNNgsOgZpsFg0TNMg8GiZ5gGg0XPMA0Gi55hGgwWPcM0GCx6hmkwWPQM02Cw6BmmwWDRM0yDwaJnmAaDRc8wDYZql+8rfpKrYBjmJ4NXeoZpMFj0DNNgsOgZpsFg0TNMg8GiZ5gGg0XPMA3G/wNclxwKcFfvtQAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 54\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 55\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 56\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 57\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 58\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 59\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 60\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 61\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO29V1eb17r3/ZdQl1BDIES3IVTbwabYxoDjFifLKStt7bX2+Tves/dkHz3f4Dl9vsIz9io7GXvt7cTxTlwSxyVuGGPAppmOaOq9S++Bx5y5BQJJQNx0/cZgYFTu+9Zt/ee85jWvIkqlUiAIonAQv+oLIAji5UKiJ4gCg0RPEAUGiZ4gCgwSPUEUGJIsz5Nr/w0ilUphZWUF169fx/379yGRSCCVSpFIJHZ0PJFIhGAwiIqKCvzhD39AW1sbFArFHl818TsiyvRgNtETbwCpVAoikQgikQjJZBKTk5O4fPky5HI5FArFjkTPjudyudDa2oq+vj6IxWQYvg2Q6N8yUqkUFhYWMDs7u2fHjMViCAaDEIkyThzEGwYN3W8hEslvY/leCFUul5Pg3yJI9G8hQjNcOADkewz2XolEQqJ/iyDz/i1np068ZDIJFqK902MQryc007+FJJPJV30JxGsMif4thLzsxHbQt4MgCgwSPUEUGCR6gigwSPQEUWCQ6AmiwCDRE0SBQaIniAKDRE8QBQaJniAKDBI9QRQYJPq3EIq9J7aDRP8WQrH3xHbQt4Mg9pCLQ1b84f/cwv/zfwfgDERf9eVkhPLpCWKPsPki+LevnyCeTOHZihcl6nH87y8OverL2gTN9ASxR4RjCcSTvxWQ9oXjr/BqtoZETxB7RLVRhf/35H6IREC5VoH/78w7r/qSMkLmPUHsIf/rwxb827kmyCSv73z6+l4ZQbyhvM6CB0j0BFFwkOgJosAg0RNEgUGiJ4gCg0RPEAUGiZ4gCgwSPUEUGCR6gigwSPQEUWCQ6AmiwCDRE0SBQaIniAKDRE8QBQaJniAKDBI9QRQYJHqCKDBI9ARRYJDoCaLAINETRIFBoieIAoNETxAFBomeIAoMEj1BFBgk+reQ36NVdSqVyv4i4o2ARE9kRSQSQSQSverLIPYIEj1BFBgk+rcMiUQCiWRvWhSy2T0WiyEWi5GJ/5ZAon+LiEQiWFpagsvl2pPjMd+ATqeDSCQi0b8lkOjfAtiMbLfbcf/+fczOzvLnduvUMxqNOHz4MIxG466OQ7w+kOjfEuLxOJxOJ2ZnZ+FwOPbkmDKZDN3d3Thz5gwqKyv3bNlAvFrof/EtQSQSIRKJwG63w+Px7OgYYrEYarUaUqkUUqkURqMRXV1d6OjoQFlZGYqKivb4qolXAYn+LSEajcLtdmNpaQlutzvv98vlcphMJlRVVcFoNEImk0GlUqG+vh5lZWVQKpW/w1UTrwIS/RtOKpVCLBbD3NwcHj58iKmpqbzX8TqdDlVVVaipqYHFYoHRaIRY/GLlp1arf4/LJl4hJPo3lGQyiWQyiXA4DKvVimvXruH777/H6upqXscRi8Uwm81obGxEXV0d1Go1ZDIZUqkU4vE4P0c8Hqc1/VsC/S++gbDZPRgMYnV1FQMDA7hy5QoePHiAWCyW17GKioqg1+thNpuh1+sBvBhQEokEF7zf70ckEvldRC/cBswl6i/f1xObIe/9HpJKpfjP732eWCwGl8uF58+fY2hoCHNzc3kLHvgtxFYooFQqBZFIBLFYjGAwCKfTiVAotKcx/alUColEAolEAvF4nA8yW92/VCrFB6NoNIpoNIp4PL5n11NIkOj3iJcleAYTaTweh8/nQzAY3NFx4vE4IpEIN+EB8PU8m+mDwSCi0eieiZ7dJyZiJngmevaaTK+PxWIIh8OIRCKIx+MUMLQDyLzfQzZ+AX8v81MkEkEqlUKr1aKkpAQajWbHpjcTNhO9WCzmM71CoUBxcTFUKhXEYnHaTLxxgBNaDNk+t1DwwoGEDTYbXyt8TzweRywWg0gkQlFREb9WIndI9LvkZc7uDCZ6jUYDo9EIo9EIhUKx4+MxISUSCS4itVoNi8WCuro6VFdXQ6VS8dcy6yASifCY/KKiIkilUigUCsjlckgkkk0iZvcqkUggFotxR6FYLIZUKt1yvS6c6dlgQWHBO4dEv0u2mvF+b4SzvcVigcFgSHsuH0EIBarRaFBaWoqKigpYLBaUlZWhuLgYUqkUIpEI8XgcgUAAdrsda2trcDqdCAQCAAC9Xo+qqiqUl5dDq9VCJpOlBfQI1+ShUAiRSASpVApyuTzrzM3ey5J/ioqK0pYDRO6Q6HfJVgJ/WcJXKBQwmUzQarU7Po5UKoVarUZpaSnq6+uxb98+WCwWaDQayOXyNOHG43GEQiEsLy9jfHwcs7OzWFtbQzQahcFgQFNTEw4ePIiGhgYYjUbI5XI+oDALwev1wuVyIRgMQiwWQ6/Xc9Gz125c0wtN+2g0CqlU+rsUCykESPS7JJO4X9Yak3nYhWLJF7lcDpVKhYqKChw8eBCNjY0wmUxQKpVb+gmi0ShWV1cxPj6O8fFxLC8vw+fzQS6XY2JiAuvr64hGo2hsbITRaOSmezgchsvlwsrKCqxWK3w+HxQKBaqqqrjlwqyOjeY9E300GkUkEgEAmul3CIl+D3hVjiQmJJvNtqPQWwAwGAw4ePAguru70dbWhrKyMshksi3Pl0wmEQgEMDMzg6GhIUxNTcHj8SAej0MkEsFmsyEcDvO1e0NDA9RqNRKJBJxOJ+bm5vDs2TPMz8/D6/VCo9GgubkZyWQSMpmMi144iDHBRyIRBINBhEIhiEQimul3CIn+DSaVSsHn82F8fBzz8/Npj+eCVqtFZ2cnTp06hSNHjqC8vHzbXYBkMolgMIi1tTU+y9vt9rTzRaNRjI+PQ6FQQK1WI5VKwWAwIBwOY35+HqOjoxgdHYXVakUoFIJGo4HD4UAymYRSqeR+AOZDYINHOByGz+eDx+NBJBKhNf0uING/wcRiMTgcDoyMjGBhYSHv91ssFpw7dw7d3d1ZBQ8AiUQCNpsNo6OjGBsbg81my/i6QCDAZ3SZTIaSkhK43W48e/YMo6OjWFhYgM/nQyKRgFQqhcfjQSqVgkql4j4EtVrNHXvhcBherxc2mw1OpxMAoFQqSfQ7hET/hhKPx+FwODA9PY25ubkdmbqVlZVob2/POVc+mUxifn4ev/zyC2ZmZrZ8XSwWQygUgsPhwMrKCnw+H9bW1jA2Noa5uTm43W4ePRiJRBCNRjE8PAylUgmVSgWpVAqz2Qy5XI5kMgmv14vV1VX+XrVaDb1eT+b9DiHRv6HE43FMT0/jzp07eSfZAEBdXR2OHj2K6urqnPb4E4kE3G43JiYmMDAwkJMPgW3x+Xw+rK+vw263w+v1bqq3F4lEsLq6iqGhIT7DNzU1QafTcetienoas7OzCIVCsFgsqKyspJl+h5Do30DY7Dc8PIxffvkl55p4LKoOAI4fP44zZ87AaDTm5IgMBAIYGxvD48ePsby8DGDreACpVAqdTofy8nKUlpYiHA4jmUxuGzobDoexsrKCwcFBFBUVwe/3o7S0FMlkEsvLy5icnMTi4iIkEgmkUinPBSDR5w+J/g3E7/djYmICg4OD3MzOJyBHqVSitbUVra2tKC4uzuk9Ho8Ht27dwp07dzLGxwvRarXYv38/2traUFNTg/X1dczNzfGZfyuCwSCWlpYgkUjg9XphMpmQSCSwtrYGq9UKp9PJg4dY2DCJPn9I9G8YiUQCdrsdv/zyC+7evctFlO3Lz7a4RCIRjh07hoMHD8JgMOS0vx+JRLC2tobHjx/j+fPnWV9vsVjQ2dmJw4cP8z3/mZkZyOXyrJ/N5/NhcXERgUAAxcXF3KrxeDwIBAIwGo3w+/1c9Gy2p/j73CHRv2H4fD5MTEzg559/xvj4eM7vY4NCc3MzvvzySxw8eDBn5936+jqGh4fTquxuZVmo1Wq0tLTg2LFjaGxs5F72qqqqrFV42Pac1+tFNBqF0+nkobcsE1ChUCAUCiEcDu9p5l8hQaJ/g4jFYpiZmcFPP/2EycnJnN4jFGdzczP+/Oc/48yZM6iurs5J9LFYDNPT07hy5UrWWACJRILW1lYcO3YMTU1NMJlMEIvFMJlMqKyshE6ny3o+lkzDhC3Mu2fXE4lEEAqFEI1G+eNE7pDo3xBisRgWFxdx48YNfP/997BarXm9X61W47333sOFCxdQV1cHqVS65WuF5nIqlcLKygru378Pt9udcYZnj0kkEnR0dKCrqwtlZWVQKBRIpVLQaDQ8BTgbTOQb/2bnFCbsMAchmff5QUU03gDYttXNmzfx/fffY2xsLOcveiqVglgsxuHDh9HX14fGxsasa2vhcVm8PNsWzFQGmwmytLQUBw8eRH19PZRKJc8NkMlk0Gg0UCgUOecIsNldKHj2eDgc5ll6NNPnD4n+NSeZTMLpdOLJkyf49ttvcffuXf5cLs474EXK6/vvv4/29va88u4jkQiWl5extLSUdj2Z0Ol06OjoQENDA3Q6HSQSCT9/UVERJBJJTolBmfLohaRSqTTznrz3+UPm/WtMIpFAMBjE2NgYvvvuOzx48AChUCjn96dSKZhMJpw/fx6nTp1CbW1tXhV2fD4fBgYGcP/+fT6jCkUvNPUtFgtOnjyJ/fv3pyXssNewfPjttuxYeq0w5j7TZ2LZdtRUc2eQ6F9TUqkUQqEQJiYmcO3aNVy9ejXndbwwCOfgwYP44osv0NramncN+2AwiMePH+Phw4dZi27W1dXhyJEjMJvNaUuAVCqFaDSKQCDAi21kgqXWCuvzZQq+EZbmJnYGif41hGWzzc3N4cqVK/juu++2jXXfjvr6erS3t/Py1vk4vWKxGFZXV+Hz+QBs3qZj/zabzWhpaYHFYoFKpUo7PtuCW1hY4MkyGxGJRJDJZJDL5ZDJZNxZx4SfCZaJt9M6AoUMif41gxWqnJubw+XLl/Htt99idHQ0r5mN5aYfOnQI3d3daR1rchV8JBLZVGVXKHqhNdHZ2Ymenh4YjcZNjr5EIoGVlRU8evSIh+9uRCKRQKlUQq/XQ6FQIBqNwuv18np8GxHW4ttYcIPIDon+NSKZTMLv92NqagrXrl3DP//5TwwNDeVV310ikSAej6OoqAjnz5/HsWPHsnrrN5JKpeBwODA6Oor19fW0x4XXCgDl5eU4ceIEDh8+zEN6mTURj8fhdrsxOTmJBw8eZEwMYrO80WhETU0NiouL4fP5sLS0xANwhOdluwFqtRoqlYqaau4AEv1rAhPI8+fP8cMPP+DixYsYHR3Nu6EDc36VlJTg0KFDqK+vz7tSbjwex8LCAq5evZoWdrtxfa3X63Hy5El0dnbCYrFwBx6becPhMKanpzEwMIDJycmMfgFWebeqqgotLS3Q6/Ww2WyIRCJwu90IBoObziuXy3lpbmq1lT90x14DEokEHA4HhoaGcOnSJVy/fh1TU1N5CZ6Z3sxj/+GHH6KhoSFvwTNr4/nz57h9+zbsdvum8wAvBoDa2lq8//77aG5u3nQeFjP/4MED3Lx5E16vN+P5JBIJ9Ho9amtr0dzcDL1eD51OB7fbDavVygtsMOEXFRVtmunJvM8PEv0rJhaLYWlpCXfu3MEPP/yAW7du7agKjnCt3dfXh88//xy1tbV5CyKZTGJubg6Dg4ObUmiFa/rS0lL09fXx6LuN5wmHw1heXsbjx4/x9OnTLX0SYrEYRqMRtbW1qKurg1arhUQiwdLSEs+tFw5+bDnA1vRk3ucPif4VEY/HEQwGsbCwgJs3b+LixYu4detWXvvwG5FKpejo6MD58+fR0dGBkpKSvN7P1vJ37tzBL7/8simDj/2WSqU4e/YsPvroI1RXV2/yGSSTSV7Ga2Jigpv1mUJ4JRIJSkpKeI19lUqFSCQCo9EItVoNiUTCq98C4I0xmKefRJ8/JPpdsJM2Vsw77/F4MD4+jqtXr+Ly5ct49uzZjhpQCmlra8NXX32F/v7+HdXBd7vduHfvHn744QcMDg5mfI1CocDZs2fxxRdfoKuri59HuBUYj8dhtVpx69attMy8rQpuGI1GmEwmHqqrVCqhUCj4ltzGXQOpVAqpVEqm/Q4h0e8QVpaZtWUShp1u9fpkMgmPx4PJyUncv38fv/76Ky8jnS9CISgUCnR0dODjjz/G2bNn8468A34T/F//+lfcunUr43mAF8E+n3/+OY4fPw6j0bjlZ7XZbHj8+HGa9z8TCoWCr+OVSmVas4tMYbhM9Jnq4xO5QaLfIYlEAn6/H8FgkDuWhAklQrFEo1He5GF8fBz37t3D1atXMTY2xo+XbysqoeB7enrw5Zdf4uzZs7BYLHmvdb1eLx4+fIivv/4aly9fRiAQSHMMMurq6nD69Gn09PTAbDanHWNjQI7f78fa2tq2n00ikUCn08FgMPD1O0uo8fv9CIVCm5yZLIafZvmdQ6LfAclkEqFQCKurq1hZWYFcLofJZOLBJRKJhIefRiIROJ1OjI+P48aNG7hz5w6v6ipkJzHkarUa/f39+Jd/+Rf09/ejvLwcCoUiLzF4vV4MDg7im2++waVLl3iobKYgnMOHD+PMmTObQm03fg6W+soEu5Xo2X0zGo28QWYoFILT6YTNZuMBOhv36ZngSfQ7IyfRF3JSQ6YvVjQahdVqxeDgIDfNDQYDTCYTysrKoNPpEIvFsLa2hufPn2NiYgKzs7OYmppKi5/Pd3bfaNL39PTgz3/+M9577z1UVFTkPft5PB4+w//P//wP354TnocJvr29He+//z4OHjy4bV48izdwOp1ZS3lpNBpUVVWhpKQEMpkMsVgMXq8XS0tLvDb+VtuWr6Jb8NtCTqKnEfU3R1U4HMbs7CyuX7+O27dvY35+HvF4HHK5HFqtFmazGTqdjjuzxsbGMDMzk+aky2Q653oNwAsT9+jRo/jiiy9w6tQplJeX5y14l8uFe/fu4ZtvvsHly5e5KS48D7vO2tpa/OlPf8LJkydhMpm29RewAXHjZ85EWVkZGhoaYDabeYXb1dVVzMzMYH5+Hn6/f8uEG9bbngpo5A+Z91mIxWLw+XwIBAJIJpNYW1vDzZs38Z//+Z8YGRnhzjxmbrI+bMLWypm+uDtFLBbjwIED+PTTT3H69GmYTKZtq+BkwuVy4fbt2/jrX/+aZtJvJJVKwWg0or+/H6dOnUJ9fX1WByGLwnv27Bmi0Sg/zkbKysrQ3NyMlpYWvs/v8XgwMzODqakprK2tpW3VMVgyDkutZY5UIne2/R8MBoMFWVucVZsBgOfPn2NkZASrq6u8AeOTJ08wMzOT8Uu5Ffma8gypVMpnTLFYjO7ubnz++ec4ffo0qqqqco64Y2a6zWbD7du38e///u+4du0aF/xWyTTvvPMOzp07tylPfiui0SgWFhYwMTHBRb8RrVaLjo4O9Pf3o7GxETqdjjfinJiYwNzcXMZZHgBPwvH7/fD5fNBoNOTUy5NtRe92u/Ho0SOMjY1BJpNBLBYXxADARJ9KpTA9PY2nT5/C4XDwLi3bBZts/PJlqxGfCeFx2bn0ej26u7tx4cIFvP/++6iuroZMJss5NsDv92NpaQl3797Ft99+iytXriAcDqeF1QpfD7zwG3R3d6Ozs3PbfX+hic1CillyzcZ7pNfrceTIEZw/fx49PT2wWCwoKiqC1+vF+vo6pqensba2tm0IMjuHzWaDwWDI23lZ6GSd6f/+97/j73//O4AX3tbdBpC8aWws6iAkk5D3YlDMlNjy+eef47PPPkN7ezsMBkPanvZ2sFLSk5OTuH79Oi5fvoxHjx5lHYwUCgU++OADnD59GpWVldtaFELBs+6ywufYOfR6PY4ePcr3+auqqiCXy3nNu/X1dd77bjtY7f+1tTVUVVVBq9WSiZ8H24o+lUqlrffyMWffFl5WhZZMMy5rGNHa2oojR46gra0NJSUlOTuvWC77rVu3cPHiRQwMDMBqtW5y1Alhpr1EIkFvby86OjpyrmLLUmKFxTLY/TMYDOjv78fHH3+MEydOpC1NWN95m82WtUcec+T5fD44nU4EAgHE43HKtsuDbe8US3tkyOXygqs+ul31lr2Eic9oNKKsrAz79u3DBx98gP7+fuzbt4+HpQK57abEYjFYrVZcu3YN33zzDW7evIlwOMzfv9XuAfusLS0taGtrg9lszmkWZXH7AwMDaaG37DP19vbis88+4/EEcrk87Tp8Ph9sNhu/xq2Ix+O8443T6cT6+joMBgMPyyWyk3V4FH7hmbeU+H1Qq9X48MMPceHCBbS1tfGAHxa4kiuJRAKrq6u4efMm/va3v+Hnn39Oez7bEqSpqQkff/wx6urqchZSLBbDysoK7ty5g+npaf64TqdDV1cXvvjiC/T29vKIQSB98PF6vXA4HFmtyWg0ivX1dZSVlcFut2N+fh4mkwlarZZEnyNkE70ihB5yhUKBQ4cO4b333sP777+Pd999N63EVT6wENinT5/im2++wb179/K+npqaGpw8eRKVlZU5CSmRSMDpdGJ6ehoTExPw+/38mIcOHcInn3zC1/BsB0C4xEgmkwgEAnA4HFlrCMRiMdhsNjgcDjgcDiwvL6O+vj7vYiOFDIn+JcPExQTW0NCArq4unDp1CseOHcP+/fs3Va3NJwAlmUxiZmYGP//8M+7du4dQKJTTdiG7HrVajba2Nuzbty/njrbRaBRTU1O4e/cuD/KRSqVoaGjA2bNn0d/fnyb4TOcOhULw+/05iTcQCPBSWqFQCG63G16vF0qlkmb7HCDRv2SEy6Pm5mb85S9/wfnz51FfX8+TdjaSj+Dtdjtu376NK1eucIdaLk0xUqkXban6+/tx/PjxnJx3wIs1NlvL37x5k8/yRqMRp0+fxnvvvYe6urpNn2tjUwvWwCLX3Q/W8w4A1tbWsLS0BI1Gg+LiYtq+ywKJ/iWwcaaVyWTo6enBH//4Rx74km9Zq0ywSLtLly5haGgo5/ex6jSsjXWuHnvgRcLO48eP+Vo+Go1CoVDgnXfeQW9vL5qbmzeVxRbC1vSxWGzLYJ5MhEIh3s9ucXERGo0GlZWV0Gg0JPoskOhfAkzwtbW1aGxsRENDA3p7e3Hs2DHU1tbuiUnqdDp5pN2dO3fyei8zqQ8fPox3330XFRUVOYX2+nw+jIyM4LvvvsPDhw+5aGtqatDb24vW1lbo9fptfROsk0227jcbcbvdWFtbg8FgQDweRyAQoI43OUKi/52Ry+VQq9Worq7GmTNncO7cOTQ2NvJ00r0QvMfjwa+//oq//e1v+PHHHxGJRNIcc7nQ3NyMP/7xj2hqaspZ8E+ePMGlS5dw9epVLC4uAniRDNTc3IwTJ07AYrFk3T9n++75dq1xuVxYXl5GeXk5X8vTDJ8bJPrfCdaXvaOjA729vWhpaUFDQwMqKythMBj27Avq8Xjw4MED/OMf/8C3337Lt7zyERCrvJNL33pW5XZ4eBj//d//jYsXL/IGl2KxGJWVlWhra+Mx9dl2IOLxOCKRSN6Rnmy/PhQK8c9Ks3xukOh3gFar5aGwyWQSkUiEN2Vg8fB6vR7t7e04c+YMjh49ykNZd1viSejJ93q9ePToEf7xj3/g2rVrPLBlu1leGFYM/FaI44MPPsC+ffu2jAlg5cFsNhsePXqEixcv4qeffsL8/DwXG+uq8+6776KkpGRbi0FYVcjtdsPv9+d9X4TWAVsmJJNJ8uBngUSfJ2q1GnV1ddi3bx/0ej3i8Th3KiWTScjlciiVStTW1qK3txeHDx9GeXn5noWJMmG43W48fPgQ//znP3k+vLBD7Faw58RiMSoqKnDkyBF88cUXOHHixJbOO7Y3PjMzg6GhIdy8eRM///wzL7rBBhmtVot3330Xzc3NvD/9dp+DFc1YWFiA3W6HSCSCRCLZ1JM+271g3XRCoRBisVjeqcaFBok+DyQSCUpLS1FfX89rtLP87lgshkQigaKiIlRUVODgwYM4cOAAzGbznseFsyKW//Ef/4FLly5x8eVj3ra3t+PTTz9Ff38/GhoaUFJSAqVSmfaaaDSKYDDIe9H9+OOPuH37NlZWVtIi59hAYjabsX//fh5muxXMW+9yuTAzM4Ph4WEsLS3xAqMA8nLqiUQi3v8uFAql1SokNkOizwODwYCamhqUl5ejuLiYF2mUSqV837i4uBhNTU1obW1FWVnZjgQvjFbb+Jjdbsevv/7K8+G3SlBhvd6F4tHpdGhvb0drayu6urrQ2dnJ215tPFc4HMb6+joeP36MGzdu4N69e5iYmEg738YMuvr6et65VljVVphMFI/HEQ6HYbfbMTY2hrt37+L+/ftYXl7miT6sKEm2QYwdj+3zezweBIPBnHwJhQyJPg80Gg0vhyUUFPuCSqVSVFRUoK6ubkcVbRgbzWIWWru4uIgHDx7g0qVLuHLlSsYCGMJ4dpZ9xmL4u7u7ce7cOXR1dXGv98YoOZb8MjU1hTt37uCnn37C/fv305pPZkrYMRqNaGpqQklJyaaBjq23A4EAVldXMT09jbGxMQwPD+PZs2ewWq28yQerPpSL6IVOQFaEdGMhTWIzJPo8kMvlUKlUPEMMSF9XajQaVFdXpyWV7IZoNAqPxwO73Y65uTncuXMHP/74Y1o+PIAt/w28aIDxySefoLu7G7W1tTCZTLwQZSaCwSAmJibw3Xff4euvv8bk5GRO5b5MJhPPbQfAKy6x/HoWJz8yMoJff/0Vw8PDWF1d5Xvrwiq3uZJMJhEMBnmTS5lMRim2OZD1DgnNJGbGFhJsNmc90VlxTHZfioqKkEqloNFoYLFYYDabodFodmRexmIxhMNhHqjicrkwODiIGzduYHBwEAsLC3A6nZtm9Y25+FqtFj09PThw4AAOHTrEu9eyyLhMwmKlq9fW1nDt2jV8/fXXmJiYyOm65XI5DAYD9Ho9RCIRj5Rj/exGRkZw//59jI+PY2lpCXa7fdOyhJUNZwk4uczWrGhHOBxGUVERtFotxd/nABXRyIHS0lIcOHAA7e3tqK2t5Vt1rEBjIpFAWVkZ6urqYDAYcp5thJ72UCgEq9WK0dFRzM/Pw+PxwOv1Ynx8HFEgfnwAABUTSURBVAMDA2ndYzea1+y3TqdDWVkZenp6cOHCBXR2dqK0tBQymSxrfTtWmHJgYAA//fQTF3y2IB+2PanVahGPx+F0Onnpq5mZGUxOTmJ0dBSjo6Ow2WxbHkfYLSifuoxs6SCTyXgaMq3ntyevIhoKhaIgUhjFYjH/ElZXV6O3t5envLJtOtaPzuVyIRaLwWQy8djvXGaaSCTC67z5fD64XC6MjY3h+vXrePDgwbYVZDIJory8HP39/Th79iw6OztRU1MDnU6X8wAUi8WwsLCAH3/8ESMjI/zxbEE+MpmMD3Srq6u8r/zTp08xODiImZmZnJty5luwpKioCHK5nDe0VKlUORXvLHS2/UaoVCr867/+K44cOcIrkxSCk0QkEnETu7i4mMfMsw4ybJsuGAzC7/cjFotBqVRmFZnwfWtra3xWffbsGdxuN/dqZxPJRifXkSNH8PHHH/PqsiaTKa8Enng8jpWVFTx+/Bi//vprWg387RCLxVCpVLzT7Pj4ODweD+bn57G0tASHw/G7Fl0Ri8W8Tz01tMydbUWv1+vx3nvv4eTJky/rel4LmKiY/0IikfAZhf0tkUigUCig1WrTAl42funYc4lEAi6XCxMTExgcHMTExASePn2K4eHhjLM627oSmvFCs14sFqOsrAwHDhzAxx9/nFeZ6o1EIhE8ffoUV69exdzcXNq5tkOlUkGn00EqlfLy4CsrK7DZbJt6yv8ekwX7P2DNQwthQtoLss70xNaIxWIuMhYCyn6zx4LBIDweD29xdfv2bVy/fh3Pnz/nx8lUFDPTMoo9L5VK0dLSgtOnT+PcuXM4dOgQ7xKTL/F4HHa7HQ8ePMCtW7d4KG82ASkUCmg0GqjVakQiEbhcLr5U2Xjtv5cYWQQfG5Bpls8N2t/YQ5j3nUXnsWi2J0+e4Pbt23jy5AmWl5fh9XrT3pdLkQv2OtYf/qOPPsLRo0dRXV0NvV6/Y481c94J9+KzzZpyuRw6nQ5arZY7AF0uV86Vb/YK5u1n/e2p/n1uUAPLHMi1oQQr48wcdKzTy/DwMEZHR+HxeDYdc7t7u9GTbTKZcPr0aXz55Ze8XfRu1rFerxdPnjzh5bEZ210TW9JotVpIpVIEAgG43W5eivplwjLzLBYLqquroVarSfQ5QA0s9wgWcba4uIjJyUlMTk7iyZMnmJiYgM1m4yZ/Ps0rhYUzy8vLcf78eXz22Wfo6uraVXpuKpWC3+/HkydP8N133+HatWvbbqcBLwYg4QwvlUr50oUVsHjZsD71paWlMJvN21boIX6DzPs9IpVK8a6rU1NTGBkZwdjY2CYx5WPKAy9iBPr6+nDq1CkcPXoU9fX1uxI8y4cfGRnBf/3Xf+HixYtpIbaZkEqlUKvV0Gq1UKlUkEgkCAQC8Hg88Pv9eZW52itYSHRJSQnUajVvu0Zkh0S/h7DglMXFRSwsLGTt1sIQrqHZ77KyMrS2tuLYsWPo6enBu+++C7PZnDW8N1OyDvBbPrzdbsfQ0BCf4Vk+fKYgHKlUiuLiYmi1WhQXF/OITK/Xy036VyF44EXyU3NzMw4dOrTjxKZChe7UHsFmmXg8Do/Hk9GLvRVMqGyvv6KiAp2dnTh9+jQOHz4Mi8WSc3hpJgsgGo3C5XJhYWEBQ0ND+OWXX3Djxg1YrVb+GpbZplKpoFarodPpoNfrodfroVQqEYvF4Ha7Ybfb4XK5XplJz1AoFKirq+M1/Uj0uUN3ao9ga16NRgOlUpm387O0tBTd3d04ceIE2traeOKOwWDYUfIO2z3w+/2w2+2YnJzEjRs3cOvWLUxPT2/qSa9UKmE2m9HQ0MDLemk0Gm4dzMzMwGq1wmazvXQvfSZYGnN5eTn0ej2JPg/oTu0RLMuutrYWdXV1mJqagtfr3db81Wg0aGhoQHNzM+8d19bWhoqKCl40U7jG32odz6IH4/E4rzoTCAQwPz+PR48eYXBwEM+fP8fc3BzPbAN+q57T2NiIpqYm1NbWorq6mgsJeNHP/vHjx3C73VhfX9+x4PcyeIbda61WC4VCQQk2eUKi3yPEYjE0Gg3q6upw+PBhrK+vIxKJYHV1ldfPA16sk1UqFYxGI9ra2tDb24vu7m7U19dDp9NBqVRmDDQRip8l6rD6fF6vF6urq1heXsb6+joCgQC8Xi8WFxfx5MkTPH36lDehAF6YxixB6ODBg+jq6kJrayv3gLPz+/1++Hy+tJJWO53h2ednAU2JRGLHywOdTofa2lpYLBZIpdK8OgARJPo9QywWczG1t7cjEokglUphZGQENpsNiUQCYrEYer0eDQ0N6OzsxNGjR9Hc3Ayz2Qy1Wr1tRB0TOAuEYa2dWGEKVpRiYmICdrsd4XA4Y1lprVaLxsZG9PX1oaenBw0NDSgtLd00awqLXkxMTGBlZWVXJr1IJEJJSQksFgs0Gg38fj9WV1fhcrnyOq5EIoHZbEZjYyNqamooIGcHkOj3EIlEwgtpsI4xer0eMzMzCAaDkMvlqK6uxqFDh9DR0YHGxkaUlJSkFeXY6H1nM2IgEMDKygqGhobw4MEDTE5OwuPxIBKJ8EIVbDDIhFgsRlNTE44fP45jx47h0KFDqK2t5W2eN+bZM5/A+Pg4hoeH4fP5dnxfjEYjuru70dHRgX379kEqlWJ1dRX37t3j/e9yNf1ZJSCLxQKj0UhFMHcAiX4PYbHgxcXFqK6uRjKZhEwmg9FohNPphFQqRW1tLVpaWniVmY0OKGFF20QiAbfbjdnZWYyMjODp06cYGRnB6Ojotnvrwvp0qVQKOp0OLS0tOHv2LE6fPo2Wlhbo9fqMPd2Z+FgI8djYGGZmZna8HrdYLOjv78dHH32Ezs5OlJWVIZlMwmazQa/XIxAI4O7duzkPKhKJhKfQ0gy/M0j0ewwrSKlSqbg5y2q6MycbKx8llUq5WS3MFItGo9zr/vz5c9y9exfXrl3D2NgYT4jZDqFJz2rjffrpp+jr60NtbS0PsNnq+hOJBBwOB4aHhzE1NbXj9FjWxPJPf/oTOjs7YTKZeIUcpVKJI0eOYGFhAePj4zmLntXQC4fDPK2Z1vT5QaL/HWHpucFgkFeUWVtbw9raGqxWK/eUGwwGvp5mnVtmZmYwMDCAgYEBvk7P1/FlNBpx8uRJfPrppzh+/Diqq6s3lbnORDweh9Vqxe3btzE7O7ujz65UKtHX14ePPvoI3d3dKC0tTbMqFAoFLBYL3nnnHeh0upyPK6z7b7fbUVlZyevyEblBot9DmDmdSCQQCoXgcrkwPz+PyclJPH/+HC6Xi5d20mq1MBqNMBqNKC4u5rXaWTHM5eVlTExMYH5+Pi1un50nG0zwn332Gfr7+7PWomckk0n4/X7Mz89jaGgILpdrR/fCbDajr68PXV1dMJlMmwqwiEQiKJVKGAyGtOpM2WA19LxeL1wuF3eYErlDot8jhGWnw+EwHA4HZmdneaEMq9XK97hZcQ5mqrL6+cCLzLFYLLZtPn029Ho9jh49is8++wx9fX05Cx54Eb23vLyMycnJnFNtNyKRSFBTU4OmpiaUlZWlzfCZBq589tmTySTC4TC8Xi+P/Y9EIhSckwd0p/YA4QzPttWsVit3vi0sLMDr9W7ZSnkvC44WFxfj+PHj+Pzzz3Hs2LG8BM+Cep4+fYqBgQEEg0H+eD4wf0amrrzsWMICI/l8/lgsBqfTCbfbDYfDgdXVVb4DQsLPDUpL2iVCwbP6d3a7HfPz85iensbi4mKawykXtipTnQ2z2YwTJ07gD3/4A06cOIGKigrIZDJ+jdnOH4lEYLPZMDw8jOHh4R0PRizj0OFwwOfzbepNl0wmEQqFsLS0hLGxMTgcjpyPHYlEsLa2BpfLBYfDgfn5edjt9leW+PMmQkPjLhBGxsXjccRiMT57ORwOOJ1OhEKhnBsyCo+bCyKRCDKZjAcFHThwAOfOnUNPTw8qKipy7unGliVOpxNjY2N4+vQpVlZWcr7ejYTDYczNzeHRo0fQ6XRoamriRUOZNWG1WnHv3j3cu3cPTqcz52OnUim43W74fD7eCMTr9b7yXIA3CRL9LhDup2+sjyeRSCCVSiGVSvckz5vN/qxwBKtgU1JSgurqajQ2NuLAgQNoa2tL67Cz1XbWRgvF5/NhcnIS9+7dw/T09K6q2MZiMSwtLeHHH3+Ex+NBV1cX6urqeAKPzWbjJcRGRkY2lQ/LhjDPgLWxImde7pDod4nwC8cy7QwGA6qqqtDQ0MCLRcZisbyFxKruKpVKaLVa6HS6tB+DwYDS0lJYLBZUVVXBYrHwXnKsTh+7RuG1ssGKtXdmuwyDg4N4+PAhbDZb1iYX2fD7/RgfH4fT6cTQ0BBKS0uhUql4nILVasXi4iLcbveOBEsi3zkk+l3CPPDAi8YPbPuJzaCsqeLc3By8Xm9OQmJmO9vSKi8vR01NDSorK2GxWGAymaDT6VBcXAy1Wg2lUskdWZFIBMFgkBfpDAaDvM2UsKU2my2Z6BcWFjA9PY35+XmEw2E+cOxGXOFwGAsLC1hYWEj7bHshWGHZMRoA8oNEvwuEgheLxbwCDZuhZTIZ5HI5F+X09PS2Xnx2TKlUCqVSCZPJhLq6OjQ3N+Odd95BTU0NTCYT39dnUXzCXQMWtOJ0OmGz2WC32/nffr+fi5/5GZhPgrXpYjkD7HPsdRfYvToWW7YUFRVl7DdAbA2JfpcIhQ+Ai0UqlaaJXqVSobi4GBMTE3A6nYhEIpscfCx2n63ZNRoNN98rKipgNpuh1+u5g25jau3c3BzPm19bW+MlrQKBAG/pvJXDSyaToaioiCewsGCa17WJRDKZhEqlgsVioSIaeUJ3ahdsbFfNYDM+GwCYh12hUEAqlWJ8fBwOh4MLX2jys0GEzcKhUAg+nw9utxsqlQqJRAIKhYI/53Q6YbVaMT09jYmJCczOzmJlZSWt3HYun4MNBkKhv45iZ0SjUSiVStTV1cFsNlMPuzwg0e8S4UwobB3NZm2FQgGj0Yj9+/fzNNhQKIR4PA632833l5nwmUc9HA5zB1sikYDH48HKygr0ej0vQsEem52d5WJnMQH5wAQei8XSLJd8G0q+LFghDoPBgIqKCprp84Tu1B4gnOk3DgJFRUWQyWQoLi6G2WzmZvrq6ip8Pl/ae5nghd71QCAAp9OJ+fl5aLVaqNVqvtb2+/1wOp1wuVzweDwIh8O7mp2Fnv3XGZPJhMOHD6O9vR1Go5EEnyd0t/aYjaLLtGYXOp6YyDZupwEv9rtDoRD8fj/W1tYgk8n4mp9535lH/nUX6m5hg6lGo8HRo0dx7tw5tLe3o7i4mJx4eUKi3wOEwhbuibPZmuV+syaPLpcLoVCIb59ttX5mj0ejUYhEIr4UEJrfr/vae69gn7GlpQWffPIJent7YbFYaJbfAXTHdolwht5YtJIJniXgTE1NYXp6Gqurq/D7/ZuceNnOw2BBN4WAMEiovb0dX331Ffr7+1FZWUmC3yF013aJ0DxnQmfBLywFdH19HbOzs5iZmcHCwgIcDgffM8/3XIUGE/yBAwfw1Vdf4cKFC6itraXaeLuARL8LmONN+MPy4VnJK7fbDZvNBpvNBo/Hg2QyyYNvhCW0NobMMth6lfkBmHd9Y1AKS5rZaHXkY03sNWzbcitnZS5IpVIcOHAAf/nLX3DhwgW88847JPhdQqLfBUxoLNSWiT4SiSASiSAQCCAYDCIej0OhUMBsNiOVSsFgMMDr9SISiXBHnDB4hrWYYrH8UqmU7/ezaD/2GHNwMcceEz5LAPJ4PFhfX99xBZydUFxcDKPRyLcXhcJnsQU2my2rpWMymXD06FFcuHABp06d4pV0id1Bot8FmRJZAPCZWC6Xo7i4mFfILS8v5wNBKBRCKBTisfIsPp6F6LI9fpVKBY1GA5VKBYVCAZlMxgXPOuCwZUUkEuHWhdfrRSAQgMvlgslkSosCZMuOUCi063ugVquhVqu5sHU6Herq6rBv3z7eWDIYDCIYDCIQCPCioCUlJZt62rN7GIlEoNVq0dHRgQ8//BB9fX2orKwkwe8RJPpdINyHZ2GrwjRb9rPxb7YEYBbBxoQYsVjMlwAajYYn1bDuN5m2/Vj8vcvlwsrKCp/dXS4XL8rJzu/1erG8vMwdihvDbTMNYsLoQ3Y+lUqFiooK1NfXw2QyQaFQoKSkhItep9MhmUzyllhutxtut5vXGwiFQpuiEVlpa7PZjJ6eHnR0dJCXfo8RZVlbFZ7nKE+Ejjz2t1Aw23n3mcNPODgIhSbMyReKPdM6mZn4rPEFa0e1srKC+fl5rK+vc3EHg0E4HA44HI40E1s4eDArhC0xWNIQ86YnEglIpVJUVVWho6MDLS0tvGwVyzOQSqW8ph2zcNhOxtLSElwuF/+8yWQScrkclZWVvHlneXk5jEbjjhp4EgCAjAEMJPqXiHAgYL+3u//C2TXXElpCqyIcDsNut2N1dZWb/OzvYDCY1mNPaDUIU3JTqRRfZrDcfr1eD5PJBK1WC71ej7q6OtTU1ECn02265o0OxUAgAJvNhvX19bRa96wxCItaZKG1lEG3K0j0hQZbH7Mfu92Oubk5LCwsIBqNpmUHCkt+CQtwMN8ES2hhmW11dXUwmUyQSqWQy+U81TcbLDOQ5R8Ir5X1A2SJScSuIdEXOsFgkM/4QsEJK9P6fD6+26DT6aDVatN67bF+fTqdLmO1W+K1gkRPgJv+wiUGW8f7/f60Lcbi4mLeN44hjBMgs/u1h0RPbA1zBLIBgQmbvOZvNCR6gigwMoqeml0QRIFBoieIAoNETxAFBomeIAoMEj1BFBgkeoIoMEj0BFFgkOgJosAg0RNEgUGiJ4gCg0RPEAUGiZ4gCgwSPUEUGCR6gigwSPQEUWCQ6AmiwCDRE0SBQaIniAKDRE8QBQaJniAKDBI9QRQYJHqCKDBI9ARRYJDoCaLAINETRIFBoieIAoNETxAFBomeIAoMEj1BFBgkeoIoMEj0BFFgkOgJosAg0RNEgUGiJ4gCg0RPEAUGiZ4gCgwSPUEUGCR6gigwSPQEUWCQ6AmiwCDRE0SBQaIniAKDRE8QBQaJniAKDBI9QRQYJHqCKDBI9ARRYJDoCaLAINETRIFBoieIAoNETxAFBomeIAoMEj1BFBgkeoIoMCRZnhe9lKsgCOKlQTM9QRQYJHqCKDBI9ARRYJDoCaLAINETRIFBoieIAuP/B85Hs6NnYkXvAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 62\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 63\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 65\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 66\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 67\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO29V1eU2br3/a9ABaqoQM4UIEERUcQAaqtta2vn1b26997r/B3v2Xuyj55v8Jw+X+HZe+xeY62x2s62ARURESVJECRLKkJROYe73gPHnH0XFFBFMNX1G4PRNFB33VXWf85rXlESjUZBEETqIH3TN0AQxOuFRE8QKQaJniBSDBI9QaQYJHqCSDHk2/yeXPvvENFoFGazGa2trejq6oJcLkdaWhoikciOrieRSOD1elFYWIhPPvkEdXV1UKlUe3zXxD4iiffD7URPvANEo1FIJBJIJBIIgoCxsTH8/vvvUCqVUKlUOxI9u57NZsOhQ4dw7tw5SKVkGL4PkOjfM6LRKGZnZzE9Pb1n1wyFQvB6vZBI4m4cxDsGLd3vIXL5n2v5XghVqVSS4N8jSPTvIWIzXLwAJHsN9li5XE6if48g8/49Z6dOPEEQwFK0d3oN4u2Edvr3EEEQ3vQtEG8xJPr3EPKyE1tBnw6CSDFI9ASRYpDoCSLFINETRIpBoieIFINETxApBomeIFIMEj1BpBgkeoJIMUj0BJFikOjfQyj3ntgKEv17COXeE1tBnw6C2EN+6l/AJ/+nHf/P/+2G1RN807cTF6qnJ4g9YtUVwH/+4xnCQhTPzU5kaUbxv7858qZvawO00xPEHuEPRRAW/mwg7fKH3+DdbA6JniD2iJLMdPy/5ysgkQD5OhX+v0tVb/qW4kLmPUHsIf/r2kH85+UaKORv73769t4ZQbyjvM2CB0j0BJFykOgJIsUg0RNEikGiJ4gUg0RPECkGiZ4gUgwSPUGkGCR6gkgxSPQEkWKQ6AkixSDRE0SKQaIniBSDRE8QKQaJniBSDBI9QaQYJHqCSDFI9ASRYpDoCSLFINETRIpBoieIFINETxApBomeIFIMEj1BpBgk+veQ/RhVHY1Gt/8j4p2ARE9si0wmg0QiedO3QewRJHpiW/bDciDeHCT69wy5XA6p9M9/VvH3ySKTyQAAbrcbgUCATPz3BBL9e0QgEMDi4iLcbjf/WSQS2fH1wuFXo5YPHToErVZLon9PING/B7DztsViQXd3N5aWlqBUKgHszAEnPr83Nzfjb3/7G0wm066sBuLtgf4V3xPC4TBsNhtevnwJq9W6K8cbWyjkcjlqa2vR0NCAnJwcyOU02fx9gP4V3yMCgQAsFgusViuCwWDSj5dKpdBqtZDJZEhPT0d1dTVOnjyJwsJCpKenkwf/PYFE/54gCAJ8Ph+Wl5dhsViS9rgrlUrk5OSguLgY6enpyMvLQ0tLC5qbm5GVlUW7/HsE/Uu+BwiCAJvNhpmZGczMzMDv9yf1eIPBgJKSEphMJhQUFEAmkyE3Nxd1dXUoLi6GSqXapzsn3gQk+necSCQCt9uN4eFhdHR0YH5+PqnHGwwGVFVVobq6Gnl5eVAqlVAoFCgtLUV+fj60Wi2Z9e8ZJPp3GEEQ4PV6MTs7i0ePHqG9vR1OpzPhx6tUKhQXF+PAgQMoLS2FUqlENBpFXl4eqqqqkJ2djbS0tH18BcSbgES/h4jDY69jdxQEAW63G5OTkxgYGMDU1BSPrSeCSqVCTk4O98wzwdfV1aG2thZGo3Hfw3TrQ4rbvW/RaJQ/RiKRkBWyA0j0e8T6D+PrIhKJwOv1wuVywefz8edPJD4vkUggk8kgCALkcjlyc3Nx6NAh1NTUICsr67UIPpmFkv09c1JKpVIS/Q4g0e8xr3O3l0gkUCgU0Ol0UKvVST8+Go0iGAwiFArBaDTi4MGDOHjw4GsRfLKw93X9QkEkD4l+l4g/hK/7wyiVSqFUKmEwGJCRkZH049mOmZGRgbKyMlRWVr4Wkx74831L1DpK9u+JzSHR75L1gn+d50yJRIK0tDTodDpoNBpIpdKk4vPRaBRyuRwlJSUoLy+H0Wh8bfF4Zqaz90280Kx//8SCf1ML7PsEiX6XsPPz+g/q6xK+XC6HSqWCUqnk5/NEkUgkSE9PR1FREfLz83m+fjKIRZjogsfEG4lEIAgCf8xWZ3TxWZ7dO7EzSPS7JN6H73V+IKVSKRQKBaRSaVKee+DPLLysrCxotdqkd/lIJIJAIMDLbhUKBZRKJeRy+ZbvgSAICIVCCAaDCIfD/DWkpaXxx4kfv/48T1773UGi3wPehg+g2FROlOzsbNTX16OwsDDpeHwkEoHL5cLq6iqWlpYgCAKysrKQn58PnU4HhUKx6X2GQiF4PB44nU74/X4olUpotVpoNBoolcq4PgVBEPhrZKInE39nkOjfcQRBQDAYRCAQ4D9LVBAlJSWor69HXl4eb5iRCJFIBHa7HWNjY+jr68P09DQikQhMJhNOnz6N6upqyGSyDdeMRqMIh8Nwu92Yn5/H3NwcHA4HdDodioqKUFhYCJ1Ox4XPFlNBEBAOh7klI5PJ3rrowrsEif4dh1XW2e32pB5nMBhQVlaGwsJCZGRkJGytCIIAh8OB58+fo7W1Fffu3cPi4iKCwSAqKiqgVquRnZ0NtVq9QfSsKMhsNqO/vx/Pnj2D1WqF0WjEoUOHEAqFUFpaCr1ez48sbKEIBoMIBoM8TEmi3zkk+ncYJsDh4WHMzs7ynyeyy5tMJlRXV0Or1SYsIJbnPzExgV9//RV//PEHpqam4Pf7EQ6HEQgEMD4+jiNHjiAnJwcKhYIvJtFoFKFQCFarFaOjo3jw4AF6enrg9Xqh0WiwtLQEn88HQRBgMpmQkZHBfQzBYBAejwc+nw9SqRQajQYymYzM+x1Con/HsdlsePr0KV68eMF/tpkYxGb/gQMHYtpgJbLTRyIRTE9P4/fff8eNGzcwNDQU81xOpxMWiwVOp3NDmy4merPZjL6+PvT29mJsbAzRaBRpaWlwuVwIhULcOigqKkJ6ejoAwOv1wmazwe12Q6FQcKfhZn4DYmtI9O8w7Gw9NDQEi8Wy7d+LRV9SUoIDBw4kXEUXiURgtVrx9OlT/PjjjxgeHo6JsTMn22YLTjQa5T38BgYGMDc3B7/fD4lEgkgkArPZDKlUCrVaDalUimAwyBOFHA4HVlZW4HK5+EKQnp7OvyeSg0T/jhKNRuHxeGCxWGCz2ZJ6rFwuR2ZmJjIzM/luud1u73a70dvbi7t372J0dDRuPoBEIkFGRgY3zcXXEwSB+x9mZ2d5NSA7s0ciEaysrGBoaAhpaWkIBALIz8+HTCaDzWaD2WyG0+mE0WhEWloajEYj9Hp9wlYK8Sck+neUcDiM2dlZ9Pb2JuzEEwQBCoUCDQ0NMJlMMc0xthJOOBzG0tISbt26hdbWVh4pYJYD291lMhmysrK4MIE/FxNm3rtcLthstg05BdFoFH6/H0tLSxgdHUUkEkFOTg6kUinsdjvf6XNzc6HT6VBaWkr9+HcIif4dhO3yAwMDuHPnDqxWa8KPzczMxJUrV3D48OGEzsTRaBRWqxWDg4Po6OjA6uoqgNijAvteJpPBYDBAr9fHjfuzZB7W2Wd9aJH1B1haWgIALC8vIxqNwul0wuFwwOPxwOVyoaSkBE6nE+FwmHb6HUCifwfx+XyYnZ1Fd3c3ent7eShrK282O3cbjUY0NTXBZDIlJPpQKISpqSm0trZibm6O/1z8XOx7lmTDzuViWBqtON6+HpaA4/f7YbVa4Xa7eSKP2Hu/uroKt9uNSCRCHvwdQKJ/B3E6nejs7MTjx4+37XrLFgMm+AsXLqC6uho6nS6h5xIEAXNzc7h//z6Wl5fjLi7s/wsKCjbd5VmuPfuKhzghh8Xl/X4/fD4ftxBYJp/P50MoFIIgCEklFhHU9/6dw+v1Ynx8HK2trRgaGuI/38prDrzaha9evYqvvvoKBQUFCcfmmbk9PT0NAJsKLCcnB0ePHt00u4+d6UOhUNx7lUgkkMvlMfn7LNswGAzyhSIUCsHv9/PcANrpk4d2+neIcDiMyclJ3L59G0+fPoXH40nocWq1GpcuXcI333yDkydPQq/XJ/Q4n8+HmZkZLnhg82GWhYWFaG5uRklJSUzhDtu5I5EIfD4ffD5f3BZZCoUCGRkZyMrKgk6n44lHbrebWwns+VmxDtvpieQg0b8jhMNhTE9P48aNG/jnP/+JmZmZbR/DzvF5eXn4+OOPcfLkSRgMhoSf0+l0oqurC48ePYoRHUNs6uv1etTU1CA7Oztuzn0wGITVaoXNZuPXYgsCC8FVVlaivLwcWq0Wdrsd09PTcLlc8Hq9/FrMLxAKhRAOh0n0O4BE/w4QiUSwuLiImzdv4ocffsDo6CgAbNs0QxAEaDQanDx5EidOnEBeXl5Sz+vz+TAwMICenp64zjfxjl1SUoLc3Ny4bbtYYs7CwgLm5+dj7jktLQ25ubk4fPgwmpqaUFFRgbS0NJjNZgCA3W6PCUkyZ59Y8OTBTw4S/VuOIAhYXl5GZ2cnfvjhB3R1dcX8Lh7iHbixsRGff/45SktLky6fZfPxmOA3W2Sampq4FRHPVxCJROB0OjE5OYmXL1/GNLbU6/Wor6/HpUuX0NTUhNzcXADA4uIiz+Azm80xDkvql7c7SPRvMYIgwG63o7+/H9evX0dfX19Cj2NCKCoqwvnz5/loqmR2Q1bkstm0HLlczheDpqYmnD59Gnq9fsNzCIIAp9OJ2dlZjI6OYnFxEZFIBBKJBGq1GhUVFTh79izOnDmD8vJypKenQxAEqFQquFwujI2NYWxsjBfjSKVSvrDQ7r4zSPRvKWxUVV9fH3799Ve0tbUllHnHdnmVSoUPPvgA586dQ2FhYVLFKYIgwGKxYHBwEMvLy/zn4l2VCb62thYnTpzAgQMHuGkvNrfD4TDMZjO6urowNjYWs4hkZmbi6NGjaGpqQmVlJXQ6XUz1XFlZGcrLy5Gbmwu73Y5QKMRFL5fLeYiPxJ8cFLJ7CwmHw1hZWUFvby9++ukn3Lx5k2epbQcTgFarRUtLC+rq6pKuRotEIpidnUVraysmJyf5z9eb0mVlZfjLX/6CxsZGZGRkbNiB2TCO0dFR3L17d4PzMTc3F0ePHuWltGlpaZDJZJDL5VCr1cjKykJZWRmKiop4/z4W2hOLnkgO2unfMiKRCJaWltDZ2YmffvoJ7e3tMZlw2yGuojOZTMjMzEw6eSUUCmFhYSEm7XY9Op0OLS0tuHbtGiorK+P6C3w+HyYmJvDkyRMMDw/D4/FwS0QulyM7Oxvl5eXIzs7e0BhDLpdDo9GguLgYJSUlUKlUcDgcfJdn3XNI9MlDon+LCIVCmJmZwd27d/HLL7+gs7Mz4bx6cfFLfn4+PvjgAxQXFye9ywuCgMXFRQwPD2NxcRHAnw48sSPv6NGjuHLlCmpra+P23I9Go3C5XOju7kZbWxsv/WWLUnp6OrKzs5GVlRU3bVcikUCpVCI7Oxv5+fn86CCVSrk1QN1zdgaJ/i2AVZhNT0/j5s2b+Mc//oHHjx/v+HpHjhzBlStXUFJSkpQwotEobDYbHj9+jLa2Nn5uZ0Jn/zUajTh37hxOnz696ZCNUCgEi8WC7u5u9PX18VbX4rh+dnY20tPT41oJzIzPyMiA0WiEWq2OMe1pp985JPo3CEtN9Xq9ePHiBW7cuIF//OMfGBkZSeo6YjHV1dXh8uXLOHLkCAwGQ1KisNvt6O3txc8//4wHDx7Ejc1rtVp8/vnnuHjxIkpKSuL2yo9Go3A4HJiYmMDMzAxCoRCAVym87Jqsc268XZ7BWmOzvv4KhYLv8iT6nUOif0Ow8tjZ2Vn09PTgwYMHaG9v522vkmnxzP6uuLgYX3zxBT788EPk5OQkdZYPBAKYmprC9evXYwQvNulVKhXOnTuHr7/+Gg0NDUhPT48runA4jMXFRXR2dsak8IrJy8tDcXEx38E3QyKR8HM8y80nJ97uINHvgp2MTWbNJZeXlzE2Noaenh60trait7eX59LvpKd7QUEBLl++jKtXr6KmpiapRJxQKIT5+Xk8evQId+7ciammE9/HsWPH8PXXX+PUqVPIzs7e9HqCIHBnpLhhpzixJzc3F4WFhVuKnllC4qEYaWlpFK7bJST6HRKJROD3+3ktu1wu5yGn9T3bg8EgvF4vfD4fPB4PFhcX0dHRgdbWVjx79gwOhyNGEImOmWZ/l5+fj6tXr+Lf/u3fUFtbC5VKlfBZPhgMwmKxoLOzEzdu3MD8/Hzce5DL5WhqakJLSwsyMzO3fW8cDgdmZ2c3nOXZvWdlZSE7O3vTUVriHvl2u5330xM78Cgbb2ckJPpUfnPj7SQs/rywsACz2QyJRAKdTge9Xg+1Ws1NUJZzvry8jJGREQwNDWF2dhZra2uYmZnB1NRUTHppMnPlxYL/5JNPeLw8mamzfr8f8/Pz6OzsxPXr19HZ2cln3DPY87S0tKClpQXFxcVbWhGsWSdrbyW+X3GZL3u/Nhulxd67paUlzM3NwePxbOjUQ2m4OyMh0ZMJ9eeHn3WFffHiBbq7uzE2NgZBEKDX62EwGPhoJua0YsMdBgcH0dfXh5WVlZjrigWc7Bm+oKAAH3/8Mf7617/ixIkTW4poPTabDaOjo+jo6MCdO3fw5MmTTTP+qqur8fXXX6OpqWnbM7jf78fExASGh4f5grb+9WVnZyMzMxMqlYr7HdYXzYRCIdjtdoyPj2NsbAwul4t33BUEAZFIhOrpdwiZ99vAmjl6PB4IggCPx4OxsTG0trbi4cOHmJ2d5f3ambMJ+LOclJWBRiIR7sUWk8yHNp5J/+///u9oaGiAwWBISPAsLNfd3Y0ffvgBN27cgNlsjntvwKuhGJ9++ikuXryIsrKybX0FHo8H/f396Ojo4CWx4teoUqlQVVWFgoKCmGEYYsGzOXkzMzMYGBjA+Pg4fD4fJBIJL6n1+/0IBAIIh8Mx1yG2Z8tPidfr3dFgxHedaDTKTeTJyUkMDw9jeXkZdrsdS0tLGB8fx8TEBMxmc9KTYsUTXxKB3Yf43+HgwYO4du0arl69ioaGBmRmZm4reNamilXs/f3vf8f9+/fjts8We+yrq6tx5coVmEymTQUv3qVDoRCmp6cxPDwctyLPYDDg2LFjKCsri5s4xFplLyws4NGjR+jr64PFYkEwGIRMJkMoFEIgEIDL5YLT6UROTs621gcRy5afFLvdjp6eHoyMjMTMFnvfYaIXBAGzs7OYnJzEysoKVlZWsLq6ys+qjM0+cGKBJ2vCM8TCycjIwKFDh/DZZ5/h2rVrqKmp4UeJrWCTZV68eMHDg/fu3ePFL+tLZtn3er0ejY2NqKurg0aj4fe//vWy//f5fFheXobZbI4pnxVfOysrC/X19SgqKoor+lAohKWlJfT09ODevXsYHx/nLbfZTLtwOAy73Q6r1Yri4uKU+EzuJdvu9N9//z2+//57AK8cMJuZge8T4okt6enpUCqVCIfD8Hq92zaTSOTnySKRSFBVVYUPP/wQly9fRkNDAwoKChLy0odCIczOzqKtrQ3Xr1/Ho0ePNqT2xtuRNRoNT8IxGo18YdlsgRMEAaurq+ju7o4prBG/B1KpFCUlJSgtLYXBYNiwWIXDYTgcDvT39+POnTsYHByEw+GIOdawPntOpxM2mw1+v59EnyRbip4lkDDE45DfZ8QiYO2XXwfrTf+ioiIcP34cdXV1MJlMOHToEGpra5GZmZmQh14QBExOTuKXX37B999/j+fPn2870poteGlpaWhpaeFJONsRjUZhNptx8+ZNDA8Px/2bAwcOoKmpiS9Y6++V1c/fv38f7e3tG/L12d+xNtlutxterxehUChhByaxjeglEgk364BXO/1m7YvfV15Hb/X1IS2VSoXa2lpcuHABH374Ierr62E0GqFSqZCWlpaQ4Fm/+h9//BH/8z//g8HBQQDgR7TNwl2CIEAul+Po0aOora1FdnZ2Qs/n8XgwPz+PwcFBuN3uuAtKXV0dTp06xSfXMFgSztLSEjo6OvDw4UOeL7Aeltzkdrv5jDs2notaYSfGtsujeNej7qP7gzj+bDQa8cEHH+DLL7/EqVOnUFhYuGlRymZEIhHMzMzg559/xn//93/znVcikSTUYquurg5/+ctfUFZWlpCDLBgMYnZ2FsPDw3A4HHFfW0FBARoaGnDw4EFee8/8A6y7Dtvlx8bGNn2uQCCAlZUV5OTkwGKx4OXLl8jOzuY5EsT2kE30BhG3nNJoNDh37hzOnDmDU6dOoba2FgUFBUmbrcFgEIuLi2htbcV//dd/xZjaW1ksYtEXFxejpaUFhYWFCe3yfr8f/f39aG1t5aJngo5Go9Bqtfjggw9w/PhxXjsvfs5AIID5+Xn09fVhdHR0y+NUMBjE8vIy8vPzsba2hqWlJbhcrpSzQHcDif41wnLF2W7LBG8wGHD58mV88803OHXqFPLz83lKb7IEAgH09PTgxx9/5Ca9eHHZDHZPbGhFcXHxhnN3PEKhEKxWK4aHh9Hb24tAILDhuFJVVYWPPvoIhw8f3lCkE41G4fP5MDY2hidPnmzatEOM0+mE2+1GMBhEIBCAw+GA0+mEWq0mEz8BSPSvEbEQ2A6enZ2Nzz77DN9++y1OnDgBnU634woyNu65o6MDHR0d/OfbCZ6JVKFQ4OrVqzh//nyML2crXC4XRkZGMDIyArfbDSC2hNZkMuHChQs4fvx4jOXCLIFwOMxN+6GhoYSdpiwbLxqNYmlpCVlZWdBqtcjIyKCY/TaQ6N8QR48eRUtLC+rr61FfX4+qqioYjcZdXdNqtaKzsxM9PT1cgInk8zORqtVqnDhxAg0NDQmJni0yd+/eRX9/f8zPgVcOyVOnTvGGHvEy8AKBAFZXVzE3NxfThHM73G43nE4nPB4P5ubmoNVqUVhYCK1WS6LfBhL9a0Cn0yEvLw8FBQUwGo3IysrCsWPHcOrUKRw4cABarXZXISeWWtvV1YV//vOf6O3tjfndZrAFIRwOIy0tDc3NzTh06NCWIUFxco7VakV/fz8ePnyIly9fxlwzLS0Nx48f59GHzdpju91uzMzMYH5+nufqJ7JQ2Ww2mM1mGI1GRCIReDyeTefkEbGQ6HcB6+ACbBy8oFAouNjLy8tRX1+PI0eOoLy8HAaDAVqtlo913u3O5PV6MTAwgOvXr+P27ds8T307AYh/39jYiG+//RYHDhzYtqlFNPpqZnxPTw9u3LjBJ+6Ir1leXo5PP/2U99zfbF69w+HA6OhoTN19IsJlKdHFxcXQ6/WQyWS0wycIiX6HGAwG5OXlQa/X8zgzS99VqVQoKirCkSNHUFNTw3f4nJwcGAyGPS0Q8fv9WFhYQGtrK37//XdeGrudcMTpsQcPHsRXX32FixcvoqioaEtnGBN8d3c3/vWvf+H333/fUJ1XUlKCS5cu4dy5cygvL9+0pRar5R8dHcXCwkKyLx1erxfBYDBmvBWxPST6HZCZmYnKykpUVFRAr9fzUco6nQ75+fnIyclBfn4+KisrUVRUxM+Z4ukse0EkEsHq6ioePnyIBw8e8N74W824Y/FxseD/4z/+A9euXUNhYeGW9e1sCMbTp0/xr3/9Czdv3uRZc+IhG42Njbhy5Qqqq6uh0WjiLnCRSAQ2mw3T09OYnp5OaJBHvHsS1zREIhGaV58AJPok0Wq1PCWWeaPZTLbS0lJUVlYiLy8PGo0GKpVq38o+/X4/nxzz888/8/AcsPmMO/HvJBIJGhoa8PXXX+PLL79ETU0Nb/yx/n6ZGT4/P4+enh7cunULd+7c2SB4uVyO6upqtLS04MiRI5uOxGYlyuPj43j69Clvtb1TWBTA5/MhGAwmPbMv1SDRJ4FcLkdOTg5MJhPy8/O52VpYWIiamhqUl5fzds37lQvO+snPzs6io6MDv/76Kx4+fJjUTimVSnHp0iV8++23OH/+PO+Gs94KYa25V1dX8fz5c9y9exd37tzByMhIzHgqttvqdDo0NzejqamJp8bGc965XC5MTEygo6MD7e3tCcXmN3sv2CIVCARgt9vh9Xq37LBLkOiTwmg0wmQycTNYKpUiNzcXhw4dQnV1NYxGI+Ry+a53dnFa7npsNht6e3vx22+/4f79+5ient6Q+grE1uEz8vPzcerUKRw8eBAnTpxAY2MjSktLN5RMi4taxsbGcPfuXdy6dQvPnz/H8vIyj8GLnYUKhQIVFRVobGxEZWXlhpRYZn47HA68ePECd+/exc2bNzE5ObmhRVeiRCIRXmrr8/lgt9vh8/kQiURI9FtAot8G8Qdbo9FwR5xcLudz1WtqapCdnb1nZvz6jDVxr72uri78+uuvuH37dty4NrtfcdtqNknm/PnzvPGGwWCI2d3FFX7hcBirq6sYGhrC3bt38ccff2BgYGDDc4gXitzcXDQ2NsYsfux6giDA6/ViaWkJg4ODePjwIdra2jA2NsbzCXYCOyb4fD4EAgHeVYcceltDot+G9a2etFotn7FWW1uLgwcPJj1UIlGCwSDsdjtsNhuWl5fR09ODX3/9ddNBFOvvF3g1RvrLL7/EsWPHUFJSguzs7E3nyLPnXFtbw9OnT/H999/j/v37G/r6rX8OpVKJqqoqnDhxgltBLKLh9Xpht9sxNzeHnp4e3L17F11dXbBYLLsu3goGg3C5XHC73RAEAUqlEmlpaRS624ZtRS/+cKSlpaVEYQOb28Z6sgGvzNfq6mqcPHkSFRUVKCwsRGFhYVLdZ7cjGAzC7/fz1lZsVPX9+/fR398Ps9mM1dXVDeb1em99dnY2zp07h7q6OjQ0NKC+vh5lZWVQqVRxHXUMdoZ/+vQp/v73v+Pu3bvcWSd+vvXPXVVVhdOnT+PQoUPQ6/U8Wcbj8WBqagpPnjxBR0cHnj9/jsXFRTidzj15v1jevtfrhVwuh8FgQHp6Onnvt4GaaGyC2Dw+cOAALxo5c+YMCgoKoNVqoVQqdyV4cV07y0wbHBzEwsICvF4vnE4n77ordnbFc44Br87seXl5aGlpwSeffMJbYrOe/Oyxmwnf6/VifHwct2/fxq1bt3j/vILWFcYAABWKSURBVHjmPPPWHzhwAJcuXUJLSwsKCgogk8ngcDiwuLiIoaEhPH36FE+ePMHz589jnH97BXsdSqWSi57O81uTVBMNlUqVdCPIdxGZTMYXuObmZnz33XeoqamByWRCbm7unniHw+EwbDYbVldXeXbZs2fPcOvWLTx79mxL51a8M2tFRQU+++wzXLhwAYcOHUJubi70en3c+9wsbr6wsIBbt27FNMzcLLNPLpejpqYGH3/8MZ9eq1ar+e7e0dGBW7duYWBgIK6jcS+Qy+VIT0+HSqWCSqWCWq2mcF0CbCn69PR0/O1vf0NjYyMv9UwFJwmL+4ZCIVRUVODIkSPIzc2FRqPZdShOEAT4fD6srq6iv78f9+7dw5MnT7C8vAy/34+1tbWYARjx7g34U/hSqRRnzpzh/ewqKyuh0+mSMnHZUWJwcBC//PLLtjX4LK/+2rVr+PDDD1FZWYn09HT4fD4sLi7i3r17+OWXX/DixYsde+YTQS6XQ6/Xx1hddJ7fni0/wQaDARcuXMD58+df1/28FbDdjYV+mINoN7s7C4NZLBY8e/YMDx8+xJMnTzA8PLwhBVUikUAmk/HmnGKBM1Neq9WivLwchw8fxpUrV3D27FmYTKYdLUrhcBgTExO4f/8+nj9/vuG5xGi1Whw7dgxffPEFLl26hIqKCqhUKt5eu6enB21tbRgaGoob2ttL2E7P8iWoq1NibLvTE7uHtYMym83o6enBH3/8gd9++40n1KzfvVnYLN51gFfn17Nnz+KLL75Ac3MziouLkZGRsSPBRyIRrK2toaurC/fv3+cDKuIJSK1W4/jx4/juu+/48AulUoloNAqv14uXL1+ivb0dg4ODMfe/X9Yhm23HRlnTWT4xKGS3z0QiEd4k4rfffsMff/yBFy9exHiwkxFFZmYmPv30U3z11Vc4efIkcnJydpXq63Q68fTpU9y7dw/Pnz+PO3ASeBW9OHXqFL755ht8+OGHPBoAvHLwms1m9PX1obe3N+4Ajf2AWWL5+fkoKiraNM+fiIUGWG7Dbj5EbCjD0NAQbty4gd9//x1DQ0P891u1sVrfWkuv16Oqqgpnz57FtWvXcPz4cWRlZe343oBX5amseObRo0ebVqsplUocO3YMn3/+OT766COYTCZuUrPutAMDA7h3796mXWz3g3A4jEgkgsLCQpSVlUGr1dJunwA0wHKfYCmnIyMjuHnzJn766acNXV63ioSIz/L5+flobm7GtWvX0NzczD/gu7k3u93Oy2Nv3ry5af67VCpFTU0NP8Mzk57dIyucYT6K/QjLbYZKpUJ6ejqysrKQlZWVUE8/gsz7fYEljbA59Hfv3sXLly+3tZjizbmrra3FV199hY8++gg1NTXIysracatnNvhxbW0Nvb29+PHHH3Hjxo1NBS+RSFBTU4OrV6/i4sWLKC8v551sI5EI/H4/Xr58iTt37qC9vX3D5Jz9xGAwoLy8HCaTibfUJhKDRL8PsKmrL1++xMjICF6+fMnj/nK5HJFIZMs5dwqFArW1taitrUVLSwvOnj2L2tpaaDSahLrhxCuNDQaDsFqteP78OTo6OvDo0SM8e/aMC369t16pVOLAgQO4fPkyPvroI1RUVPDFJhQK8em9t2/fxs8//xzTPed1YDAYUFtbi4aGBuTn51MWXhKQ6PcJNvvO7XYjEAhwsTKTfr14dTodr8Gvra3FxYsXcebMGVRWVkKv13OTeruj1vpiHbfbjcXFRT5pt6enBw8fPuTz5tYX6KSlpcFoNKKiogJnz57FxYsXeeJNJBKB1+vF8vIyXrx4gQcPHuDOnTsx4bnXhVKpREFBAaqrq5Gbm0tJOUlAot8HJBIJVCoVsrKyeEstt9sdVxgKhQJlZWU4fvw4mpqaYDKZeBNNlhCUrOnq8/ngcrlgt9uxsLCAp0+f4o8//sDw8DBsNlvMEFLx4qPRaFBeXo7GxkacOHEChw8fRmlpKVQqFfx+P6xWKxYWFtDT04Pbt2/j6dOnWF5efiOOXrlcDo1Gg8zMTHLgJQmJfh+QSqVIT09HWVkZLly4AI1Gg8nJSbjdbshkMmRkZPBMsoyMDOTm5qKyshJVVVU8zVcmk8VtahFvpxcEgU9zDYVCXOjt7e2YmpqC2WzG7OxsjJNNbM6rVCpUVlbi2LFjaGhoQG1tLUwmE7KysiCXy/kI6v7+fnR2dqKvrw9TU1N7VjiTLBkZGSgvL0dZWRnl2u8AEv0+wHZ65nU3mUwwm81wuVxQKBS8SaZer+cttZRKJc/8EyMWuljwLFuPhQWnp6cxNTWFlZUVzM7Ooq+vD48fP44RujgMKC7Sqa+vR0tLC06fPo0DBw7AaDQiLS0N0WgUDocDExMTePToEdra2tDT0/Pa4vDxkEqlyMvLQ319Paqrq6FWq7esHCQ2QqLfJ2QyGR88qdPpYDKZEA6HIZVKoVAouNi3a928/nfBYBButxtWqxVutxsulwvz8/Po6upCW1sbJiYmNm1Msb5Srry8nDvqDh8+jJycHGg0GqSlpfG2VvPz83jw4AGuX7+OFy9e7KrSUiKR8MWNdcMV+zsSQaFQIC8vDyaTCQUFBXvSQjzVINHvIyxvX6FQxPRzY1/xEAuA/Y0gCLzWfm1tDWNjY3j8+DEGBwdhNpvhdrthsViwsrKyIX1W/Fxic/7YsWO4cuUKzp8/z2feixtQsEzC7u5u3Lx5E2NjY7sSvE6nw8GDB3Hw4EHo9Xqsra1heHgYExMTcLlcCV9HJpNBo9EgIyODZtftEBL9ayCeyNfvbvFMeFb043Q6MTMzg6GhIYyMjPC5b/FGOrPnEocBxY0viouLcezYMVy+fBkffPABKioq+FBJsSff7XZjamoKjx8/xrNnz3acdMOes6mpCefOncORI0eg0+mwuLiInJwchEIhjI+PJ7ygsGIk4M8jDpEcJPo3xFYmKTursx18fHwcnZ2duH379rYCXG/CM9LS0lBTU4NLly7ho48+Qn19PXJycjaYx+zMbzab0dnZif7+/l2Vx5aWluLSpUv44osvcPjwYWRmZkImk6GgoACRSARLS0tYXFxMSvTAqxbgHo8HOp1u3zoPv6/Qu/WaWJ+As74LDdvVWR2/0+nE9PQ0Hj9+jAcPHvBWU+JwGyNeNxzx9ZlD8eLFizhx4gQqKyt5Y8z1sCaWMzMzaGtrw/T09I5fs8FgQEtLC7788kscP34cOTk5XKByuRwVFRU4ePAgHj9+nHA2n3iO3srKCs9hIA9+4pDo9xlmLosFzQpFIpEIF7u4iaTZbMb09DRGR0fR19cX04yCTckRF8fEW0jkcjmKi4tRXl6Oo0eP4ty5czh69CgKCgp4Q5R4hEIhzM3Noa+vD8PDw/D7/Tuqh1epVKivr8f58+dx7Ngx5OTkxCwyMpkMer0e+fn5SdURMHGvra3xWXYGgyGpe0t1SPT7iCAIPN/d4XDAYrFgbW0NTqcTXq+Xiz8cDvPOrsvLy5iamsLExAQWFhbgdrvj9qSPh1wuh1Kp5HHsM2fOoLm5GbW1tcjLy4NWq92yDJcV4vT396Ojo4OH5nZybs7IyEBTUxPq6+vjWhXie0hml2Zddu12O9bW1uB2uxEKhcihlwQk+n2A7e6hUAhutxtLS0sYGxvDwMAARkdHeUfYQCDARc/O8cxL7/f7t2ybtZ7s7GxUVVXhyJEjqKqqgslkgslkQlFREYxG45ZiZ9aCy+XC2NgY2tradl0xp9FoUFhYyBN8xMcP9lpdLhfW1taSep5wOAyHw8EzDldWVvhUXBJ+YpDo9xAmHrbDO51OzM3N8Z3z2bNnmJubg91uj3s23w6VSsWz+YxGIx95rdfrkZeXh4qKCtTW1qK0tBRGoxEqlSqmzddmk3PEs+VaW1vR1dW16wQcNt3W6XQiGAzGTP5hCUVTU1MYGRlJqnEmG/qRnZ2N1dVVzM7OIicnh4/9JraHRL8HiM/U7Pzu9/ths9kwPj6Ox48fo6OjA7OzsxuSUTbbfWUyGZRKJbRaLXQ6HQwGA7KyspCbm4uioiKUlZWhqKgIOTk50Ol0UKvVUKvVvDtsvPFa6x19giAgEAjwrLv29nbcvHkTU1NTu35PXC4Xnj17htzcXESjUeTl5UGlUvHWYZOTk3j06BH6+/uTmsPHpu/YbDY+BMThcKREl+a9gkS/S9Y70pjoxWd0s9kMp9MZd+RSvHi9OIvv8OHDqKurQ3FxMYxGIzIyMvgX293EmX3bhQKZ09Dn88Hj8WBtbY2n2ba3t2NsbCxm1sFOcbvd6OnpQSAQwOLiImpqapCZmYlwOIyFhQUMDAygu7sb09PTSR8jfD4f/H4/AoEAfD4fQqEQxeuTgES/T6xv2sgGXm41Ox74M820rq4Op0+fRmNjIyoqKnhMXS6X82KcrVo+szO0+LgRCAR47P/ly5eYnJzExMQEJicnMTk5ifn5+T1rWR0MBmE2m+HxeDAzM8NNcLbTLy0tYXV1dccLTLzhG0RikOj3GKlUyk1zNrO+pqYGi4uL8Hq9cLlccUXP8tKzsrLQ0NCAS5cu8WKdjIwMvpsnCkuyYQ4zVmnHvqanpzE2Noa5uTnYbLZ9MY8FQYDdbofdbseLFy/29NqUb79zSPR7wPqMNuDPMUsVFRXwer3weDwQBAETExPweDwxJqlMJoNMJoPBYEB1dTVOnz6NkydPory8HHq9PumhjMyM93g8sFgsmJycRG9vL7q6uvD8+XOsrq7C5/MhHA6/s2dhNkePTRCmRSBxSPS7ZP1QRwDc7E5PT+fz66PRKGQyGVQqFZ8pz0JyMpkMarUaeXl5qKmpQU1NDQoKCqDRaPjunmj5KPMp2O12flZ/9OgRXrx4gfn5+X0bMfW6iUQiUKvVKC4u5sVCRGKQ6PeAeGJkZ/r09HTk5+dDIpHwqju1Wo2XL1/Cbrfzctv09HRkZmbCaDTGiH2r51iPIAjw+/1YXl7G4OAg2tra0N7ejqGhoZizerwGnO8a4XAYWq2WzxdkDTuJ7SHR7wPiHV8ul0OtViM7OxvV1dU8C08qlWJ+fh4ulwvRaJTXmDNHm9VqhUqlgkQigUKh2NJpJ04EMpvN6O7uxq1bt9De3o7FxcUNPoR3WezAq+IhrVaLnJwc5OfnJz27L9Uh0e8zrBRUpVLBYDCgoKAApaWlsFgsPHGFhZ+sVismJiZ4Ewufz4eCggJkZGTw2LtY/OLwoMPh4LHvtrY2PHv2DMvLy2/41e8P2dnZOH78OBoaGqDX60nwSUKifw2w+Lm4aw5zzoVCIZ6O6/f74Xa7YbPZYDabMT4+jvLychQVFfHR0yxsx3LQWS7A5OQk+vv70dXVhZGRkaQaU7xLGAwGnD17lnf70Wq11C4rSUj0e8z62DELm4VCIV4D7nK54HK54Ha74fV64fV6uTef5aPPzMxgYGCAZ9+VlpZyU5YdBXw+HywWC6ampnhTjZWVlV11uHmbUSgUOHr0KL744gucOnUKubm5VEu/A+gd2yNYssj67DxxBZ3VasXy8jKWlpZ4tR0rrGHVcyyJhpXZLi4uYmRkBDqdjreIUiqVkEgkPNnGZrPxijMWEdiv8dCvG/HrOH78OL755hs0NzejoKCABL9D6F3bA9a3pmJtnFjKKzPbHQ4H1tbWYLFYYLPZ4Ha74fP5Nt2Z2WPFxS8KhQJpaWn8A88WCnEPvs2657yLMCdnQ0MD/vrXv+LKlSsoKSkhwe8Ceud2iXiHj/clrn9nZ3qNRgOtVgutVotQKMRTc9dPjRU30WQhQJbIw8Qv7hfHusuyRh1i6+F1w9KExa+DvbZIJLJlKrIYjUaDxsZGfPfdd7hy5QrKy8spJr9LSPS7RLyzs/9nMKGyarns7GxeUsvqza1WKzweDwKBADfz2TWYcJjXnolcLpfz3Z4Ji4XtWJYdszJcLhdWV1dhsVgSFtpuYOFJo9HI21iJHZks0rCysrJldZ1EIkFeXh5aWlrw+eef4+zZsygtLSXB7wGSbczA98NG3CfEgo9XPSfe6ZmX3u12w26389JQl8sFr9eLQCCAQCDABQv8mccvFjvb6cUTcFhTCnaMcLlc8Hg88Pv9cLlcsFgssFgsvFsPqwHYC4efTqdDeno6gFeCr6ysRG1tLYqKivggCr/fD6fTCZfLBafTyZtf2O12XmrMjiWsqUhWVhZOnDiBq1ev0hl+58QNaZDod8lWbZjjnfXX98oLhUIIBoN8JNV60Yu/xJV64hAVu6bX6+VOPbvdDo/HA6fTibW1NV5zHgwGYbPZMD8/j9XV1Q2iY6+JfYmfH0CMOPV6PcrLy1FeXs4djQcPHkRtbS3y8/OhUCh4p5vFxUUsLy/DarXC4XDAarVuKDdm1kxaWhqKiorQ3NyMhoYG8tLvHBL9frJVN9p4f7veEhB/rT8ibPYlvp64Tt7r9fIhlqy6bnV1lT+n2+3G6upqTP4/AN5Uw+Px8N5zbFCkVquFSqXi/odgMMjHRR89ehQmkwl6vR46nQ56vR7p6emQyWQ8/4CFKO12O5aXlzE7O4u1tTUeqmS1CsXFxSgpKUFeXh5ycnJ4qy9iR5Do32bi+QQYm+X2x3usuMMui+MzU9rpdMJisWBpaYlP0RUEIWbQRTAYhNfrhcPhgN/vh0wm44M25XI5901kZmbCYDAgLy8PZWVlyM/PjxmaIW52ySwctgBYrVYsLS3xnZ7Bio4KCwuh0+li/AHEjiDRpxrsPM28+haLBTMzM5ibm0MwGNxwRGBHDRYBYOY2awQikUiQkZHBm27q9XpIpVL++0S72m7W8UYqlUKtVkOlUlFq7d5Aok91WMLP+h2WTdNhzrZIJAKVSsXbczHBR6NRKBQKGAwGPnGXeKsh0ROIGbIBIOYowNKCBUGAWq1GRkYGn7wrnqLDogfEWw+JntgcFvZj3nQWLSCv+TsNiZ4gUoy4oqepfwSRYpDoCSLFINETRIpBoieIFINETxApBomeIFIMEj1BpBgkeoJIMUj0BJFikOgJIsUg0RNEikGiJ4gUg0RPECkGiZ4gUgwSPUGkGCR6gkgxSPQEkWKQ6AkixSDRE0SKQaIniBSDRE8QKQaJniBSDBI9QaQYJHqCSDFI9ASRYpDoCSLFINETRIpBoieIFINETxApBomeIFIMEj1BpBgkeoJIMUj0BJFikOgJIsUg0RNEikGiJ4gUg0RPECkGiZ4gUgwSPUGkGCR6gkgxSPQEkWKQ6AkixSDRE0SKQaIniBSDRE8QKQaJniBSDBI9QaQYJHqCSDFI9ASRYpDoCSLFINETRIpBoieIFINETxApBomeIFIM+Ta/l7yWuyAI4rVBOz1BpBgkeoJIMUj0BJFikOgJIsUg0RNEikGiJ4gU4/8HjFXxTv8jiJkAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 68\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 69\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 70\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 71\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 72\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "algorithm = nlopt.LD_MMA\n", - "n = Nx * Ny # number of parameters\n", + "n = Nx * Ny # number of parameters\n", "\n", "# Initial guess\n", "x = np.ones((n,)) * 0.5\n", - "x[Si_mask.flatten()] = 1 # set the edges of waveguides to silicon\n", - "x[SiO2_mask.flatten()] = 0 # set the other edges to SiO2\n", + "x[Si_mask.flatten()] = 1 # set the edges of waveguides to silicon\n", + "x[SiO2_mask.flatten()] = 0 # set the other edges to SiO2\n", "\n", "# lower and upper bounds\n", - "lb = np.zeros((Nx*Ny,))\n", + "lb = np.zeros((Nx * Ny,))\n", "lb[Si_mask.flatten()] = 1\n", - "ub = np.ones((Nx*Ny,))\n", + "ub = np.ones((Nx * Ny,))\n", "ub[SiO2_mask.flatten()] = 0\n", "\n", "cur_beta = 4\n", @@ -2017,10 +449,10 @@ " solver = nlopt.opt(algorithm, n)\n", " solver.set_lower_bounds(lb)\n", " solver.set_upper_bounds(ub)\n", - " solver.set_max_objective(lambda a,g: f(a,g,cur_beta))\n", + " solver.set_max_objective(lambda a, g: f(a, g, cur_beta))\n", " solver.set_maxeval(update_factor)\n", " x[:] = solver.optimize(x)\n", - " cur_beta = cur_beta*beta_scale" + " cur_beta = cur_beta * beta_scale" ] }, { @@ -2032,28 +464,15 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plt.figure()\n", - "plt.plot(10*np.log10(evaluation_history),'o-')\n", + "plt.plot(10 * np.log10(evaluation_history), \"o-\")\n", "plt.grid(True)\n", - "plt.xlabel('Iteration')\n", - "plt.ylabel('Average Insertion Loss (dB)')\n", + "plt.xlabel(\"Iteration\")\n", + "plt.ylabel(\"Average Insertion Loss (dB)\")\n", "plt.show()" ] }, @@ -2066,30 +485,23 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO2dV1eb17rv/+oFVCgSCDCmGjAxxXbAxjXuLXFWYq9kZO2RfXXGuTs35+p8g3N7vsAea+2dtneSlezYsWMwjo1xxxRjQ8DYphcJhIQKkl6Vc+ExZ16BQBLGVc9vjDVWrDLfV0L/OZ/5zKdIIpEICIJIHaSv+wYIgni1kOgJIsUg0RNEikGiJ4gUg0RPECmGPM7z5Np/i4hEIpiamkJrayvu3LkDuVwOhUKBUCi0pvEkEgm8Xi/y8vJw4sQJVFdXQ61Wr/NdEy8RSawH44meeAuIRCKQSCSQSCQIh8MYHBzEhQsXoFKpoFar1yR6Nt78/Dw2b96MPXv2QColw/BdgET/jhGJRDA6Oopnz56t25iCIMDr9UIiiblwEG8ZNHW/g8jlf87l6yFUlUpFgn+HING/g4jNcPEEkOwY7L1yuZxE/w5B5v07zlqdeOFwGCxEe61jEG8mtNK/g4TD4dd9C8QbDIn+HYS87MRq0K+DIFIMEj1BpBgkeoJIMUj0BJFikOgJIsUg0RNEikGiJ4gUg0RPECkGiZ4gUgwSPUGkGCT6dxCKvSdWg0T/DkKx98Rq0K+DINaR/+6ewIn/dx3/4987YPcEXvftxITy6QlinbC5/Pjf/9WDYDiCvqkFZKX9gf/7ac3rvq1l0EpPEOuETwghGP6zgLTLF3yNd7MyJHqCWCc2ZGrxP/eVQCIBcvVq/K+D5a/7lmJC5j1BrCP/53gV/vfhCijlb+56+ubeGUG8pbzJggdI9ASRcpDoCSLFINETRIpBoieIFINETxApBomeIFIMEj1BpBgkeoJIMUj0BJFikOgJIsUg0RNEikGiJ4gUg0RPECkGiZ4gUgwSPUGkGCR6gkgxSPQEkWKQ6AkixSDRE0SKQaIniBSDRE8QKQaJniBSDBI9QaQYJPp3kJfRqjoSicR/EfFWQKIn4iKRSCCRSF73bRDrBImeIFIMEv07hlwuh1y+Pi0K2eoeDAYhCAKZ+O8IJPp3CL/fj/Hxcdjt9nUZj/kG0tLSIJFIXoqvgHj1kOjfAdiKPDs7izt37uDJkyf8uRddnY1GI2pra2E0Gmlf/45Aon9HCAaDsNvtePbsGebn5/njLyJ6jUaDnTt34siRIygoKIBMJluPWyVeM9Sf/h1BKpVCEATMzs7C6XSueRyVSgWNRgO1Wo3c3Fzs2LEDjY2NMJvN6+YrIF4v9Fd8RwgGg1hYWMD4+PiaRa9Wq1FQUIANGzbAaDRCp9OhpKQEZrMZWq12ne+YeF2Q6N8BwuEwRkdHce/ePTx+/Dhph5vRaER2djZMJhMsFgvy8/ORlpaGSCQCjUbzku6aeF2Q6N9S2F49EAhgamoKzc3N+Oc//4mJiYmkxzKZTNi8eTPy8vKg0+mg1Wr5dsHv98PhcECn00GlUq33xyBeAyT6t5RQKASfz4eZmRl0dHTgwoULuH37NoDn3vxkHHg6nQ65ubmwWCx87GAwCACw2+0YHx+HXq9HdnY2pFLy/b7t0F/wLYV56wcGBpYd0yWLVCqFVCqNOpKTSCSQyWSYm5vjJwKhUGg9bv2FiUQiFCj0ApDo31KYQP1+P+bn5+H1evlzyQqCrezBYJD7A9gk4PV6Ybfbsbi4+EaIngmehL92yLx/S5HL5dDr9TCZTNDr9S9kdkciES5oFnkXCoUgkUigVquh0+mWHdctFd2rTMph115qnRCJQaJ/S5HJZEhPT0dOTg5yc3Oh1+vXPJZYwExEkUgECoUCOTk5KC8vR2ZmJqRSKZ8Q/H4/fD4fBEGARCKBUqmERqOBSqVKeAJaes1E30PhwC8Gif4tRi6Xw2g0YtOmTbBYLHjw4AGA5Bx5bO8uk8kQDAYRCASg0+lgsVhgNpuRm5uL3NxcZGRkQC6XIxwOw+PxwGq1Ynp6Gk6nE8FgEEajEQUFBcjJyUFaWlrcVTiWpZAIYtFLJBJyLK4BEv1bTlpaGoqLi5Gbm8sfS0b0zLSXyWQwGAzQaDTIzc1FWVkZ8vLykJ6eDoVCAYVCAeD5/t/r9WJ4eBgDAwOYmZmBy+WCWq3Gxo0bUVNTwy0D9p6lhMNhCILAtxQKhQIymSwhAbP7ZeY9kTwk+rccuVyOtLQ0qNXqNb2frbB6vR5VVVUoLCxERkYGDAYD0tPTlwlLIpHA7/djbGwMjx49wvT0NObm5uByuZCeno6hoSEcPnwY27ZtQ2ZmZpQvIBKJQBAEuN1u2O12eDweKBQKZGZmwmg0QqVSxbUOQqEQAoEAt1BWmliIlSHRv+X4fD7YbLY1h95mZWWhpqYGjY2N2LJlC8xmM5RK5YrmeSQSgc/nw9jYGHp6ejA+Pg6XywW/3w8AGB0dhdvthkKhQF1dHTIyMiCVSrng7XY7BgcH0d3djcnJSRgMBtTX1+O9996DyWRacfIKh8MIh8MIBALw+XyQSqUk+DVCon+LCYfDsNvt6OjowODgIH88UdNer9fj/fffx+HDh9HQ0IDc3NxVhRQOh+F2uzEzM4OnT59iaGgIs7OzUa8ZGxvD5cuXkZmZya0HtVqNQCCA6elpdHd34+rVq7h//z5mZmag1+sxPDwMt9uNHTt2ICcnB0qlMmpMtsILggCPx4OFhQWeGEQkD4n+LSYSiWBubg43btxAX19f1OOJkJubi+PHj6OpqQl5eXlxU2eDwSCmp6fR1dWF/v5+zM3NxXzd+Pg4rl27hqqqKpjNZuj1eszPz+Pu3bs4d+4crly5AqvVyvflk5OT8Hq90Gg02Lp1K0wmU9TkEw6H4ff74XQ6MTs7C5fLxbcERPKQ6N9iIpEIvF4vnj59Cp/Pl9B7xE6+zMxMbNmyBfn5+QnlykciETx58gSXLl3CwMDAipOLIAiYmprCxMQEbDYbfD4fhoaG0NLSgra2NszMzPDXhsNhWK1WXL9+nR/5bd26FXq9nt+T3++H3W7HyMgIJiYmEA6HoVQqKThnjZDo31LC4TBsNhuePHmSVHksJhSz2Yz3338fBQUFCSXShEIhHvZ77949uFyuuPfHTHKn04nh4WH09fXxhCBxPADw3BfQ2trKxV5VVQWdTodwOIzZ2Vn09fWhu7sbNpuNZwMSa4NE/5bi9/vx6NEjNDc3w+FwJPQeFlwDALt378bx48eRlZWV0Bm52+1Gb28v7t+/zycZ8Xhi5HI5LBYLLBYLjEYjPB4P/H5/3FDhsbExtLS0IBKJwO12IycnB6FQCE+fPsXt27fx4MEDCIKAmpoaLC4u8nEoKi85SPRvEewHHgqF4HK50NHRgfPnz8PlciV0Ni+XyxEIBAAAZWVlqK2thcFgiBp7JZxOJ37//Xe0tbXxx1aKjCsoKMCuXbtQXV0Ns9mM+fl5GAyGhHwGg4ODEAQB4+PjyM/PhyAIGB4exuDgIKanp5Geno68vDz4/X4y79cIif4tgolSEAQMDAygu7ubm9ksom41mOArKytRXV3Nj9Pi4ff7MT09jZ6enijzfGlEHft3QUEB9uzZg5KSEhiNRkQiER6pF+v1S6/FtiwGgwHBYBAOhwMulwvBYBASiQSLi4s8OYhW+uQh0b9lBINBjI6O4vLly+jp6Yl6PBHKysrw5ZdfYuvWrVEr70rCCYVCywQfC3EcfXl5OSorK3noblpaGrKyshI+YhMEATabDTabbdn4TOiCIEAQBITDYYrMSxIS/VtEOBzG2NgYmpub8fPPP+OPP/5I6v3l5eU4c+YMPvzwQ2zatGnZeXgsBEHA0NAQLl68iOHhYf54rFVaoVBg9+7d2L9/P8xmMz92UygU0Gq1SQXTrGa6M9H7/X6EQiEq2JkkNEW+JQSDQdhsNrS1teGrr77iyTXxEAuturoax44dQ2lp6aqCXyq4mZkZ3Lt3DwsLCzEtArbSRiIR7Nq1C42NjdDpdPy1MpkMcrl83SLoWFTg4uIidd5ZAyT6twSPx4Pu7m5cvHgRd+7cAYCEVjhBEAA8r3RbW1uLiooKfkSXiFgEQYDL5eKRd6s547KyslBeXo6CgoKYk4r4vS8i1GAwCI/HA4/Hk/C2hvgTEv0bTiQSgd/vx9TUFK5cuYKbN2/y5xL9wavVanz66afYvXs3dDodX5lX2sezx1nRzcnJSf5cLI99OByGXq/Hjh07UFBQsGxFX88UWHE4rtfrRTAYpJU+SWgz9AbDPNM2mw3t7e24du0axsbGkhrDbDbj4MGD+Jd/+Rds3bo1qWw8l8uFu3fv4vbt2zwNVix6sQe+sLAQR48eRXFxcUxrgAXrxHpvMrBJ0Ov1wufzUUGNNUCif8Ox2Wy4desW/vnPf+Lhw4cJvUccNFNdXY3PP/8cTU1NSVfXcbvduH//Pm7dusW3CSuRl5eH+vp65ObmctGzSYtlyMUbI1EEQYiq50ckB4n+DSUSicDpdOLmzZv47rvvcOXKFZ6+Gg+x6IuKilBbW8sFH+9cW/y8IAiYnJzksQBLI/DYSq1Wq1FYWIisrKwoS4KN4/F4MDs7C4/HE/e+2YQRz2xnjkE6rkseEv0bBhOdw+FAe3s7/v3f/x2XLl1KWPDAc8EolUrU1NRg165dyMjI4M/FC2Rhz8dbncUTQENDA3bv3h2zs204HMbk5CRu3ryJqampqM8pRqlUQq/XQ6PRIBAIYGFhgYfaLkWpVCItLQ1arRYymYyCc5KERP8GMjs7i5s3b+Krr75CS0sLXyETDbUNBoOQyWQ4efIkmpqaku5ME4lE4HA48PTp06jiHOJrM8FbLBYcPnw4avvAJi4WQ9/f34/m5maMjIyseM2srCxUV1cjJycHdrsdf/zxB8bHx5dNOhKJBCqVCnq9Hnq9ngpprAES/RsCCziZn59He3s7vvnmG1y4cAE+n48LKBHHFxOjwWDAli1bUFJSkrToQ6EQDwJarde9yWTC8ePHsX//fmzcuJEf04lr8o+MjODu3bu4d+8eL3O1dBy1Wo2KigocOXIERUVFGB8fh0wmw+zsbExLQy6XQ6fT8fp9tNInB4n+DYDVfZucnERbWxt+/PFHXLlyJeEceeBPKyAcDiM7OxsfffRR3CCclWBJLhcvXly2OrM9dDgcRlZWFg4dOoSKioqY13G73bhz5w6uXbu26mcpKChAfX09duzYgfz8fFgsFthstqjcAvH15XI51Go11Go1ReOtAfrGXjPhcBhzc3Po6+tDe3s7WltbcefOHb6fXSl9dSls9ZRKpdi7dy/OnDmDwsLChO9D7MCbnp5Gb28vD7tl98A88cDz1XnHjh3YsmVLlM9AnAnISnl1dnYuu082SUkkEpSVlaGurg7FxcXIyMiAQqFAaWkpMjMzMT4+vuxeJRIJOfJeABL9ayQYDGJiYgJ37tzBxYsXcfXq1aj4dmDl9NVYSKVSbN++HUeOHMHWrVuRmZmZ8HuZ4Fn5revXr0cluQDRE8uJEyfwySefIC8vL2q1ZWJ2Op0YGhrCwMAAd0LGMu1lMhmKi4tRVlYGvV4PlUqF9PR0ZGVlISMjAyqVKqYTk3n6ybRPHhL9a4AVehweHsZvv/2Gb775Bl1dXUl56GORk5PDa96lp6cn/X6Hw4EbN27g+++/x++//x5zP61Wq3H8+HF8+eWX2LVrF69TJ7YUmE+gtbUVT58+5e+NlYork8lgMplgNpuhUql44w21Ws2TdJZ+L6yFFgl+bZDo1wjbP7Mfe6I15oLBIFwuF4aGhtDc3IyffvopyvxdS6SaXC5HWVkZDh48iAMHDqCoqCihva5YqMyB+Pe//x2tra1c8GIzXCaToaGhAZ9//jl27969oiURCoUwMTGBtrY2jI6OrnhtAFCpVNwpx+5Z7LhcqWkmCX7tkOjXCGvvtLi4yFNHVwtxDYVCmJ2dxfDwMPr7+3H37l1cuXIFAwMDAP48aktW8CqVClu2bMGpU6dw7NgxlJWVQaPRJDQJMeE4nU7cuHEDX331FX799VcEAoGYgTgVFRU4ceIEduzYgaysrJhjMVwuF1/lY/kl2OfMysqCwWDgtfaB59+Vz+eD0+lccZUn1g6JPgmWRqvNzMxgYmICKpUKJpOJR6SxYyS/3w+32w2fzwev14sHDx7g/PnzvK6deBVbS7aYRqPBjh078Mknn2Dfvn3YuHFjzK40q8Gi/r766iv88ssvvLoOE6m4Ik91dTX27NmzTPBLEe/9V0On02Hz5s1R9fZZ2yy73Y65uTkKtX0JJCT6VM5iEq8q4j3r1NQUurq60Nvbi0gkguzsbBQUFKCoqAi5ubmQSqWYmJhAZ2cnHj16xCeIgYGBqAYRa008kUqlqKurw5kzZ3Do0CF+Th5vFVxq0rMV/tKlS/xYTbwyM8FXVVVh//79KC8vX9WiYWW5PR5P3HsxGo3Yvn07CgsL+ZGf3+/H+Pg4BgcHMT8/D2Dt3xERm4RET+bUn2IRBAEjIyNobW3F1atXMTQ0hEAgAI1GA7PZzBs/SiQSjI+P4/bt28ucdKzNU6IBN7Gorq7GiRMncPDgQS6aRP5OYsFfv34d33zzDX799Ve43e6os34xrMTWvn37YDQaV906+P1+3tySfeaVPmNBQQFqa2thsVggl8t5wc9Hjx7xoh3E+kPmfRxYEQm2ctlsNly9ehXfffcdd8CJTWH2P+DPoJulInpRkzUnJweHDx/G0aNHkZeXl3TzSofDgevXr+Pvf/87zp8/z512scRZVlaGM2fO4OTJkygvL48b9urxeNDZ2Ym2traoMtVLyc/PR0NDAz+qk0ql8Hg8vIOOeKJc+n42MVFhzLWxqui9Xi//YlMJcRvkx48f4+HDh5iensb8/DyGh4fR3d2Nx48fL9uHx0tQWcvKrlAo+JgKhQLvvfceDh06hBMnTqCsrCyqwmwi2O12tLe349/+7d9w6dKlZV564E+nIgCUlJTg8OHDKC0tXVHwYuEtLi6ir68PnZ2dK34XGo0Ge/fuxaFDh2CxWKBUKhEOhzE/P4+enh709vbGreXvcrkwPz8PlUq15o69qcqqonc4HLh//z76+/u5dzUVJgAm+kgkgqGhITx69Ahzc3O8QisTxFKvNPvhi7u3LA1wSQSxAJlwjEYjGhsbcezYMXzwwQdJO+2CwSDm5ubQ3t6Or7/+mu/hl3aaYa8Fnp/J19XVoaKiggsr3soqkUjgcrm4Q1A8gbAxGxoacPToUd6+SiqV8jLbN2/eXLXgJ/u8MzMzGBsbQ3p6epTnn4hP3JX+22+/xbfffgvg+fHQehVCeFtYbXVe6RjqRSfGpe/X6/U4e/Ys/vKXv/AGFRqNJuGa9QsLC5iensa9e/fw008/4cKFC8ui7JaSlpaGv/zlLzh48CAMBkPcEltsrFAotOIEJ5VKUVtbi88++ww7d+5EVlYWd+AFg0HMzMygs7MT09PTK16DtdC2Wq2YmJjAhg0bYDQaSfRJsKroI5FIVOGDF40YI1ZnqZe6sbERdXV1qKqqwrZt23iDikQJBoOYmppCe3s7mpub0dXVhZGRES7KWF5xtjKHw2E0NTWhvr4+7haCjeNwODAwMACr1Rr1HKOurg6ffvopt1SY4Fl1W4fDwU824nnsBUGgarhrZFXRSySSqD+4SqVaMULqXYX5NF7mD0scmGMymZCRkYHi4mKcOnUK+/fvR1FRERQKRVK544FAABMTE2hubsYPP/yA9vZ2fiS3WqouM8VZ5dxEe90BwNTUFC5evBjVhINZhpWVlfj4449x/PhxFBUVRaX7BoNB2O12TE9Px80sDIVCcLvd8Hg8cLvdmJ+fR3Z2dswCHkRs4nrvxaYa6yhCrC/iPfSxY8dw8uRJbN68GdnZ2cjIyEjaUSVu//z111/j+vXrUc/HErt4Za2pqcHnn3+OoqKihK8pCAJvQDk2NhY13oYNG3iTjfLy8mX5/WyCevz4MRf9SpMsO8c3Go2YmZnB8PAwMjIyoNVqk64bkKrQkd1rYqn5qtFo8Omnn+Jvf/sbGhsbYTAY1rxysWSen376Cffu3VvxmmLEkXd5eXnYs2cP8vPzuUNztXth+/EnT55w81zc1+7MmTM4ffo0Kisro2rui6MbR0dH8ejRo6jOtrFgdQfMZjNmZmYwMjKCjRs3Ii8vj0SfICT6V4y4CAXwvHR0Tk4OGhsbcerUKezYsYN3kmUkchYtfo3VasX9+/dx584d+Hw+fsqw2haFCd5oNKKuri6qb328awuCgEePHuHq1atRPqDs7GycPHkSZ8+eRXV19YoWSzAYxPT0NJ48ecK9/qvh9/uxuLgIv98Pj8cDu90Op9OZsHMz1SHRv2LE26OysjLu2CovL0dWVhZ0Ot2y9yQTaWe323Hjxg20tLTwPvLxtmTMAlAoFPjoo49w8ODBuM0mxZOM0+nEvXv30NrayivdaDQaHD58mJ84rDZeOByG2+3m95to2K1cLodUKsX09DQyMzORlpYGvV5Pe/s4kOhfAbHOwt977z188cUXOHnyJEpKSqDVal94lXI4HGhra8PXX3+N5ubmhI9X5XI5BEFAKBRCfX096urq4ubjs8+0sLCArq4udHR0cNECQGZmJvbu3Yu6ujpotdpVx4pEIggEAnyVT0T0rJfd4uIiRkZGoNFokJ+fH9VDj4gNif4VwH7AFosFZWVlsFgs2LNnD/bv34+qqqqE0mBXGle8wrPQ2paWlpiRdishCAIkEgmamppQVVWFjIyMFYUjviZrhvHdd9/x/nrA8y3Cnj17UFtbm1D1nljx/vGw2+2YmpqCwWCAVquF1+ul47sEIdG/ZFgBR6PRiKNHj+LkyZNcWGlpaWsWPPDnasti6f/xj3/gwoULEAQhoX28eEKora3FF198gU2bNiV0Tbfbjc7OTvz44484f/581CpfW1uLjz/+GMXFxQkXrkz2KNhut2NiYgK5ubnQarUUlZcEJPqXSGZmJhobG7F7926Ul5ejtLSUd4JZLxOUNcX4xz/+gXPnznGHXKL7eAC8+eS+fftQUFAQdyJyuVzo7OzE999/j59//jlK8Dk5OWhoaMD7778Pk8kU93OGw+E1tagKh8NwuVxYXFyMG11IREOiTxKpVAqdTseLOLJsL/HzgiBAq9Vi69atOHbsGJqammCxWKBWq3kY6VoRm9fiLjiXL19eMSdADFt5xd76o0eP8ow9FgAkrlor/vf8/Dw6Ojrw7bff4rfffosKmZXL5di5cyd27doFk8mUkBXj9/ths9niJtjEYmnIL+3lE4NEnyRKpRIFBQUoLS2FwWDg3VjF6bWRSARmsxn79u1DQ0MDLBbLst7sa/2BLi2A8fXXX+O3336Dy+XiYo8leLayiyeGjRs3oqmpCZ9++ikaGhqgVqv5vYnvLxQKwel0YnJyEl1dXbh06RJ+/fVXLlQWUZieno4dO3agpqYm7pk5K6c9OzuL7u5uPHv2LOr7SfS7EE9KzGJ4kS1TKkCiTxKVSoW8vDyUlJTAaDRywYuFlpWVhYqKCtTW1kZ1cWW86IrE9vD/8R//gfPnz/MotmRM5KamJpw9exZNTU3YsGEDDAZDzHN0n88Hq9WKhw8forW1FVeuXEFfX1/UeTqbSIqKilBaWgqz2Ry3yUYoFMLc3Bx6e3vR0tKC/v5+/lyyZrpUKo3qf0etrlaHRJ8EarUaFosFZrMZaWlpUc0W2MolCALMZjMqKyuRk5Ozpg4sS0tFi5mbm+Ne+ubm5mXx9AypVAqpVMoFGYlEkJubi4aGBpSWlvJ9d1FREWQyWdSEwfbZPp8Pjx8/RmtrK3799VcMDAxgbm6OjylOmy0oKMD+/fuXtdFaatWEw2EEAgFYrVZ0dHTg4sWLuHXrVlSSTrJIJBIsLi5idnYWZrMZWq2WOt+sAn0zScASYUwmE+Ry+bLosUgkAq1Wi6ysLBiNxjWvOEuFzs6xrVYrbty4gf/8z/9cMR9eXPIqHA5DqVTCZDJBr9fjwIED+PDDD1FTUwODwQCFQsGtEDZ5RSIRuFwuDA8Po6urC3fv3kV7ezt6e3uj7m9peer8/Hzs3r2bh+4u/SyRSITv3wcGBnjf+87OTkxMTKzpewqFQtykFwQBXq8XgUCAHHpxINEngcFggNlshsFg4LHqzDEnCAKUSiWKiopQWFgIrVb7wmZ8OBzGwsIC7HY7Jicn0dnZiV9//RUtLS0r5u6zlVV8FHf27Fls27YNGzZs4J1jVrq3xcVFDA0N4dy5c/j222/x+PHjmNdYem2LxYKSkhJkZGREiZ7V+Z+bm4PVasWjR494fcGZmZkX/n68Xi8vy8WSbsihtzpxRS/+AyoUipRLrRVnwOn1eshkMvj9ft5SSdxaSa1Wo6CgAHl5eauGna7kyGMmNQsy8fl86OvrQ2trK65fv47x8XHY7fZlq/pS095gMOCDDz5AZWUlamtrUV9fj6KiIiiVypjXFj/m8XjQ1taGb775Bo8fP+aviRVVyNi4cSPP9WfWTTAYRCAQgN1uR29vL65du4bOzk4MDw+v2Vu/FFYu2+12Qy6XIysrC+np6eTIiwMV0UiA7OxsHp7KKs8GAgGe1x0KhaBWq2E2m2EymeKGgooFxBpD+v1+TExMoLe3F0+ePIHL5YIgCHj27Blu374d1eNOLHL231KpFDk5OcjMzMTu3btx+vRp1NfX8+q1TIziiWLp/Xi9Xjx58gS3bt3igmc1+paKXRyvv23bNmzfvh1paWl8zz4zM4O+vj50d3fzJpaxOuC+aKo2+w6VSiWvKEQr/eokVURDrVavqSnD24ZE8rzraiQSQU5ODnbv3o2TJ0+irq4OGRkZCAaDmJ2dxbNnzzA6OorFxUWYzWaUlJQgMzMz4TJWs7OzsFqt8Hg8cLlcGBgYQHNzM27durXqShjLvC4pKcHHH3+Mffv2YdOmTXwbEksAsR4Lh8OYmJjA5cuX8fDhQ/74SvH77Nqsqu3mzZuhVCoxOzuL0dFRdHR0oKWlBe3t7bDZbDHHeFHBy2QyaDQaqNVqKJVKnoBDrCTBq/0AABSfSURBVM6qotdqtfjiiy+wdetW7vRJBScJ88QHg0FotVoUFhaisrISFosFGo0GwWAQmZmZyMjIQEFBAQKBAPR6PSwWC98CxIKVxGalnu/evYvLly9jYGCAd8KZm5uLsq5Wuj/x32HLli34/PPPceLECZSWliItLS2pH38oFML8/Dy6u7vx448/Rh2frYbZbMaBAwdQV1cHg8EAp9OJ+/fv49y5c7h+/Tqmp6fhdrsTvo9kkUqlSEtLI299kqz6TRmNRuzfvx/79u17VffzRrDUOy2Xy6FSqbiJLJfLYTQaodVqkZeXh1AoBKlUCqVSuex8mq1mLBClr68PHR0dGBoaQn9/P3p6eng6qhj2I2YWh/i+IpEI306UlZXhww8/xNGjR7Fp06Y1BQGFw2E8efIEv//+O69EG8v0Fk827Ldx8uRJlJaWYmFhAT09Pfjhhx/Q3NzMu9OsNNZ6wLYtbJKmqk6JEXelJ2IjkUigUqmiKsGI9+hsi8DyxKenpzE4OIirV6/i0qVLUeGrq5WhFsOeVygUqK+vx7Fjx7Bnzx5UVFQgOzt7zUFADocDd+/exdWrV1eN3WfX1+l0OHDgAD799FNuBXZ0dOCXX37BpUuX4HA4oiaIly1GhUJBCTdJQDbROsGO7Zj3PRgMcuccKzDx8OFDWK3WZSZvvC2TONBGrVbj1KlTOH36NBobG5GTk5N000oxCwsL6OjowO+//87N+tXScfV6PY4cOYKzZ89i586dUCqVGB4exrVr13D58mXui3gV28BQKASJRAKLxYINGza80PeQSlADywRIZMVkx0czMzOYnJyE1WrF9PQ0hoaGcP/+fXR1dUVVek2k4404lj4cDiMtLQ1Hjx7Fl19+iaamprjdY2MhNvldLhdPnrl27VrUa8SfXWzSf/DBB1zwGRkZGB0dRVtbG65fv46pqall73mZMCcjaxxKBTQSgxpYrhOs5NPIyAgePnyI/v5+PHz4EMPDw5ibm1tW1CIRk5dtFVQqFXQ6HY4cOYLPP/8ce/bsWVZHL1GW5sP/8MMPOHfuHDfJgWjRs//OyMjAoUOHcObMGezatQs6nQ5TU1O4d+8empub8ejRo2XvednI5XLIZDIYjUZkZmbGjfcnnkPm/ToRiUSwuLjIO6+MjIxgaGgoqi01e91qMH8AmxTy8vJw8OBBNDU1oa6ujmf3vQgulwv379/Hf/3Xf+GXX36JMsnZ9cX3WVBQgEOHDuHkyZPYvn07lEolZmZmcOvWLfz888/o6OjgUXGvCqPRyGsTKBQKcuIlAYl+HWFhofPz85idnY3plV8Ki+oTJ8ZEIhFoNBrU1NTg0KFDOHjwIDZv3ozMzMy4R1MrJeuwLYLD4eAmfXNzM6anpyGRSHidPPH7N2zYgM2bN2Pr1q3YuXMnr2j77Nkz3Lx5E83Nzbh9+/a6RNclS3Z2NjZv3oza2lqYTCbayycBiX6dkEqlUKlU0Gq1EAQBDocjocKU4hx3jUYDg8GAjIwMVFdX4/jx49i9ezcKCwsTjimP9RpBEGC1WvHs2TM8ePAA7e3t+O233/ixWiQS4XXyjEYjjzloaGhAU1MTqqurYTQasbi4iK6uLty4cQOtra3o6el55Ss8Qy6Xo6CgYFm5biI+JPp1glXUYSZnsq2w9Ho99u7diwMHDqC8vBxmsxn5+fnIzs5e0w86EolgYWEBCwsLPNHlwoULaG9vh9VqXTYhSaVSbNq0CR988AG2b9+OwsJCmEwmZGdnIy0tDU6nEz09PTh//jyuXLmCiYmJ12pSs9Dn3NxcHmpMJAaJfp1goi8qKkJdXR36+/sxMTGx6mrP2jZv2rQJJSUlqKqqwpYtW2CxWKBSqaJKay0tX7UUQRAQCAQQDAYhl8vh8Xjw8OFDXL58Gffu3cPs7CxGRkaigmaA51F1dXV1qK6uRnl5ObZs2YLS0lJkZmbyPHubzYaOjg58//33uHLlyjI/RSKst0efOe/UajUJPklI9OsIy13ftm0bZmdn4XA40NvbG2UCKxQKZGZmwmAwoKamBidOnEBjYyNyc3OhUCigVquj8vBjla8SWxHhcBgejwcjIyMYHBzE5OQkz9b7448/+Kq8FJ1Oh9LSUuzYsQMHDhzge2N2feY78Hg8GBwcxM8//4zm5ma+f09WxOJJS6lUvlBfRKPRiMrKSpSVlUGlUr1Q+bFUhES/zrCc+iNHjkClUuHixYvo6uqCy+WCTCZDSUkJ9u7di/fffx+VlZXIy8tDVlbWiib80lp1LpcLs7OzcDqdvNPt7OwsOjo6+D7b5XKtKkqj0YgjR47gww8/RF1dHXJzc6HT6WI2lmQ5Ai0tLVEOu7Ws2kajEQUFBcjIyIDD4cDY2FjSTkC2l2ddddPT00nwSUKiX2dkMhnS09NRWlrKV/66ujrY7XYoFAqUlpZi27ZtKC8v5954sec5VhVatnI7HA709/fj6tWruH//PmZnZ6FQKOD3+2G32zEzM8PTn2OJMjc3Fzt37sT27dvx/vvvo7q6Grm5uSt6vr1eLzo7O3Ht2jVezmotcfRGoxG7du1CQ0MDSkpKoFAoYLPZcPv2bVy7dg0TExMJTyJyuRwmkwl5eXnIzMwkB94aING/BCQSCbRaLYqKimAwGFBRUYG5uTnI5XKYzWbk5eVBp9PF3IsuNeNZwE9vby8P+FlaPXbp+8XjspMBi8WCDz/8EKdPn0ZdXR0yMzOjavyx67ExgsEgbDYbbt68iVu3bq05jt5kMmH//v04e/YsGhsbkZ2djXA4DKfTifz8fITDYVy8eDHhFV8mk/F9fLLOUuI5JPqXBNu7Go1GAOA19SQSCXw+HxQKBVQqVVTlHUYoFMLi4iJsNhuGhoZw69YttLS04P79+3GPyMRHgIwNGzbgs88+wyeffIItW7ZAo9GsOuFEIhHMz8/j0aNH6OzsXPM+3mAw4ODBg/jiiy/Q2NgY1fxCo9Fg+/btfMVPVPQscMnpdMJut0Oj0axLabJUgkT/EmHpuW63GxMTE7BarZBIJMjOzobZbIbRaIwp/EAggNHRUdy4cQOXL1/GgwcP4HA4lhXiXK2EFaOqqgqffPIJPv74Y1RXV8ftRgs8n3TGxsZw+fJlDA4ORn2eeLCJQaVS4cCBAzhz5gx27ty5rKuPTCaDyWRCUVFR3GaZYphlMjMzg/HxcV66mzz4iUOif0mwCraTk5O8ouzIyAhCoRBvqZyWlgaVSsX39WySYME0fX19ePjwYZTZLQ7RXU2ESqUSmzdvxieffIKPPvoIlZWVCe9//X4/RkdH0d7eziP2El3h2etycnJw4MAB7Ny5E9nZ2cvul0UBJitYlnHodDphs9ng9/tplU8SEv1LgEW42Ww23L17F+fOnUNbW1tUDv1ax01EfGq1GjU1Nfjss89w7NgxlJaWJiz4YDAIq9WKwcFBXpcvWbNeIpGgqKgIVVVVMJlMy54Ts5bjtmAwCLfbzZtbBINBSrZJAgpYfgmwGPf+/n60tLTgypUrLyz41RA749RqNXbu3Il//dd/xfHjx5MSPPC8BHZPTw9u3rzJ/QfJOu/0ej3MZnPM0GHx5CEIQtLn9T6fDzabDfPz87xdtcPhSLkqzS8CrfTrDGvqMDk5iTt37vCjNSB6lVvqpV/p8dW63Sz1qBcUFKChoQEnTpzAvn37eOXe1VZpcXXcYDCI6elp3Lx5E9evX1/mQ0iUYDDIi30uLi5Cp9PF/GxWqxX9/f1wOp0Jj+3z+TA6Ogqj0cjrFWRmZiI9PZ0qPSUIiX6dYSWgbTYbBgcHoyrBxspTX8pqAo31HCvZVVhYiD179uDEiROor69HVlYWN3njmc/MT2Cz2dDZ2Ym7d+/y9tNrCZ/1eDx49uwZurq6kJubi9LSUh5EI976XL9+Hc3NzZibm0tqfLvdDofDEbXSJ5LcRDyHRL+OiMUhlUqXnYOvNxaLBdXV1airq8OWLVtQWVmJoqIiGI3GhPe4zOFot9vR1dWFixcvYmBgIOr5tTA8PIxz585BEATs3r0bFosFcrmcxx50dnbil19+QWtr65oy9ZgVROf0yUOiX0eYd12pVCInJwf19fUYGhqC1Wp9oYw0tVqNnJwcFBQU8KO+9PR0mEwmFBcXo6KigneeZYk6wJ+NIEKhEK+qu7Rmvt/vx9TUFLq6unD58mW0tbW9UDNJhs/nQ09PD+bn59HW1gaDwcBFz2oHPn36dM2puey7ZklJ5MFPHBL9OsNEn5+fj6amJszNzcHtduOPP/6IqpGXCEqlEpmZmSguLkZdXR3q6upQVlbG011VKhU0Gg00Gk1UNdhgMMgLczocDlitVszMzGBhYQF+v5+312YCZKLv7u5+4f5yYhYXFzEwMBBlOawn7IiTfRYiMUj06ww7f9bpdCgpKcGpU6eg1Wrx3//933jw4EHcRhYMlo23fft27N+/H9u2bUNhYSGMRiM0Gg0/2xcH6Ph8PrhcLjgcDjidTszPz2NsbIyf94+MjPAgH/HKzyyBt3FfTKt88pDoXxJyuZzH3SsUCl4Vp6OjI6F8dFbwsaysDDU1Ndi0aROPlxcHszDHocfjwdTUFB48eICOjg788ccfcDgccLvdmJ+fx9zc3GurcrOSKF9kdQ6Hw0hPT0dhYSH/XojEING/RFjGXXl5eVQb5du3by8rZhGLcDiMxcVFLCwswOVyQa1W87BdtkJ7PB5MTk7i8ePHePDgATo7O9HV1bViXMBKK+PLrILzMkxvr9cLtVqNsrIy5OXlUbZdEpDoXzJSqZS3v2pqaoLL5cLMzAx8Pt+qKy9rktnT0wOFQgGHw4HCwkLo9Xpe/ZVV3+3t7cWNGzfQ3d0Nu92+qoDfFY+3TCbjtfyMRiMVxkwCEv0rQCKR8HpuJSUl2LhxI8bGxuKKfmFhAX19fZiamsLdu3dhNpuRkZEBlUqFQCDAnXTT09Ow2WzL/AWvqunEq8ZoNPLW4QaDgQSfJCT6VwjLdY+VThsLJvyFhQWMjIxAqVRCq9XynvEej2eZ800s9HdJ8OxzsTDj48ePo76+Hunp6VQuK0lI9C8ZZk6z6jZjY2OYmpqC1+tNeqxAIBA3NPZdEroY9rnKy8tx+vRp7N27FwUFBZRSuwZI9C8RFhjj9/ths9nQ29uLzs5OjIyMwOfzJWx+r5Y3v1IM/7uCXC7nRUEqKirw17/+Ffv27SPBvwAk+pcEi4ZjIa5PnjxBR0cHenp6YLPZYraiXm2stTz3LsC+p7KyMvz1r3/F6dOnUVxcHLfTD7Ey9M2tE+J9NDtOCwQCcLvdsFqtGB4exvj4OLxeL1QqVcwosqXFMZbuU1lRSrHjKtZKLz6WC4fDSU0w64U4TFb8b1bOK5nJqrKyEn/7299w+vRpVFVVkeBfEPr2XhBx4gfrF8cE7/V64XA4MD8/D0EQkJWVhYqKCphMJgQCgaiJgoXOCoLA+66z+vMymSwq+g74U+xLtwhMXEwYDocDk5OTPGvuVaDT6WAymWAwGHjij1QqhVwuh9/vh9VqxeTkZFz/hNFoRENDA06dOoWDBw+itLSUBL8OSOLMuO+27bgOMLGLk1uYeBcXF+HxeOB0OnlorNvths/ngyAI/HV+v5+/1ufzIRgMQqVSIS0tDTqdjnvsmfiB2KJnFWXsdjvcbjeCwSCcTicmJyejWlmxgJ/1iNAzGAw8jz0SiSA7OxuVlZWorKyEyWRCJBKBy+XC/Pw8FhcXueUzNTWFhYWFZdYMawKalpaG7du34+TJk9i3bx82bNhAgk+emEcaJPoXRLzSL41lDwaD/L/FE4PY/Pf5fPB4PHC73fB6vfD7/bywpE6ng8FgQHp6OtRqdVS8/VKzXiKRIBAI8EaVU1NTEAQBCwsLmJmZwfz8PN8+OJ1OTExMYHp6Gm63G8Byi4Hd61ITnT0XCASg1+tRVFSE8vJypKenQ6lUIi8vD++99x4qKythMBgQCAQwMzOD0dFRzM3NYWFhAXa7HTabDW63O2pM1gQ0HA4jOzub18rPz88np93aING/KuIVy1hqFbCjODZJsPN8ViZbqVTy3HzxCi8ej1W+YbH2brebm9JPnz7F5OQk9wd4vV7Mzs7Cbrcvy/xjRS68Xi98Ph9kMhm0Wi00Gg0XP3NQqtVqFBYWYvv27aisrERGRga0Wi3vvKtUKnlXHofDwVf68fFxDA0NwW6380KXgiBApVKhqKgIhYWFyMnJgclk4v3qiDVBon8TEa/+7N9iYYtX2kRgjjv2/3a7HdPT07BarVhYWIDNZsPU1BQWFxej6tOxa8lkMp7A43a7eRgxM+HVajXMZjOys7Oh0WiQnp6O4uJibNy4EQaDgd+7eGVm1g4AHjo8Pj6OhYUFPpGx4pb5+fm8NgC7Jwq8WTMk+lQkEAjA7/fzgpJPnjzhpbhZDD+D+RiYxQGAWxtyuRyhUIg3viwuLkZ6ejrC4TDP6090z+3z+eD1eiEIQpR5zzoDrdSMg0gaEn2qs7i4CLvdDqfTuSwpRxAEOJ1OzM3NQRAEpKenIysrC2lpaVGVeFQqFYxGY1IluYjXBomeQFTpLDGCIMDtdsPpdPKGHKx7DGvEAUTnDxBvPCR6YnVY9ZxIJMIdibSffqsh0RNEihFT9JSITBApBomeIFIMEj1BpBgkeoJIMUj0BJFikOgJIsUg0RNEikGiJ4gUg0RPECkGiZ4gUgwSPUGkGCR6gkgxSPQEkWKQ6AkixSDRE0SKQaIniBSDRE8QKQaJniBSDBI9QaQYJHqCSDFI9ASRYpDoCSLFINETRIpBoieIFINETxApBomeIFIMEj1BpBgkeoJIMUj0BJFikOgJIsUg0RNEikGiJ4gUg0RPECkGiZ4gUgwSPUGkGCR6gkgxSPQEkWKQ6AkixSDRE0SKQaIniBSDRE8QKQaJniBSDBI9QaQYJHqCSDFI9ASRYpDoCSLFINETRIpBoieIFINETxApBomeIFIMEj1BpBgkeoJIMUj0BJFikOgJIsWQx3le8krugiCIVwat9ASRYpDoCSLFINETRIpBoieIFINETxApBomeIFKM/w+DFo/4LZ/mLgAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "opt.update_design([mapping(x,eta_i,cur_beta)])\n", + "opt.update_design([mapping(x, eta_i, cur_beta)])\n", "plt.figure()\n", "ax = plt.gca()\n", - "opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n", - "circ = Circle((2,2),minimum_length/2)\n", + "opt.plot2D(\n", + " False,\n", + " ax=ax,\n", + " plot_sources_flag=False,\n", + " plot_monitors_flag=False,\n", + " plot_boundaries_flag=False,\n", + ")\n", + "circ = Circle((2, 2), minimum_length / 2)\n", "ax.add_patch(circ)\n", - "ax.axis('off')\n", + "ax.axis(\"off\")\n", "plt.show()" ] }, @@ -2102,70 +514,37 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Starting forward run...\n" - ] - } - ], + "outputs": [], "source": [ - "f0, dJ_du = opt([mapping(x,eta_i,cur_beta)],need_gradient = False)\n", + "f0, dJ_du = opt([mapping(x, eta_i, cur_beta)], need_gradient=False)\n", "frequencies = opt.frequencies\n", "source_coef, top_coef = opt.get_objective_arguments()\n", "\n", - "top_profile = np.abs(top_coef/source_coef) ** 2" + "top_profile = np.abs(top_coef / source_coef) ** 2" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plt.figure()\n", - "plt.plot(1/frequencies,top_profile*100,'-o')\n", + "plt.plot(1 / frequencies, top_profile * 100, \"-o\")\n", "plt.grid(True)\n", - "plt.xlabel('Wavelength (microns)')\n", - "plt.ylabel('Transmission (%)')\n", - "plt.ylim(98,100)\n", + "plt.xlabel(\"Wavelength (microns)\")\n", + "plt.ylabel(\"Transmission (%)\")\n", + "plt.ylim(98, 100)\n", "plt.show()\n", "\n", "plt.figure()\n", - "plt.plot(1/frequencies,10*np.log10(top_profile),'-o')\n", + "plt.plot(1 / frequencies, 10 * np.log10(top_profile), \"-o\")\n", "plt.grid(True)\n", - "plt.xlabel('Wavelength (microns)')\n", - "plt.ylabel('Insertion Loss (dB)')\n", - "plt.ylim(-0.1,0)\n", + "plt.xlabel(\"Wavelength (microns)\")\n", + "plt.ylabel(\"Insertion Loss (dB)\")\n", + "plt.ylim(-0.1, 0)\n", "plt.show()" ] }, diff --git a/python/examples/adjoint_optimization/.ipynb_checkpoints/04-Splitter-checkpoint.ipynb b/python/examples/adjoint_optimization/.ipynb_checkpoints/04-Splitter-checkpoint.ipynb index f67d5f19a..ddf535c4b 100644 --- a/python/examples/adjoint_optimization/.ipynb_checkpoints/04-Splitter-checkpoint.ipynb +++ b/python/examples/adjoint_optimization/.ipynb_checkpoints/04-Splitter-checkpoint.ipynb @@ -13,17 +13,9 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Using MPI version 3.1, 1 processes\n" - ] - } - ], + "outputs": [], "source": [ "import meep as mp\n", "import meep.adjoint as mpa\n", @@ -33,6 +25,7 @@ "from matplotlib import pyplot as plt\n", "from matplotlib.patches import Circle\n", "import nlopt\n", + "\n", "seed = 240\n", "np.random.seed(seed)\n", "mp.quiet(quietval=True)\n", @@ -49,7 +42,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -63,13 +56,13 @@ "\n", "minimum_length = 0.09\n", "eta_e = 0.55\n", - "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length,eta_e)\n", + "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length, eta_e)\n", "eta_i = 0.5\n", - "eta_d = 1-eta_e\n", - "design_region_resolution = int(5*resolution)\n", + "eta_d = 1 - eta_e\n", + "design_region_resolution = int(5 * resolution)\n", "\n", - "frequencies = 1/np.linspace(1.5,1.6,10)\n", - "#print(1/frequencies)" + "frequencies = 1 / np.linspace(1.5, 1.6, 10)\n", + "# print(1/frequencies)" ] }, { @@ -81,29 +74,33 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "Sx = 2*pml_size + 2*waveguide_length + design_region_width\n", - "Sy = 2*pml_size + design_region_height + 0.5\n", - "cell_size = mp.Vector3(Sx,Sy)\n", + "Sx = 2 * pml_size + 2 * waveguide_length + design_region_width\n", + "Sy = 2 * pml_size + design_region_height + 0.5\n", + "cell_size = mp.Vector3(Sx, Sy)\n", "\n", "pml_layers = [mp.PML(pml_size)]\n", "\n", - "fcen = 1/1.56\n", + "fcen = 1 / 1.56\n", "width = 0.2\n", "fwidth = width * fcen\n", - "source_center = [-Sx/2 + pml_size + waveguide_length/3,0,0]\n", - "source_size = mp.Vector3(0,2,0)\n", - "kpoint = mp.Vector3(1,0,0)\n", - "src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)\n", - "source = [mp.EigenModeSource(src,\n", - " eig_band = 1,\n", - " direction=mp.NO_DIRECTION,\n", - " eig_kpoint=kpoint,\n", - " size = source_size,\n", - " center=source_center)]" + "source_center = [-Sx / 2 + pml_size + waveguide_length / 3, 0, 0]\n", + "source_size = mp.Vector3(0, 2, 0)\n", + "kpoint = mp.Vector3(1, 0, 0)\n", + "src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)\n", + "source = [\n", + " mp.EigenModeSource(\n", + " src,\n", + " eig_band=1,\n", + " direction=mp.NO_DIRECTION,\n", + " eig_kpoint=kpoint,\n", + " size=source_size,\n", + " center=source_center,\n", + " )\n", + "]" ] }, { @@ -115,15 +112,21 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "Nx = int(design_region_resolution*design_region_width)\n", - "Ny = int(design_region_resolution*design_region_height)\n", + "Nx = int(design_region_resolution * design_region_width)\n", + "Ny = int(design_region_resolution * design_region_height)\n", "\n", - "design_variables = mp.MaterialGrid(mp.Vector3(Nx,Ny),SiO2,Si,grid_type='U_MEAN')\n", - "design_region = mpa.DesignRegion(design_variables,volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(design_region_width, design_region_height, 0)))" + "design_variables = mp.MaterialGrid(mp.Vector3(Nx, Ny), SiO2, Si, grid_type=\"U_MEAN\")\n", + "design_region = mpa.DesignRegion(\n", + " design_variables,\n", + " volume=mp.Volume(\n", + " center=mp.Vector3(),\n", + " size=mp.Vector3(design_region_width, design_region_height, 0),\n", + " ),\n", + ")" ] }, { @@ -135,17 +138,23 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "def mapping(x,eta,beta): \n", + "def mapping(x, eta, beta):\n", " # filter\n", - " filtered_field = mpa.conic_filter(x,filter_radius,design_region_width,design_region_height,design_region_resolution)\n", - " \n", + " filtered_field = mpa.conic_filter(\n", + " x,\n", + " filter_radius,\n", + " design_region_width,\n", + " design_region_height,\n", + " design_region_resolution,\n", + " )\n", + "\n", " # projection\n", - " projected_field = mpa.tanh_projection(filtered_field,beta,eta)\n", - " \n", + " projected_field = mpa.tanh_projection(filtered_field, beta, eta)\n", + "\n", " # interpolate to actual materials\n", " return projected_field.flatten()" ] @@ -159,26 +168,32 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Define spatial arrays used to generate bit masks\n", - "x_g = np.linspace(-design_region_width/2,design_region_width/2,Nx)\n", - "y_g = np.linspace(-design_region_height/2,design_region_height/2,Ny)\n", - "X_g, Y_g = np.meshgrid(x_g,y_g,sparse=True,indexing='ij')\n", + "x_g = np.linspace(-design_region_width / 2, design_region_width / 2, Nx)\n", + "y_g = np.linspace(-design_region_height / 2, design_region_height / 2, Ny)\n", + "X_g, Y_g = np.meshgrid(x_g, y_g, sparse=True, indexing=\"ij\")\n", "\n", "# Define the core mask\n", - "left_wg_mask = (X_g == -design_region_width/2) & (np.abs(Y_g) <= waveguide_width/2)\n", - "top_right_wg_mask = (X_g == design_region_width/2) & (np.abs(Y_g + arm_separation/2) <= waveguide_width/2)\n", - "bottom_right_wg_mask = (X_g == design_region_width/2) & (np.abs(Y_g - arm_separation/2) <= waveguide_width/2)\n", + "left_wg_mask = (X_g == -design_region_width / 2) & (np.abs(Y_g) <= waveguide_width / 2)\n", + "top_right_wg_mask = (X_g == design_region_width / 2) & (\n", + " np.abs(Y_g + arm_separation / 2) <= waveguide_width / 2\n", + ")\n", + "bottom_right_wg_mask = (X_g == design_region_width / 2) & (\n", + " np.abs(Y_g - arm_separation / 2) <= waveguide_width / 2\n", + ")\n", "Si_mask = left_wg_mask | top_right_wg_mask | bottom_right_wg_mask\n", "\n", "# Define the cladding mask\n", - "border_mask = ((X_g == -design_region_width/2) | \n", - " (X_g == design_region_width/2) | \n", - " (Y_g == -design_region_height/2) | \n", - " (Y_g == design_region_height/2))\n", + "border_mask = (\n", + " (X_g == -design_region_width / 2)\n", + " | (X_g == design_region_width / 2)\n", + " | (Y_g == -design_region_height / 2)\n", + " | (Y_g == design_region_height / 2)\n", + ")\n", "SiO2_mask = border_mask.copy()\n", "SiO2_mask[Si_mask] = False" ] @@ -192,25 +207,46 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "geometry = [\n", - " mp.Block(center=mp.Vector3(x=-Sx/4), material=Si, size=mp.Vector3(Sx/2+1, waveguide_width, 0)), # left waveguide\n", - " mp.Block(center=mp.Vector3(x=Sx/4, y=arm_separation/2), material=Si, size=mp.Vector3(Sx/2+1, waveguide_width, 0)), # top right waveguide\n", - " mp.Block(center=mp.Vector3(x=Sx/4, y=-arm_separation/2), material=Si, size=mp.Vector3(Sx/2+1, waveguide_width, 0)), # bottom right waveguide\n", - " mp.Block(center=design_region.center, size=design_region.size, material=design_variables),\n", - " mp.Block(center=design_region.center, size=design_region.size, material=design_variables, e2=mp.Vector3(y=-1))\n", + " mp.Block(\n", + " center=mp.Vector3(x=-Sx / 4),\n", + " material=Si,\n", + " size=mp.Vector3(Sx / 2 + 1, waveguide_width, 0),\n", + " ), # left waveguide\n", + " mp.Block(\n", + " center=mp.Vector3(x=Sx / 4, y=arm_separation / 2),\n", + " material=Si,\n", + " size=mp.Vector3(Sx / 2 + 1, waveguide_width, 0),\n", + " ), # top right waveguide\n", + " mp.Block(\n", + " center=mp.Vector3(x=Sx / 4, y=-arm_separation / 2),\n", + " material=Si,\n", + " size=mp.Vector3(Sx / 2 + 1, waveguide_width, 0),\n", + " ), # bottom right waveguide\n", + " mp.Block(\n", + " center=design_region.center, size=design_region.size, material=design_variables\n", + " ),\n", + " mp.Block(\n", + " center=design_region.center,\n", + " size=design_region.size,\n", + " material=design_variables,\n", + " e2=mp.Vector3(y=-1),\n", + " ),\n", "]\n", "\n", - "sim = mp.Simulation(cell_size=cell_size,\n", - " boundary_layers=pml_layers,\n", - " geometry=geometry,\n", - " sources=source,\n", - " symmetries=[mp.Mirror(direction=mp.Y)],\n", - " default_material=SiO2,\n", - " resolution=resolution)" + "sim = mp.Simulation(\n", + " cell_size=cell_size,\n", + " boundary_layers=pml_layers,\n", + " geometry=geometry,\n", + " sources=source,\n", + " symmetries=[mp.Mirror(direction=mp.Y)],\n", + " default_material=SiO2,\n", + " resolution=resolution,\n", + ")" ] }, { @@ -222,26 +258,53 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "mode = 1\n", "\n", - "TE0 = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(x=-Sx/2 + pml_size + 2*waveguide_length/3),size=mp.Vector3(y=1.5)),mode)\n", - "TE_top = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(Sx/2 - pml_size - 2*waveguide_length/3,arm_separation/2,0),size=mp.Vector3(y=arm_separation)),mode)\n", - "TE_bottom = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(Sx/2 - pml_size - 2*waveguide_length/3,-arm_separation/2,0),size=mp.Vector3(y=arm_separation)),mode)\n", - "ob_list = [TE0,TE_top,TE_bottom]\n", + "TE0 = mpa.EigenmodeCoefficient(\n", + " sim,\n", + " mp.Volume(\n", + " center=mp.Vector3(x=-Sx / 2 + pml_size + 2 * waveguide_length / 3),\n", + " size=mp.Vector3(y=1.5),\n", + " ),\n", + " mode,\n", + ")\n", + "TE_top = mpa.EigenmodeCoefficient(\n", + " sim,\n", + " mp.Volume(\n", + " center=mp.Vector3(\n", + " Sx / 2 - pml_size - 2 * waveguide_length / 3, arm_separation / 2, 0\n", + " ),\n", + " size=mp.Vector3(y=arm_separation),\n", + " ),\n", + " mode,\n", + ")\n", + "TE_bottom = mpa.EigenmodeCoefficient(\n", + " sim,\n", + " mp.Volume(\n", + " center=mp.Vector3(\n", + " Sx / 2 - pml_size - 2 * waveguide_length / 3, -arm_separation / 2, 0\n", + " ),\n", + " size=mp.Vector3(y=arm_separation),\n", + " ),\n", + " mode,\n", + ")\n", + "ob_list = [TE0, TE_top, TE_bottom]\n", + "\n", "\n", - "def J(source,top,bottom):\n", - " power = npa.abs(top/source) ** 2 + npa.abs(bottom/source) ** 2\n", + "def J(source, top, bottom):\n", + " power = npa.abs(top / source) ** 2 + npa.abs(bottom / source) ** 2\n", " return npa.mean(power)\n", "\n", + "\n", "opt = mpa.OptimizationProblem(\n", - " simulation = sim,\n", - " objective_functions = J,\n", - " objective_arguments = ob_list,\n", - " design_regions = [design_region],\n", + " simulation=sim,\n", + " objective_functions=J,\n", + " objective_arguments=ob_list,\n", + " design_regions=[design_region],\n", " frequencies=frequencies,\n", ")" ] @@ -255,25 +318,18 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plt.figure()\n", - "x0 = mapping(np.random.rand(Nx*Ny,),eta_i,128)\n", + "x0 = mapping(\n", + " np.random.rand(\n", + " Nx * Ny,\n", + " ),\n", + " eta_i,\n", + " 128,\n", + ")\n", "opt.update_design([x0])\n", "opt.plot2D(True)\n", "plt.show()" @@ -288,33 +344,43 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "evaluation_history = []\n", "cur_iter = [0]\n", + "\n", + "\n", "def f(v, gradient, cur_beta):\n", - " print(\"Current iteration: {}\".format(cur_iter[0]+1))\n", - " \n", - " f0, dJ_du = opt([mapping(v,eta_i,cur_beta)])\n", - " \n", + " print(\"Current iteration: {}\".format(cur_iter[0] + 1))\n", + "\n", + " f0, dJ_du = opt([mapping(v, eta_i, cur_beta)])\n", + "\n", " plt.figure()\n", " ax = plt.gca()\n", - " opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n", - " circ = Circle((2,2),minimum_length/2)\n", + " opt.plot2D(\n", + " False,\n", + " ax=ax,\n", + " plot_sources_flag=False,\n", + " plot_monitors_flag=False,\n", + " plot_boundaries_flag=False,\n", + " )\n", + " circ = Circle((2, 2), minimum_length / 2)\n", " ax.add_patch(circ)\n", - " ax.axis('off')\n", - " plt.savefig('media/splitter_{:03d}.png'.format(cur_iter[0]),dpi=300)\n", + " ax.axis(\"off\")\n", + " plt.savefig(\"media/splitter_{:03d}.png\".format(cur_iter[0]), dpi=300)\n", " plt.show()\n", - " \n", + "\n", " if gradient.size > 0:\n", - " gradient[:] = tensor_jacobian_product(mapping,0)(v,eta_i,cur_beta,np.sum(dJ_du,axis=1))\n", - " \n", + " gradient[:] = tensor_jacobian_product(mapping, 0)(\n", + " v, eta_i, cur_beta, np.sum(dJ_du, axis=1)\n", + " )\n", + "\n", " evaluation_history.append(np.max(np.real(f0)))\n", - " \n", + "\n", " cur_iter[0] = cur_iter[0] + 1\n", - " \n", + "\n", " return np.real(f0)" ] }, @@ -327,1393 +393,22 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "current beta: 4\n", - "Current iteration: 1\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 2\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "current beta: 8\n", - "Current iteration: 3\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 4\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAQKElEQVR4nO3dPY/j1n7H8T8fxEdJs157jBhwmgBp485tAKcx0qbxG7i4XZq8ibR5CynTpbQBV+mMFEkTpHBrZL1rXMxIowdSopTC93COuBTF0eiB1P/7AQa7mNlZUBR/OoeH5/yPs91uBYAe7rUPAMBlEXpAGUIPKEPoAWUIPaCMf+DnDO0D/eXUfZOWHlCG0APKEHpAGUIPKEPoAWUIPaAMoQeUIfSAMoQeUIbQA8oQekAZQg8oQ+gBZQg9oAyhB5Qh9IAyhB5QhtADyhB6QBlCD5zQv//XL/L3//If8od//U/50yy/9uHUOlQYE0BLH6aZ/NO//besN1v5n/+byKfp/8o//8PfXPuwPkJLD5zIclXIevNcQHq6XF/xaPYj9MCJ/OXbRP74t38ljiPyF+NI/vHv/vrah1TLObBrLXXvgRfK1xsJ/E60p7V17wk9cLvY7AIAoQfUIfSAMoQeUIbQA8oQekAZQg8oQ+gBZQg9oAyhB5Qh9IAyhB5QhtADyhB6QBlCDyhD6AFlCD2gDKEHlCH0gDKEHlCG0APKEHpAGUIPKEPoAWUIPaAMoQeUIfSAMuxPf6QDewDiQhyndrs2NCD0LZmQV//EdTmOUwafD4B2CH0L2+1252uz2ZR/Nz/HZdgBt79c1/3o36AeoT+gGvaiKMovE/6u2263B4Nw6N+0+T8uxQTd8zxxXVc8zyu/b4cf9Qh9C9vttgz6arUqv9br9U7w2wbD/HvHcXrxoXFN1XNkgu15nvi+L4PBQAaDgYiIeJ63c25Rj9AfYLfwq9VKlsulLBYLWSwWkud5GXxchgn9YDCQKIokjmOJoqj8mX2Pj3qEvoHdtS+KQvI8l/l8LtPpVJ6enmQ+n0ue51IUxbUPVQ3TykdRJGmalufe87yyu9+lW5EuIvQtmJbehP7x8VEeHh5kNptJlmW9ube/BSb0SZLIarUSx3FkMBhIEAQyGAxks9lwX38AoT/AbulN934+n8vT05NMJhNZLpeE/oIcxxHf92W1WonruhKGoSRJIkmS7Nxm0drvR+hbqN7XZ1lW3tcvFgvZbDbc11+IuZ93XVfiOC7HVYqi2LkdI/D7EfoXMOEuikLW63X5RUt/OSbQ5tzbj055D9oh9C3Zj+XsL/tnx/6f+F2beQLV807YX47QnwkX4svVnbN9cxk4v8djmBO9xD378Wjpj3ToojvmonxN63XLIai+tlt+rZdA6I+0L6D2vWcXjufaThVQe0R+X3ef+/t2CD1qHRpUO/Z3T8U+hurgKsFvRuhPqCsX27lDd+3utd3im8eo5otn9YcR+hug7eK2lzqv1+udVY9FUezMwa/Sdq7qEPoTuXQrr/3i3W63sl6vJc9zybJMlsulBEFQBt513doVd13pjV3CvmuE0PeM1rDbr9ueEr1YLGQ6nZaFNER+X3EXhiELb/Yg9D2hNexVpqVer9eSZVnZsm82G8nzXPI8F8dxJAxD8X0u7zqclR4g8LvMvfxyuZSiKCTLMnl6epIgCGQ4HMp0OpXJZCLj8VgGg4HaCkVffPFF7fcJfccR+F32IJ7p3tvf9zxP0jSV4XAoaZqWK/LMv9Hku+++q/0+oe8owr6faelNYRMzkLdcLmW1WpUj+KZ+3r6R/FtH6HuEwD+rm4lnWvosy2Q2m8nT05NMp9OyjNlisZDValVW0bF/3z631Q+CuvNe97y/Wnxz35yALvz/dQh9xxD4ZtWahYvFoixfNplMZDKZyHQ6leVyKXmeU9ykBqHvEALfjl3IxFQxms1mOy19lmXXPszOIvQdoSHwL+2OHtpPwMzGy7JMsiyjJHlLhP5EXvNY6JYC/5Jz8JrBNfO7Zs69mYa7Xq9FRNQO3rVB6E/opcHvW9ivGaKmpcx27UJzv09rvx+hP5O67Zi6qM+tYfXY+/xaLonQn5gd7i4GnWCA0CtB2GGwDEkBAg8bob9xBB5VhL4FgoNbQugPqBZg7JO+He9rdXHgtIsYyGtQXeBh/9kHt76O3JTDqn7tm5hzy+fiJWjpD7ArrZpJH30K/q0zIfd9X3zfF8/zdlanURb7Y40tvfYTZU/xNKWYqtsid92ttvaO44jneeJ5ngRBIEEQyGAwKGvl3eJrPhW693vY1VmWy2W5F70p1LBer7mwrsiEPgxDiaKo3Kve3kac96deY+g1D4yY175cLmU6ncrDw4NMp1OZzWayXC57tS/9rbX2ruuWlXGiKJI0TcuCGb7vl7XyiqK49qF2Ei39HkVRyGKxkIeHB3n//r08PDzIfD6X+XxeVmbpU2tyK8G37+GDIJA0Tcvqt0mSyJs3byTPc9lut+W/01ojb5/G0P/888+XOo5OsAeA8jyX6XQqHz58kN9++03m83kZdPNnX1p64zU9ty69TsdxyjCb4JvaeCIivu9LkiQShuFO/fsuvYZragz9jz/+eNYu/rn3G2v7/9s1yRzH2dlIwXTnTaVVcy9pPyIyv3vLuvKBUX00Z7r5nueJ7/sSx7F88skn8umnn8pwOFRdGHOfxtB///33lzqOzjDdYDMY5Lpuee8Yx7FEUSRRFEkQBB89InoJTfustSnq2PS71UKRdvc+DENJ01TSNJU4juXu7k4+//xzub+/l+FwKL7vN25xrVFj6H/66adLHUcneZ4ncRxLmqYyHo9lNBrJeDwuCzTYe6bV7Uv/0vvoYy7Kvn5QHLvHnGnlfd+XMAxlNBrJ3d2d3N3dle/P27dvy40u8LHG0P/yyy+XOo5OMveLd3d35bN5050Mw/Cj6izXKOpQbQX7qun4qx+eplsfBIHEcVwGfzwey3A4lDAMReT8t499xeh9gzzPd2Z7DQYDieO4HDTq0gQdbRe4eV/CMJQ4jiVJEkmSROI45j7+z9i19gimhTEVV82sPDMdt2sXlabgmwFVs4uNmZVnj7Owa209Juc0MKG3t1Fi7n13mDEVMx3X7GBbty89njH3/gB7ZZ3p0neZltbeflRqD6gS+MPo/zToesD36etxvwZhb4/QH8DSzG5oG2iCfxihB5Qh9IAyhB5QhtAfwIhwN7QdU2Hs5TBC36CvQe/rcb8Gg63tMTmngb2E08wA6/osLw3vmT0X3961lict7TA55wC7Uos9vVNDuLqqujd9URTllx1+3qN6zL1vYC4cs6ouDEMJgmBnumeXdO14zsnMkKyuizAFNbQUN2nCgpsjmKWbpkhDkiQSRdHOhdWVi6orx3EpZj1ElmWyXC5lPp+XJbTMfPwuvT9d0hj6L7/88lLH0Tnb7VZ83y+rrY7HYxmPx5KmqURRVHt//9oiGse4lYt633mqO4emS5/nuSwWC3l6ehLXdcvuvXnfbuXcnFpj6L/++utLHUcnmBDb94h2975aLsvu4u/rTu678DSVy6pz7IehuV83rbzI7x8CWZbJbDaT+Xxevm92uSyN41Nm44+qxtB/++23ZzmYLnMcRzabTdmK2IUxq93G13QfCfjLf9eMsZhNSOzW3gy0xnEsHz58kHfv3qkvjPnVV1/Vfr8x9N98881ZDqar6kpgv3//viyBbcpf97UE9rG69Brtx3L2yL293ZgpgW33yMzvarIv9M6BE6HrLFk2m41Mp1P59ddf5d27d/L4+Fh2H03rn2VZr4Lfl+M8xB7Ey7Ks3IDE3ohks9nsFNYQuZ3X39YPP/xQ251k9H4P13UljmN58+aNbDYbCcNQJpOJ+L5fPi4yj4z6cDH14RjbsCsZ5Xkus9lMHh8f5fHxUZ6enmQymch8Pi+3HsPHmJyzh3ntURTJeDwuv29vaNnFZ/V1bu19NN16e0OSyWQij4+PMp1OZTqdynw+v7nXfSq09HuYmXdmowuzXbV5Tm9vooDLM72tPM9luVyWt16LxaLcyw71mHvfwEz0MLupmLD3aeLHrV789i1WnuflIKvZz07rY7o2ur16pANM8M3jOrsII67PzL8325DZxUvtuRO8X8/o3jeoVlzt22KbW2/p7JV21Ud51ef7eEZLf4Ad8L6E3ejb8b4W4W6H0LegLTy4bYT+xvGBhSpCrwDBh43QK8EINgxG70/MLtNUHVjqQuiqx8Dglz6E/kzqwtSHD4EmXfuA2Fe7wHVd2Ww21zikXiD0V1SdRNJ1bY7zXB8M+2bY2bvW2jMlta6hb4PQn8hrC0X0JfiHNL2Ol/Z0ms6p3aqbNRK+74vv+2WtA9RjIK8jNLRKL604dKiire/75YIoU63YFMfEfrT0HXJLLf45ma687/sShmFZvNTMuzfnMc9zWvwahL5jCH4z00vwPK8sUX53dyeu6+6ULLer5+x7mqIVoe8ggv+suvbBnBvTyptqxXEcy3g83gm7WRKttVzWPoS+o/o2sn9J9mh9FEUi8rzSzvd9SdNURqORJElSht7e4077OSX0HUerv8t+JGcG8sx2Y2EYSpqmcn9/L/f39zIajcqBPVr5Z4S+B2ihntmBj6JIkiSR4XAoo9FI0jSVu7s7ub+/l88++0ySJLn24XYSoe8RWv1n5p4+SRIZj8fy9u1bGY1G5fZjQRBc+xA7i9D3jNZW3/7AM/fzZgBvNBqVgU/TVAaDQVlBR9t5srFr7ZlduhBjdaNMbcwIvrmXN3sM2hN0WFlYj9DfgC4u5Dm36mCeXamYwDcj9CfUlbLLpziGl8yhf8nvnpK92MauUkzgmxF61DrVTrPnCl910s4pdhLWgtAfad+FdWiRSJPXBO3WL/RDVYkJfHuE/kj7AmpGmS/dze/CbcU52OeSOfSnwRrEE6OluQyCfzxa+jO5ZpWZvmq6ZdL4hOJcCH1L1X3R7PvHY7vzXLjt1e1Lx338cQj9C9iru0xppsFgIEVRUKzhQuxzz3P54xD6FszzYFO4IQxDieNYVquVOI7z0YaJOB/zPiRJIlEUSRAEH20fTvibEfoD7EotZhlnkiSyXq/FdV3JsqzcE/3UNH2QtCmSab8XSZKUa+brauMR/P0IfQt2K58kiRRFIZ7nSRiGZaUWuveXYabemrXzw+FQoigqQ09RzMMIfQO7u2iH3nEcCYJA0jSV9Xq9U5XF/J6mVvqcqufSvBdmPX0cxxKGoQwGg50uPvYj9AfY9/OGaeVNfXUCfln2YKq92MYM6KEZoW/BtC7VVp9u/XXY74P5AGAgrz1Cf4B9AZmWxPM8WvgrswPOI7uXcQ5cuFzVf2bOU/VPXE91cROh/0jtCSH0RyL03UDQG9WeHLr3R+JiQ1/xUBNQhtADyhB6QBlCDyhD6AFlCD2gDKEHlCH0gDKEHlCG0APKEHpAGUIPKEPoAWUIPaAMoQeUIfSAMoQeUIbQA8oQekAZQg8oQ+gBZQg9oAyhB5Qh9IAyhB5QhtADyhB6QBlCDyhD6AFlCD2gDKEHlCH0gDKEHlCG0APKEHpAGUIPKEPoAWUIPaAMoQeUIfSAMoQeUIbQA8oQekAZQg8oQ+gBZQg9oAyhB5Qh9IAyhB5QhtADyhB6QBlCDyjjH/i5c5GjAHAxtPSAMoQeUIbQA8oQekAZQg8oQ+gBZf4f5mYn/v38idYAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 5\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 6\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 7\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 9\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 10\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 11\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 12\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 13\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 14\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "current beta: 16\n", - "Current iteration: 15\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 17\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 18\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 19\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 20\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 21\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 22\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 23\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 24\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO2dP48bWdbeD9n8T3arpdHOSJAcrIE39WabGtg3Wbypk/0ChjMn/hJO/RUcOnO4C2zk1IGdGAZmgh1oZwWpBY3+sNn812wHwlN66uGpYpVWMyNvPT+AIJtkVd1i13PPueece6t3d3cXxpju0P+lG2CM+Xmx6I3pGBa9MR3DojemY1j0xnSMwYnPHdo35v9fetmbtvTGdAyL3piOYdEb0zEsemM6hkVvTMew6I3pGBa9MR3DojemY1j0xnQMi96YjmHRG9MxLHpjOoZFb0zHsOiN6RgWvTEdw6I3pmNY9MZ0DIvemI5h0RvTMSx6Yz4j//1//RD/8l/+R/z7//o/4/X19pduTsqphTGNMQ25er+J//Tf/nfsD3fxf56/i6/m/zf+87/7N790s46wpTfmM7He3cb+8HEB6ffr/S/YmmosemM+E//qwSz+w7/919HrRTy6mMR//Od/+qWblNI7cddar3tvTEu2+0OMBl+EPU3XvbfojfnHxTe7MMZY9MZ0DovemI5h0RvTMSx6YzqGRW9Mx7DojekYFr0xHcOiN6ZjWPTGdAyL3piOYdEb0zEsemM6hkVvTMew6I3pGBa9MR3DojemY1j0xnQMi96YjmHRG9MxLHpjOoZFb0zHsOiN6RgWvTEdw6I3pmNY9MZ0DIvemI5h0RvTMSx6YzrG4JdugPnIiTsIN/5e0/1U0eulNzv9LNtmbWt7vL+nfcai/7v4FHG1FSz/nb3W57rXVWQiqhMWf1b1+hRoV932Ve3ibd0BtMeibwkuuMPhUCvQ7D0WqL6ueuA4n/J5VZsyIJ5Tz/pe3SP7HaosPR79fj/dDz/3+/3o9/txdnZWvLb4m2PRtwBiur29jcPhUDzjM/4ef1/FeTgcigfva7/fVz7jO3jw37wfHOf29jZtT4YK6+zs7KTwWHz9fj8Gg0EhQt2+qkPCvrAd9sEPFjW+OxwOYzQaxWQyifF4HMPhsDimOY1F3wKIab/fx3a7jd1uF/v9PrXcVcJmMWP73W4X2+02ttttbDab2Gw2pfd2u13x2O/3xWO325X2h9eZB4DOqQoIq+pZH2xtB4NBDIfDGA6HMRgMSh0A4N8DbeEOA9uPRqPKfeFY0+k0zs/P4/LyMi4uLkodgjmNRd8QtvKbzSZWq1Xc3NzEdruN29vbI7FDgCzQ7XZbvIawIfLNZhPr9bp4QPAsfGybCR7H0Q6nyRAk4tjKQ5D4DJ9rZ8DiHAwGMRqNCmvMotd2YV/caYxGo8Jy41lFPxwOYz6fx8OHD+PJkyfR6/VK37G1P41F34LD4RD7/T42m01cX1/Hu3fv4ubmpnC/IXYIk603W3EIPPubBc8WHsfOXHs+dkQcudEq9Cqrf2o8rZ0Adw4QHlztwWBQEmHm3sM6YzsIH9aeOw98dzAYxGw2iydPnsTZ2VnMZrOYzWYxHo8/83/7HxeLvgWw9NvtNm5ubuL9+/exXC4LUeIzdAxsvW9ubkrCZovO4lerrqJWl53deG5n9lrPJUPH7ae+w+N6tbrq4utxdRt17Xk/+H6/34/5fB6j0SgePnwYq9Wq+J3u7u5s6Rtg0TeEo/aw5pvNJm5ubmKz2cThcCissoodD7XuELlade5EVOhZYFDbqK+bnBtb5Ox19lvo8fv9fhwOh5JnoPvIgobwFLjz4OEFjgHPhodH8LJMcyz6FrDgeGzOot1ut4XYMe6H4CF6DtJpUI7H4bj4cVGzGFkQGqjLcuD6WV2nkI3hdR9q7dlicwCOI/kMLLgGAvHgLEBElGIB7P7bsrfHom8JBAZrD5FzUA5CV9GzZcf2nIbDg8FYtm5cfkrA2Tlkz/h+JuiqY3HkvN/vx2g0KkQPYXKQjR8qeE6/DYfDkuA5PToej4txPDoXF+o0x6JvCVt6jMcRxWfBX19fF2LHEACWfbvdliL83JHUCZCfq6gqcsnOIRsisCB1+6pcO1xxjMXH43EhfkTzVfjsEUDwCOJByACd4W63i4gPor+4uIj5fB7j8dgWvyUWfQs4bQcLv1qtCouu4/jVapVaeB6rq/CqKtBYzBF5AY1aXY56q3D1+IfD4eg4/Mzf5W0j4ijXPh6PYzKZlETMY3YuvoGrzuk6jvzf3d2VUp+HwyFGo1E8ePAgzs/PYzKZxGAwsOhbYNG3QK08hL1cLksRelh6dAJcWMPjdg4OAlg4FpxGwyEKrYDjMbK+Vhc9K+RRwXPHwi42nwfayhYboofw2dVn0fMYnsXPUX+0lYN2g8EgLi8vLfpPxKJvCUePb25uYrlcxvv370tpOA3cZek3danVsmoVGoSj1W8QDwfPWEwaUNMCIs4OoC18fPYQEIPgwiBsh+ND7GzttR2a14fYs2o+7mgh+rOzs1gsFrFYLOzefwIWfQvYQqJABw8WPafm2MLrmD3iONfNhS1asAIBwZrye2otVficAstKhDVjwMMDFR57Luzis5uu7dNaevZEuEPToh5uL9ra7/djOp3GbDYrFe+YZlj0DdD8OMbzPKZXsXMaD+JQ6x4RRxY9G+eyu8wPFZd2DjqehhXPSnXV0uv3OUeuwxWkEHEOaBM6HQ3kqZuvKT4+dkQctRUdTFPX3kU7ZSz6FvD4kgV/fX1dStlxVR0LXoN1bPVg6TB7DM+TySSm02nxmM1mMZlMYjabxWg0iul0WnQOEDkHxLQuHSLOHmhbVdSea/xZ9ABuuz7Uc2BvQmfVZaLPahG0M9OMQva/6xpVHZ1F3wIWPVfdacEN18Vn1h0XPVt2PGC9IXA864Mtvlp4FpwKSc9Hc/VZmlCLknhGHxfNZFZcxc4PFT4HJbnOP2unVuzh4Xz9aSz6FnC6jifJaPlsVf4bqODVhYfYp9NpLBaLI8FPp9OSi59NR61yl7NCm6qOSc9dA4BZnCKLCehx1dNh8et2VW1l1x+dj3YgJseibwFberjwED1bdrV8mpLjvLa68bPZLObzeemZxY5HFixTsdeJqI4qS6/Cr4sJfMrx2nyu9QbaNoz92f3vGo8fP07ft+gbouNaWPasfBYTTVA+y7l35LQx9oYrz4LHQ8WuQbwsSl8n+CorrtSJDHMB8Jx5NboPjRvUzQ3g7TkGofthj4MLpZbLZbx9+zZWq1Xc3t6WAn1dE/4f/vCH9H2LvgU8rlXRa8pLL2h+n9NwsPAsdHbpIXa4/xqk00BZZtlPCT5zvfk1xspVJbtZaa4Klb2grISXOxI+h7r/Aa9r8Pr163j16lVcXV3Fixcv4s2bN7Hb7YrOr2uCj7DoPxtaKKLTOnUsqcUumJSCsTwH6haLRSF8deN5MoqO07NJMRzY0tdVFpatqrrEWZQ/25dmBLKagKwuoC6Yp/ve7/exXq/j+vo6rq6u4m9/+1s8e/Ysnj17Fs+fP4+rq6u4vr6O/X5fm8Ov8074O9k58verftMvYf8ZFn0LsjEtfnh14TOxc0oLVlut/Hw+LwleK9pYCCosWErOxWtE+5RVr/MIqlJ9fKwqsetin9xhatGOWnr2GlAnsVqt4vXr1/HXv/41vvvuu/j222/j+++/j5cvXxYpVM+zz7HoW6AXeEQ5TcVjdlirbIVXde05aKeC1zJatIMF1ev1Yr/fR0QUcYQsTQaqxF4n/Kpxdea+48FCzxb31NVu6nL0PI7fbDbx7t27ePHiRXz//ffx7bffxl/+8pd4+fJlLJfLz/+P/wfDom9I1ZgwKzDhOeFcacclpxA+cu6Zhc/KUvni57YNBh/+lahNPxVFzwTeJNhX5b7zWBsuODIdWrjExUsaD+HjZkOD29vbWK/X8ebNm3j+/Hk8e/Ysfvjhh3j9+nWs1+tW/9OuYtF/IrDwbNF5PjnXwLNrjo4Awoa1x7O69Fn5rAoOaUEdEwO4/QoXwGSdRNVYs8q6cyaDLbuuC8gdQDbzMPMW+AFLf3V1FS9fvoxXr14V0fqm49ouY9G3gMfpbL3v7u5KwTlUyUHAsPpaY8/C17y7uvQRH628tuXs7Cxub2+P4gdMllbj/VQJvomLz4JnV56LmHQJMV5nIFtBSJf25ipHTGt++/ZtMa2ZZ/yZeiz6huDih6B4wYiIKFXUcU6dx+VZvTl3FjxBRSeSsPXLin14n+omq0jxHs6rSvh1sJVn665Lf1ctH4bVhPDgKbvZM3cw6Fiwj2z2oqnGom8BLCsH4iaTSUTEUb49C8axqNjqc4GNpuSqClJwkSMtVRf51ko1dfUzsWdlrLydihAPFXy2KrCuN5CtG6g1/jj+3V15xh/f5MM0w6JvAcbunF/fbrel+d2cfmPRa0Qar3mYwMLNLDWnvziDkBXn8HbZDTI05950LJx1Qip4VMhV3b0nE7zetUc7OH1kOX/TDIu+IbDOLPr5fF5YWkyO4Xx7dnPFTHBVU0rZ0uvYGYtEogPRajx8pqkzXZ9P0aAftzUTHo/jYeF5afBstWB+j2/3BbFz4ROfO9rA56arB5vTWPQtgOiRYlssFkVRDIQO4WOeO9/TjS9UtdSZtT1V2QbxamUedzAqzKw4JjsmPtOiG20LrDMCcnr/PRa13suP26TBOnbl1ZJzW/C3aY5F34Je70PdPKz8YrEoCmFQSgv3noN4EL1Wp1W5pvweX9yaFtPFKbV0Fd/Xm19mx+dj4FnjACpEXVQjEzd/R+/Wq0LPXHnz+bHoG8CCgns/m83i/Py8+Jxr6DmIx64914Kjii5zpVFKG3EctVc3X0ttNaefibLKza8aSqj4+T2OsGcdC4Js/LqJ4E/9P/jZtMOib4COv1FJN5/PC4HyLDhdEBIi7PV6xcwvDAtYtBAfj8vVpc/cfIa9ChYYW2FNg53Ku/MYW0WsLr4G4thD4E5DBc7zBrIsQjYUQUd8qqPA728+YNG3BNYeKTukk7IlqxCgi/hoRXVRDf4Mr7lDiIiSNcw6ANDr9YrAVpbiw3Ys4kyUHFDLJspwh6DeBA9hsqg7DynUO+GptVmnwLB3ckrUFnyZWtH7x/qIXoB8c4fD4ZAuQKlReN2Xjpvx3X6/XxKvRt5VsCCr3ss8Az1+ZoV5G3XH2ZJnmYFs2MDw78IThPDbZrEGPbdsfTxfr82wpW+ABtBwMWcVcCqoiChc9ywQp5NO8H117zUYlkXgM9GrdeXP66hK1WkaLes8VIA6qYc7BLyH36aqbTp+v729PfIUXKTTjFrRO1DyAVhbvcW0WrT9fl+a8w53PqIcSddUlgbkFLW4GojjQF5EOb9fldbK6uy13be3t6X8PwcYdXvNHlRlJvg3Ve8C8xiyDlDPDd4V1/pjWMATm7J5CF3Hlr6CTOi4Rx3uSMtLZkUcl4lCNPgsK1VV7yGi2k3PXOgqD4HbU2d1OebAgbT9fh+j0Si22236+yCWwfvd7/el4Jp+rr8vfiMWe5Xg0Vbu0LhQCc9nZ2dFZoVve2X3/yO1ov/uu+9+rnZ8EbCLzlFrXFwQKt+GGhFrROZ3u10Mh8PY7XZHizJin1qYkrn3QC2iBvJAFkvQeAHvX1eJhXXnQCLOi1ONPLkH3gfP8qsTL6PnxOfK20DsbLG5/XyXnLOzs5hMJnF5eRlfffVVXFxcxGQyseiFWtH/+c9//kld/Cp39ufev15oPNbmxS8gEh2P8xgfkX1E8Fn07N5nRTJV+ecsyKaiYiutaS79LkSaHQvgeGdnZ0Vb4U5nc9w5naewSPl8smAjyBb6ZPEjiLpYLOLevXtxeXkZFxcXcXl5Gffv34/Ly8uYz+cxGo06uzBmFbWi/+Mf//hzteOLAcLGBTwcDkur0vJ8d76II6LUQfCYMuJ4XF7l1qu1zlJeClthFj3Atrj4OWqeHVe9C+7ksrnvmnvPzkd/Lx0GaRAP56GTiLA2wWQyiYuLi3j48GE8evQoHj16FL/61a/iwYMHcXFxUQg++z91nV7dD/H06dPO/UpszXu9XnG/uOl0Gufn5zGfz+P8/LyordfVZ/QOM+pqa8EKb6u185yrr/o/8cqx2aQboJYV+8yEmYkzS9VpHcAp11yDfNl+qs6Pf6PRaBTz+Ty+/vrrePz4cTx58iQeP34c9+/fL92z3kTqxtWKvtfrdU70Sq/3sdpusVjE+fl53Lt3rxA+F+DweFcXwWDB8cWti2BkY/Oq8b4KXufTZy51tr9sWw3wseXnqrxM8BFRKk7SMTn2la2Ok7n5+v8YDofx4MGDePz4cTx9+jSePHkSDx8+jMVikU5l7jDpD+Du8AR3d3fFckz8WK/XRY09Li4WsF7kVdaQvYKswEepsqIcTMP7VTEN7Ti4zbr6bjYOZ7c84mPsgNvFQx3sNxN93UQgFj97RrD0FxcXRQeM9Qvszn+kqtOz6BtyOByKJZoiorhYh8PhkQjZUkZEabzKLjWP/3lYwNvzP47H64PBoEgJai0/Xmcr6TDsEUCYOjxRb4E9Fo41cGfE55Ot2Z+JHqnRrKpPhxEY0+uSZHWdpfmIi3NqYEsBC7fZbErjdMyX50BTJhQttYUQeAXdKrHxMzoEFnaW7+ZOJyKOhK+Cx76qxKpDlSw1x/vI7rHHrjqnQVn4nMbkWAKnUHn/uhSZOY1r7xuiRTKbzSYiolS1FhEly8oucZY2g7UeDoeFBYN4s0g+V8ZVibyqEEfH3Lp/Fn+dleboPo7H+9C0ZZXoqyw9i5+Lb7hD0Lvzsgdk4Z/G7n0LcLGjWGW73RYWV6PfLA5Nt2H8nRXO4Dgq9swq47sKtkXunl1w7A/f023U4utNMrWdvC1ce31UiZ7TgChmYoHjoVY8K9bR8zHVWPQtYAvHVl8DZ1n9OQsPlrnX6xWWDBVwQIcIER9vWRVRXfuOfcIj4OcM3UdWeaeZBW4Tb6vDA75LT7bCL9qp7c+8HA4gZhkO0xyL/hNQCw4rDmGxeHXsqxYXbjpXwGk0HK9RO4DPNTCGjketf/ZeRtaJnMr/8/ez9KP+DbT0Fp0ozp8DeFkK0mL/dDz9yHyxOKb002BL/wlkLii7nOze4/ua2mKrGBFHrzOrxkErzkfr8dUKNnWDdSjCFljH/5l7j9eaSuSUpbr3PIchK+/VB+/DfBoWfQuySLrm6ZsG8tj15Tvb8Lp6dYG8zHWuq8yrQoWu1Xd8LrwfFV2/3y8tw8Xf0+FPRB7I0+h9FsnXmgeLvz0WfQsgAASmuCgkS9lFROVEFM1n88w8vT21djScWtNgm3YCmfXH2FnrELTUloNoWeQ+OyeejTcajYqofFaRx6LPBM85ek7Z4Ry0rLiqAtGUcXFODXpRs9hQj6/FISp6dmWBWnnNaVe59+xRZEGzrN5dvQ89N3XjkZHAdzlaztvq9F6cl3Zm2YxDFr3eACOrxdfiHKRNtXIP++76dXsKF+c0BGKD2DHdFu49j7fxN6gq0NEiGHbtecyO70fk962r6wTY2jOczuNUH39PU2p1Zbhom54XD1k4ZZcV3qgbr0MNFrhW72ktgqnG7n1DMH7nKbbz+bw0pufxtE78OFV/z1a6SqgR9RNusgk/dSKA4PEM11lz6HhPg2rZ0EWHHvzMnQeLHkuIYZ86ExFt5RoJ3AkXN8Lc7/fF/8J8oOq3sOhP0OuVp9ZiVheWYlJryhd6lYXEBc1ewSmxahltxOeZWstVgVpxiLZnU2urhM+ZBh12aFt4TM+CPzW1drfbxWg0infv3sXbt2+L24j1+31PrW1AreifPn36c7Xji4IFwu485tPzDSp17M0uLX/G4+Umi2hopLtqqKXCr+o02J3XwBfOt2o6rYq97pZUQDu0LBBYtRgHfhM+P/5dYNG56g/nsVgsio7G5NT+Mr/97W9/rnZ8EXBFHU/j5OWycKFl87Y5iMXTZCOql8tSK6lBN3ZpuTPSdmsQUYWbpRD1uPo9FiOs8acul6WxAR6fZ/MQso6Mf2OO7m82m7i5uYnlchkPHjyIe/fulZbL6ipV514r+t///vc/SWO+ZHDxb7fbwhJyIIotFEeYcZE2WRhTV8JVIbM4sK0Ki7fRzoKLg7AfnBdnE+oCtdpJ6SMrptGhAntA2VAjixOAzHNhr2G1WsVyuYy3b9/Gq1ev4ocffigW1Xjw4IEXxoyI3/zmN+n7taL/3e9+95M05kuFL8rswt5ut7Fer4+WwMbFyhNN6kTfZgnsiOObWFaNfdVLyCLyLHi2zFkHo50UW1eupsui69iXtofbweeC9zKvJ5tVx94Nx1GwBDYsfpeXwK4Sfe0aeRHRrV9JwEWP9e7X63Usl8t49+5dvHv3LpbLZazX6yIwx/l2LIrBVpf3x8UoVW4+CzMrV61ypwHHEXglW7jqOr5n64tj8e2t9ZGN9bP0JNoG9Lwy74XPR4cI2Ad3THju9XrF4qW42QXXB3SJP/3pT14jry2IQPM4PSJKFhupLQSY+FbVmeizktnMxWd4Wwiu3+9Xegg6NFDB4TlLJbJ4+dbTmeAzi68Ziiq4k2EPIessskg84gtarXd3dxc//vjj0ToAdb9v13BxTgPgYsJ1h6B1Aky25h2sE9eeq1XXMSdf5FmVHKNje36t42pGXXuNG7AQtRgH2+i+stiDoulLzRDwvuvaz0MPXlXX1+xpbOkbwJFjLifl6DWPNzXyzC4pl8niomeBqlWDAHkfOh4Huh06kyyFdyqHrWNxWEt+hmBxnjqGr4oXqPAhVu4EsqELnxviLpoJMadx7X0D9GLGhQoXP+JjWW1dkAxox8Dgb3ZJs7w5dzS8X24znnkowWW3GuXnbbmyLmszOqJ+v1/yQjj9p+de51lUBfXqvAUOaFrwzbGlbwkEj9zwzc1NYanZzdeinezCBtyhcDEKr6LDFlVz10yWrsN+ED/AgppswdF+HAexCogbHRoLjSvqMJyBy83eAIStAcqI46GBejL4nv5mVR6BOY1F3wC+UBHRvrm5idVqFdfX16XCFq27ZyuqwS615FV19xAuBw35ODo04E6G94G/EQjUdqjbDYGPRqOjMT4H8Dj9mI2z0WHoeF+9J26rdgTKqc9NNRZ9AzSyvV6vY7Vaxfv37+P9+/dHkXQWHay+jmEhAt4GzzoGZ3ebBa/bscseUZ4Wy94DZwzU/WbPQt3vLNjHotc17LWYBwuAZr+tLvpZJ+Q619+cxqJvwd3dXex2u6JAZ7lcHomePQLM/OKoPVtQXLQqcraAPLbncbluy52FRv6R6sNzVtzD5xhRvitP5naz5WbBowaBC5DwwHuZ8PGM4YTjST8dFn0L2NJfX1+XLL3OPIMYeI489sFWCtY3s27sumdWniPmVdkC9ixGo9HREINRLwFkgcms8AfCZuHz82g0Kv7u9Xoly8/PCAxiaMTeh/4+/DuZZlj0DWEBIYiH+m9Yeh3r4j5ruoAEQIAsC3Lxd1nUcIP587oAn3ZE7GVgPzgG4GBg9jtk++V17lC9CLGv1+vSA1WLm80mNptNyRNBERLvOwvucRoT6wCYZlj0LUBumEW/Wq0iIo6CV7j4eepntqwWLDDeY/c2G6/Dyld1CKemx2bjYT1elhUAGvTjTo5LjCF2znLwAx0Af5/n1utsPh5moOPa7XZHHaA5jUXfAo7es+XCZ+zy4juox8/KbzEjjwWsD8BBOn5fl8ni4iFud/bQTiU7bt1vkVl7rl/g3wkdJF7j/c1mc7Rclj5rqhDH4HQpOgBzGou+IezW8kW+2WxKATpYvc1mU9Th8ywwfj0ej4+i/lnOHp/xFFONxqvodbzL43EmE3zm8vPvoCk1PXd19TNrz+4/L5WFmENm8XlOwM3NTbx9+zaWy6VLcFti0bdAU3d8IfL7iNpvNpvSLakxKQeC3+12MZlM0lzzcDiMiOMpszyllC18tsYeto/Ix+daOnxK9NxxqOg1bsBr3202m5jNZiXviC28xhnYjdepu7e3H24X/vbt27i6uoqXL1+WUoLmNBb9J6LjWRU9rwari0QOh8NYr9cxmUxKU2uzY/BMMR0eZPvmop1sOABU2E2sPNqUFc+w682CRccGV5/H/dxhcrvYO8n2u16v48cff4yLi4sYjUZFu5bLpYN6DbDoG1IlAlyUEC8i8ly7DhGiE8BMPV2+OSK3pugo0A6d1YfjsfA1fafxAX2dCV4LhLRdmXXGzTgh1OFwGPv9vlhrUJe65thCtjBoZv1h6e/fvx/T6bTIaNze3sb79+//nn9zJ7DoW6AudkR5uWjklTkCz+vYQ5i4WQbXqWsBjObzORWn7j3vl9875bJXibyplc9SjFx9yKm3/X5f6ui4TkBXA9YMBB8bHSxWxsECpTj/ly9fxvX1dRHY8zj/GIu+BZnYcGFWuegsfmyLi58FwBafOwE887F132wdq57xfX5u+joiX1tBc/vaIfAEHu4AtPw4yz5olSLagLTpYrEoViWezWZx7969ePToUTx//jyurq7i+vr6qLrPHcAHLPqWqFXV9FjVzC8WIAJcPBdcc9Aset4HR+zVK+Dv6XOVFa/7m8WSWV1+ze/pcXkmn9bYs+j5OctA4HiHw6HIjEwmk7i4uIhvvvkmfv3rX8fV1VW8ePEi3rx5E7vdrpTCtOg/YNG3ABco36uNJ7CwCHUVGGwP9x+VeCpwFX+2Co2O2Xu9XrEtu/NauMLvARUCf86fVUXs6zo5/d3Y/ef3M9HrsETbgDgHbkLy1VdfxZMnT4oVclerVTHEqBqudBWLviFsZTPRR3xMi6lrztYabq5+RyPVWVFKNvGlyuKyVVU3v8m54ln3z+m5TPRtYwh1Vl7bwe2B9catxrSz/JTz7goWfQsgel7mejweF2kiXjqLL0K2gvhcBZ8JSqenZsty433Medd742lgrMqK8znyM7dbPRCOwPP2mSeS7bvpWDvLbmg8Q1OZdaXEXceibwFEPxqNihTUeDyO7XYbEWVrW+WawhVHR4FtI6pvMKE17ZvNJqbTaVH1h/EtvA9emDMr2NE2VYle02ba2ajoTwXl9JHFAXA8zlRk7dTMRV0A0JSx6MngwS8AAAavSURBVFvAln4ymRSP7XZbChZp1D2zqip8FhWLn4WOarbJZBLT6bTU8SD3n93vXsfJOgzIgoUqeq17Z8+DXWn2NDTgyW1Qy8yLhaqHkP2mfCOROi+my1R1fhZ9C1j04/E4ZrNZzGazokosc42RYsrKYDlXje+quFjwmNkHoePeepjCWyV8nn2H42hAjs8R3+MZfdwR8QQZFSJqELLj89yBU1WF2kFx/ADlzBFxNDXZVv40Fn0D+IJCnh1WHqLPxrC8fTb+jfi4Qk1EWfQ8aQWCH4/HRYfDwmKBNRV9FoxDW7Nz4RJjXg4L7edZg2gf2pgVDrHg+V4B2lYcm9va7/djPB5Hr9crztE0x6JvAUfvx+NxzOfzWCwWRWqoahzb7/eLVWJUZBH5HHUsLLHdbo+EweW8WtOP93lcD1eYJ99wMI7bo9ZYRc+TabjOna08OkQIX4cZLHiOQ+j38JtwDAG/9WKxKI43Ho/t0rfAom8JXEu49/P5PO7u7o4uWk7xbTab6Pf7R5NzeHzPwo+IwnvAfjLRaJ09v8cWXqPZPITIUm68P/YOdMYb2qzDHhU9d1SZ6HlYwjf+RNCTg5uHw4fFRrfbbek24hZ9cyz6FnCwCi7+fD6PiChZXLa8Nzc3cXZ2VgTkUMjDq8Fg7MpFPXpcrBuX1d9HlBfXZGHp99ibyI6pQTfuLHQbCA3HgmhZ8HwLMO6k8DfHIqruAchDi8Ph45LcKL/1XPp2WPQtYOsN0cPK6H3p2apxZ6CzzNjyRxzPZgMszLpgFQ8pqoJbWWFQdo6aXkO7uAiJOwmcO1x6WHHtgLB/dBSDwaAIRmI7fA/Hg+jv7u6K8fzl5WWs12uLviUWfUsyaw/RszXTHDLcfLyPsTFec9luJny9qDXqX9depapjwfe1Yk6zETg+dyzwZkajUXHHmyxyzw928Tnqj/fZ2kPYd3d3RWe7Wq2KOwdb9M2x6FvCBSiwSih5ZateNX7FarDI7WtADGNn/lsDf1qsknkK3F6mqhPJtslEz9uyV4GFQzDmhlfDHoMeg6P37CnB0mNbrSe4vb0tBK9rEjhldxqLvgV8kUPEk8kkIuLoFtUccYebC8HzMlpc2BNRvgddVqqbvQ+aCFq/i9csFk3VnfpN0MFpnYHe00+3w+/G43vOUGRxBQQ161YcMvVY9A3RIBkED1eWx+jb7baIYk+n06N133mdOH7onWF4jTidcafpvyor10QUKvjsdfZ9DhJq9qCqJFbjBzznXScicdCSO1xkCdBBuM6+HRZ9CziIN51OC/dVhZktBc3PvEIsrw/PK8Ri4UidbMPH4nXjdDpvlRcQ0W6RTLyn1pZdfwiRU4Vq5dVTwTG5dLeusCjiYy3AfD6Pr7/+Ou7fvx+z2azkFZjTWPQtwAU6Ho9jsVhEv98vKvL4gtYZcFyvjio7XSKaRY/OgJeI1pr3bPZdtvSWxgOAWlw8Z1Za04IseB3GZAU2OB63B0U2HBTlfD1nADg+MhwOYz6fx8OHD+Obb76Ji4uLGI/HtvYtsOgbwhFnLgHlqHJEXteuU1G5Q+A6dhU6Hlz2WiX8LAWYBfwArL1aeM7pa9qOrb+mJCFcndbLx6sq+a2y9LoveBKTySTOz8/j/v37cX5+HqPRyJa+BRZ9CyD6iI+VeVWiqgu+1XUIbLV5DXn2IODOZ+69HkPJrD5b9Ezk7AngmV17rfzLIvbZ76E1Adl0YN4XdzI8w9Dj+nb0TgR6HBoV1KLr71f3t3YOVam3TCB10fu6R13bIpovh519B89ZZ3Hqt+P9NXnwMTlwWBUwNBERkf4oFv3fwaemi+q2a9JpVL2uS9mdEvynvt8k2t+UNpkDvLbYa7Hov3SadiJt8/Bt+JzCrSILIn7O/ZsCi96YjpGK3tEPYzqGRW9Mx7DojekYFr0xHcOiN6ZjWPTGdAyL3piOYdEb0zEsemM6hkVvTMew6I3pGBa9MR3DojemY1j0xnQMi96YjmHRG9MxLHpjOoZFb0zHsOiN6RgWvTEdw6I3pmNY9MZ0DIvemI5h0RvTMSx6YzqGRW9Mx7DojekYFr0xHcOiN6ZjWPTGdAyL3piOYdEb0zEsemM6hkVvTMew6I3pGBa9MR3DojemY1j0xnQMi96YjmHRG9MxLHpjOoZFb0zHsOiN6RgWvTEdw6I3pmNY9MZ0DIvemI5h0RvTMSx6YzqGRW9Mx7DojekYFr0xHcOiN6ZjWPTGdIzBic97P0srjDE/G7b0xnQMi96YjmHRG9MxLHpjOoZFb0zHsOiN6Rj/DzU3Ky4oi7HMAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 25\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 26\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "current beta: 32\n", - "Current iteration: 27\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 28\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 29\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO2duZIj2dGlHYlEYkdiycyu6u5i9cLNKAw1qr/wK7RRR+ELjI02yhjfYdR5hRFHG5E0o/RLNKMwrdC6yaKxyK7uWrJywb7lMkLZuXnC80YAkbWy43xmMGQBgUAAhXPdr7tfv6Xr62sTQhSHnfd9AUKId4tEL0TBkOiFKBgSvRAFQ6IXomDsbnheoX0h/nUpxR6UpReiYEj0QhQMiV6IgiHRC1EwJHohCoZEL0TBkOiFKBgSvRAFQ6IXomBI9EIUDIleiIIh0QtRMCR6IQqGRC9EwZDohSgYEr0QBUOiF6JgSPRCFAyJXoiCIdEL8Qb5v//vO/vP/+s/7L/+7z/Z6XT1vi8nyqbGmEKILTkeL+1//J+v7OLq2v78dGSD5tf2P//Lf3rfl3ULWXoh3hCL9aVdXN00kB4vLt7j1aQj0QvxhnjQb9h/+7cvrFQyu9ep2X//95+870uKUtqwa6363guRk9XFle3tfhD2NNr3XqIX4oeLNrsQQkj0QhQOiV6IgiHRC1EwJHohCoZEL0TBkOiFKBgSvRAFQ6IXomBI9EIUDIleiIIh0QtRMCR6IQqGRC9EwZDohSgYEr0QBUOiF6JgSPRCFAyJXoiCIdELUTAkeiEKhkQvRMGQ6IUoGBK9EAVDoheiYEj0QhQMiV6IgiHRC1Ewdt/3BYjNbNhkNJVSKbp/4Rt/n20olUrR8+e9RvH6aNdaIX64aNdaIYTc+/eC967w76z7bZ9LO24T7Gbj75jrnXZc1ms8fE3+dbFzpr23pgZ3Q6J/TTaJKiZwvl1dXdnV1ZVdXl7a5eWlXVxc2MXFha3X68S9v+FYfs319bVdXl7a1dXVrfdJux4vslKpZDs7O4m/+Tj/XLlctt3d3XCPGx/nPytfQ7lcTry2UqmE8+GGc+3s7NjOzk54Hv+W+PMh0d8RLyzgrS6Owz1E6QW+Wq1ssViE23w+Dzd+fLFY2Gq1suVyGe7X63U4B87L78vXE4NFDBFBcDwI+PtKpWKVSsX29vasWq1avV63arVqe3t7QcR4bwxqPChBwHt7e1ar1axer1u9XrdarRbOg0EAAwyObTQa4f1wnWI7JPo74EWbZrkh6PV6HcS5XC7DLSby2Wxm8/ncptNpeHyxWITjIXbclsvlLY+AryFtKsGwtfcWFILyN1hbCL9arSbEGhM9rgnXBwvPom80GuFvPheOrdVq1ul07KOPPrJPPvnEBoOB1Wo1iT4HEn1OIOz1eh1EyBbMW+7ZbGbT6dSm06lNJhMbj8c2mUzC3/w8BgAMEKvVytbrdcKVx99eSDGvAtebB+/i47G0ex4kKpXKLbecvzfveeB1GDzgMUDssPQ41+7urlWrVTs4OLCf//znVi6XrdVqWbVafb3/1IIh0eeERQ/LDOGz2KfTqY3HYxuNRjYcDm04HNr5+bmNRiMbjUbhudlsZrPZLGHF2UV/H5+PxXlXfEwg6zg/V2e33k8z9vb27ODgwCqVin322We2Wq3s6upKc/scSPR3ABYd4p7P58HVns/nQdDn5+d2dnZmp6endn5+buPxOFh3CB1zdBb72yySeVfgM2DwiInfBw/5xtF5eDKlUsmurq7C94fv7Ifwfb1LJPo7cH19bRcXF7ZcLm02m9lkMglz8slkYsPh0M7Ozuzk5CQIfjQahQGC3Xe44uVy2cxeiSOWeotZ3rQf+5sSwbaW00f8cePIuz+fjw3Ana9WqyFOgO/EzMLUZmdnxxqNhu3t7SmAd0ck+pxAkJeXl7ZarWw2m4V5Oiw5BH92dmZnZ2c2HA4TLvw2ATf/Y2YB8LUwGBj4ta8zAMQE5S02CxrPcUrNp+/YmnM0ngN5GABwvouLC1utVuE763a71u/3rV6vS/h3QKK/A9fX12FOPx6PE3N179LDwsONX6/Xiby8T/FlBeBixSr8mM+pxwpp0tKL/jj/2qwsAFt2zrVz2s0PAuVyOUT86/W6tVota7VaIW1XqVTC+yJzsV6vzcys3W7bxx9/bJ1OxyqViubzOZHo78DV1ZWtViubTCZ2dnZmL1++DBb9/Pw83MbjcULwPmUVq6RLq2zzAudiGfybLaq3tlwo46/j8vIynNfPq3HP2YJYkBEpOoi42Wxas9kMeXcfnOPcPo7F8UjTYQ7PmRIzs0ajYffv37f9/f0wOIjtkehzgh//crm00WhkL1++tOfPn9vp6WmI0nPAzkfkY0L3bEqNQdTsJuN5zIeRO+f5MYsX0xN/XRxFx3uYWRAfXG14LAiwIeXWarWs3W5bp9OxTqcTxAzhY3BAag6WHXn5Wq2WeF/ETxDsvL6+tr29Pet0OtZut8PgILZHos8Bz+fn87mdnZ3Z8+fP7dmzZ8GVn0wmIe+OVB5y7FlCN7tdw85Ch1g4fw3h8G1vby8ICFazWq0GIUFESDFygRGX1kL0uB4cx8VFy+UyfB7MzVutVhA8RI/rgaXHFADXhs+EQQGfGd85f4co6kFVHgqAxPboG8sJRDObzYJr//Lly2DhuYIOwvJFKYwXOpfAIi8NgSDQxe5ws9kMjzUajVCeymWq7C7zZ/ADkpklvAf8DeGhohCVgghKmlmw3s1m01qtljUaDWu1WrcsvB9UcOOiHj+VwTSEA5UYADWfz49EnxMv+uPjYzs5OQnls7CAbEFjFXKx+Tn/8GH5eI4M67m/vx/+brfbQWQQPubRtVrtlnuPa2Ah8fX5GnvAngGEj4g6qus4Eh+bx8dq+NPy8z4D4b0kDB4SfH4k+hxwNd5sNguR+vF4HMTu58m8MMfDAmDLB+sMq7m/v2+9Xs96vZ71+33r9XrW7XYTc2ZYddzYlY6tRvOr8Fj03vvgaQ2vKWAvIRa992LPuvmCHLw3rpWv2wcxY/9PIr3OQqLPSSw/P5vNQrCJU3GbFrfEClTYsu/v71u327XBYGCDwcAODg6C6Pf390OKCwtdYmLzYspK3flrZPyiolgWIquyLhacjH0XsfeODQRZ1yrrn41EnwP84FerVVgJN5lMbLlcJha7xKrn/A+Xo/AITNVqNWs2m9Zut63b7Vqv17PDw0M7ODgIwoeFZ8HDhec5M7+Hf/9tSCvw8UuG/eCWJuA0ccYGgTzXG6sxENlI9DmBpfcr4pBTjll4/2NmCw93vl6vW7vdDq48LDtucOnb7XZqRDytdn2T8GNxhtj1w7Xme369P/6uIswjeJ5+cE4fdRFFHgju378ffVyiz0Esio15LZfJsjBi7igH7CD4TqeTsO6w8HDnEbTjqLxfiRabO+M9s9hG7P64LNFnfX+xx+4iTD/d4DjLs2fP7Pj42JbLZcLbKdpc/ze/+U30cYk+J7D0HKFn0XPU268w4zkvovOIuvd6PTs4OAhih+ARrefqtm3Enib4uwjMu/qxc25a/BMrM95mTu//zedBKfRoNLLT01M7OTmxp0+f2uPHj+3777+32WyWSDsWDYn+DQGrgltsPguRc0oJjyPCjeqzdrsd3Hm28BysQzcZ7iKTFvTyeJFuKg56E8RiABwH4JqFWPTeryHwoBR4NpvZ06dP7S9/+Yt9/fXX9s9//tOePn1qx8fHNhwOQw3BpmkNSAtgxgYePj7NW/kQzh9Dos8BR659hB5fOFt8n5vmKD0KaBCd94LvdDqh2IYFn1WM4ufaMbc264eRdVxeFz4t2s+98nyaMBbx91MICH4+n9vJyYl9/fXX9sc//tH+9Kc/2d///nc7Ozuz1WoVzltEC78JiT4nXvRspSB4XujCNfHIYSMth5Rcv9+3o6MjGwwGwaXnxSex4hqIicW5s7OTeCzLioC0qHra/Dv275jQOZPh+wVyGzBukuktvj8PC/7ly5f2j3/8w/785z/bV199Zd98840Nh8PM6xWvkOjvQMy68xybu8RyOo1r4xuNhnU6nVBwMxgMgoX3q82431wsIp2WMuNrTCPP/Dz2fuzt+LQli53Ld7l6ETERf+04j+8NuF6vbTwe23fffWd//etf7dGjR/bs2TMbjUaZ1yxukOjvgE+7XVxcBFGzJUfuHY+jWg7PI0jX7XZv5d/9/N3sZnoBy8hdZfHYNsU4/Dn832m58iwr7+frXuxobzUej204HIYegWgsAqsfmw5whSPup9OpHR8f27fffmsvXrywxWIRrosX6og4En1O4LbDkvviGuTbkU/HnBxRd0TtYe2xKg3Hc826ry3nIBhcYWQOOJIfC4Rl5dR9FN2/Nu0caW481+dD7Ofn53Z6ehpu6Dfglx/7TT84Q8Lr+bnPIPM+mon+qyHR5wBC81bbzKzVaoVFMb423ltu3+udBwffaQaw9YPYfM7fp/DMkgL1C39iab400WdF5L1lR4NQ9AuE4I+Pj+309DQ0HMGqRN6ww7f75nLfrHUMYnsk+pxwBR0stZkFFx3pt36/b91uN1hvv/CFe71jCgAPgpeYxgJZEIKZJdKAaaJHUVFsW6lYyizLQ2DBs1XmKsXpdBpaf6NPIHoGwsJPJpNERaNfpJTWO1C8PhJ9DjCHR7MIzMd3dnYSZbNHR0chCg8rzxV7HPWH0HFLWxEHEcQaX/j95Pj1Pk0WS5f5yDm/r5+z+7Sld+XR79+3DsNc3ncE5kHMvxeuD9ci3gwSfQ4gMATh+v2+jcdj293dDdV0h4eHdnR0ZN1uN+y+wk0eYyvT/BJUhoUAsXPKyxf9sOj969iF5lZX26TKfE893twDEXne4AMtw7CbD0fssQ6fOwK/zq48Ih8SfU5g6ff39+3o6MjW67Xt7u7aYDCwo6MjOzw8tH6/H+rkuX+7d4lj1jY2F/eWHv3iuIFFmuj5NX7u7K0ppwV9YM5H0HEepOF46y4Wud9/L2uuzp9bvD0k+hzA0lerVet0OnZ0dGTX19e2u7sb5vJY/tpoNBK96cySG1+Wy+Wo8Hygil/jt86CcNjFZ9HDykPwvtEHW3uAgYJ7zeOet8+Gt4GgHUfTuYMQrtkXNXGKT4J/t0j0OYBF3tvbs3a7bYeHh8Etxyo5LI5BJN4H5LwLj8IUX2GXFcTj2n8E9Fj0PIBwM0t2r7mbLY7F+3HlHI7HikJfVceWnC162oYePhAIJPh3h0SfE8zBG42G9Xq9YMXR2so3o2RXm4Nr7M5DuHzPoufgHQsea8bNLOTssfUTzsPzbt8DwKfBYP3Zm8DxXtAQPQ8APBBl9fd/12k31eAnkehzAlcaK+TMXv2YkbPnfDyvhuNSVT935zp+s+QWVjyHjgmNg3nsTeC9OAbAbj5nANij4Lm6v+F1mB7g/XlQiqXbvOjTvte3JUwJPkmm6PVlvcIH15Bqq9VqwaKlNaFMK2WN5d0h/IuLi0QgDi46u9AckNsket6kwle6sTX2DUJwg5fAA44P7MWsuy/owffBKUv2apSeezfI0ufEV8Oh9p5rvvHDx4+aX+dLTdkljgX1fC6c59A8p08TvRd4WvTcL26Jdb3NEnwsMMekrfzDuoGs8tltSoLF9mSKftMKraLhI+wscETkce/TYAiqcTSdBRyrPoul3HhPe1+gc319HaYVZrdFzx5FWmmrn3fHagu2nZenLdvlz8e1AngsdnysfiGtYm9nZydsgslrEcQrZOm3wOfJ2eWNNcbEsfjRmd0IkOfLfjccb+18+owDahyI47r73d3dREaA595p7re3tFyw45tt+uc56+BXuLEXwuf2x2wzeMSqBTn9h7+r1Wqojux0Olar1cKAKK/gFZmif/To0bu6jg8Cv4TVzBJzdQgXy0Unk4nN5/Mgel5Eg0o8tro8X+biFbb0sHw8HUhrQOFjDMj9x4pz0txxPgdey1tP8RQG6wUAt6PCgIKBAF5H1qo9fNcxV90vAvJtvfF9V6vVsFipUqlYo9EIlZG9Xk+ij5Ap+j/84Q9v1cX387v3dX4/l4a4d3Z2EnuywWJdXl7eioSXSqWwlh4da7HXGs6JNNh8Pg+3WM6cryu21BSPmd106YEgcd0YpLy153m3F4Iv6a1UKrdcaLwflvRynADXnCbetO4//lr4NZz25MGoXq9bt9u1e/fu2YMHD+zevXuhpyCWNtfr9cTGneIVmaL/3e9+966u44MBFnK9XtvOzk7YaSbWugo/WggNEX0WPSw9BopYCoyLVNJcWC7dZXGwRea19bFgIM/rYxF2iGN3dzfh7rP156wBTxnwPv41vm0YR+19Lb8fLHyPAPxdq9Ws1+vZgwcP7Mc//rH95Cc/sYcPH1qv17NGoxG+97TS5qJTyvoiPv3008J9S+wWm1ki/w73kde+83yVm2n45/16c79ENtbK2gfRvBDTdn/Fc2bJbIJvRuHPB/h4X4bLy2B9nh/fH3se3DYsViLsMwSx8/D3Ui6Xrdls2scff2w/+9nP7Kc//an96Ec/sqOjI2s2mwraJYm6uZmiL5VKhRN9FpVKJTS9gPuIFXRcosu98WA9uXyWBYfXxfL8PoLOlpJf42++AYf3GGJRb+9+43WxVF9WXICbhPAutmkxDgyEKB6KfTe4FrxHp9Oxhw8f2i9+8Qv78ssv7eDgIOxVL9EniIpe0fsc8I90Pp+H4JGfg7KAzZLRf567Q7zcKRdiZjitFXuNFz2uI22q4C0zH8cWNpZeS5uDs3XnPoC4QfQ+m+EXA/HSX1wj/o1AY6vVCo1KMPXS3P02afEsif4OXF5e2nw+v5WTh7X0uWGf9+Zj2Q3G37F19TyooB4A6TkE3HgFH+IMWcLFeSHY6+vrWx4EPl9sgw0eiPy+fOgsFOvbb3azehAW3hcd+S64GBDMbtY5cEeiTVkCcYOKc3ICi8lVd/yDS2uE4XPwPuoOi71arRJW2levQexpBTQQIA88fr4eA8LG+3ATT95Gi6cf/Bl83z+I3rv2sWXGvC4Af3P5MBcyXV5eJrb38h6J2Ixq7+9ALLcMq4daeH887jktCMvN7j+sd8yiwjOI5ZxxDkTeOQiG9/LXgnPjnl1+7MTDQUm2/l7wvFUX33ijTR4Q+TPzgiIWPe7n87nt7e0F74o9I55aie2Qe/8awOr7kts00fPf8ApQ4OLPCavL5/bRdtQH+PPwwOBd89gAFJt6IF4AIWO5sN88E4KHZ8BdgmNegn9PuPAc6fcDAHsIq9UqOoiI7ZHoXwNvbb0o+d+xIhhYZASoIGIcz4JHhRvm6ngN8vOw1F4EOJYj4bhWnJcHA7wG0wSIEWLm4KFPF7LoeWoQi3PwNXBKLlbyiywCUoRp/QTFdkj0bxDvvvPj/jhfsopjYtMDrn7zqTw/r/fTDBa1n8/zNcRq730VHOb67ObH0oW+FXdarIMHPvZOsJ6gUqkEkfN0QoJ/PZTU/EDxc3oh3hSy9G8QFie79959ZsvnA1GxRSpclONf460yR9b5vGnufew59h64KAcFRrHjcJ2YbrB3whadiZXi+vfyVYRc4y/uhkT/GsTEyf/mUtjYa33qy+fF/bm56Cbm8voa9djKNFwLn99Hv30ZLtYhXF9fh5qA2Co8Lv4B+HcskMeCj/X/S0vl4Rol/Lsh0b8GbCGzUkexiDkX28TmxVkpO67cQxSb59g8cKQtOvGpRn8MrxUws2B5N6Xslsul1et1W6/XuVJ2nKaLpeywOhElwLiX8POj4pyccEmst14+YMVBNx/Z5yAZF+dARLEBhC0rp8M4h36X4hwfXedqObObFYK+OIeDfLHiHNz4Wln0vB6By3Ex2HDXIF+c43fq4QFVZKPinDvAFveuZbh+0QyX4cL1Ztgz4Cg60mixwpk8Zbh+YFiv18Hic4wAr+FritXdowQX1XOxjT/8ykPfZhuiZquP16JRp6x9fuTe34FyuZwoBWX3GKL1Pe/xI09blcZC9m4wYIH6BTf+fWMLZjDn9kFGFjFfJxf8ZC244c+yacENBrSsNmDededAXqn0qltwt9sNG3DgWB8wLTppno9EnwNeT8971bHoUaACdxc/RN/9hvvH8WDhq+e8uGJutc+d87SDo/AcWfc/CO92c7Sco+tZjTjgEeCauBQ3trSWF9LwXnfeC8F14ftaLpfWbDbt9PTUer1e+D/Q0trtyBT9p59++q6u44OCy2u5pNRbMDTJgJXhea1vosEttnz3GTOLuuR+Mc02TTQ4ug9YuBhQYufz78dNNHgBDPfbS5su8Dwf93jMLLngJq2JBguZ4yiz2czK5XJi0N3ZebXkVmwmU/S/+tWv3tV1fBCwQCGQVqsV9pmHBYc1xuCAHyqsG7u0PIflHnloiBnree+tLgskZll9jIFde/YyYtbdu8N4P8yr/Vw7rV1WbBDhuAWnD3FdHMHP0y5rNBolAn74TgeDQRiMVZuf3CmJyRT9r3/967dyMR8yPK8tlUqhMWa1Wk3MRzn4xI0xfdQaP1hYeggeO7zyvnIsZhaF35WGo9YsjFidO3sTZpawzL5UGI/jfXhJK/f045ZZLFqz29kBXzzkpy5pTTl8mtJPa8bjsQ2HQzs5ObHvvvvO7t27Z51OJwzS7XY7xFzgxRSNX/7yl9HHM9tl/e1vfyvcN8WBNzNLuMwQxHK5DHuxv24LbFhRWHGG3WzOXfPiE7NkKs/P52NpMY4rxKrveGMNv/FlTPQ89zdL74gbg4+NvYbF7wcPBA0RVN3b27NGo2GDwSB0x63X66nLkX/o/Pa3v83fI8/MivUtpcBuKDarmEwmNhqNbDqdhig3ryePdYrZtNlFmug50MW5bDzvq+MgCt+dJpYS4892fX19a8datOr2e9uzlfcNMmOLe9ICbNuk3Hz9A/5P+Pr5/6DX69nh4WHhN7v4/e9/rx55d8XPL80sWHz86Hd2doKlx9JSPh4/Uk6pQaTVavWWpedgG+8FD2se29aKRW92e8tr7onPbjZExXXtPoDI4vTP4zEePDw8xQAxK+9f62sD+LXsXYDFYmHPnz+38/PzEFPhFKVQcc5W+Jy5dz05VeWXnfJrfVQe50O3HD6GpxN7e3u2Wq1uLVWFtfc1AjHRo3ceV9Ph/Xkdfuyzxda4Z7nsIPb74cf4O8haisz/B1nHgKurq+ChiNvI0ueELSTnrf2KNRaX2c0PnNNZsFRpxTKwnljwwufBAMENMnz7a5zz6uoq4WFwjz3+XDi/rwFADABbWq1Wq4QI4Vpz4Y8vlvFi58+X9jwjA/TmUO19DvB9wFVGQA4CqlQqUVc45qKyUM1u0ive9eYBxS9B5eOzRM8eg3fB2VXPalCBnDkGBN/Bh/e1w2DEwueIPd7XC17CfjfI0ucEQlwsFiFtZPaqLTOX0vplrVnpKV7m6lfFecHD4nJRD45Lc+/xNw9IsOR+To5uu7wmAL3rOE+PmILP3/OUA99V7Dvc5jHxdpDocwCxXlxc2Gw2s7OzMzs5ObFyuRzSdr44hgt5OLUVWx3GBShsIc1uXHSIkPPibOl9HIEHAbObQSa2WIVTfAhUprWm5hQgCo18dgDeAD63+DCQ6HOCaPp4PLbj42N7/vy5lctlWy6XQaQscsylecDwNewcB4itjvOVbRA9BOUDiZyy4wAejuFFLcB7BNzUgnP7eC2nAReLhU2n0xA8Q7qPBwiu++fpBAaDWHWgeDtI9DmAJVwulzYcDu358+f25MkTq1QqIX/Nx/mda7kAhlN07M77yLgP/CFuYGbhHGzlY8U56ExbrVaj+9tzwNHsRvg8OPl7nAdbfE0mE5vNZjaZTGwymYRBIG3nGrxPWuBPvD0k+pwggDcajez4+NiePXuWyJvzIhWU77K194E+BMhiK9ZwzyWo6BCLFJ2ZZYqey3i5bp6FxnEEtvicC/eVd75UlwU/HA5D8RIe8xWIpVIpsXRXwn93SPQ5gHs+n89tNBrZ6empHR8fh+g1C2s+n1un00nsl87nMbNE+gwueqw4hd17WPlyuXzLtfcVeWZJd90vkPHn97l3Djr6ijtMD7iCbzqd2mw2s9FoZMPh0IbDoZ2dndn5+bkNh0Mbj8ehdBlVhX4tAb+H/+7Fm0GizwFH7mHRzs/PzSy5CysE0O12rdls3lqdx1YbVXxc5MMFN4Bfw3l934jDp93SqutAzNKnFcLEBgCu7Yc7P51ObTwe2/n5uZ2fn9vp6amdnp6GAQDly/P5PLGOnpfqZlX3iddDos8JL7iBS2tmwV1l0Q+Hw7C7Kvex491gGo1GIpiHLIBZsrsupgcQN+byXNIbE71ZvE0WiFXgpdVnxMTPc3/+/PhuRqORnZ+f28nJib18+TKIH1OA6XR6ayEPMgu+YYefAom7IdHnAD9yroVfLBbBPef2TxA979yKBpFYmNNsNhMBwJjoeG7P6Td2y73gYwU2aQUw/j1jhUT+HPjbexGYPniXv9/vW7/ft4ODAzs5OQkWfzwe22w2Syzk4WChHwR4IEDwcLFYvNb/aRGR6HPiXVrOR2Ouu16vbTab2Xg8TrSBhvDROLLT6YRFO2a3l6Aiz+7r4HmKwKKPzc3ZzfdsEnpWvXua1WfLj+2qm82mdTod6/V6dnBwYKPRKAgeqT248r6egef9+K6n06m9ePHCnjx5Ys+fP08In8uVRRyJ/g7wD537sF9fX4fBAPN+7vvOLbeazWawcr4RpBcUCzpN7OzWx0SfRsyr2Obz++8CfyP/zjvZ4vO2223r9XpB7NzYEu/P1+ADkBhQx+OxPXnyxPr9vj169MiePn1qw+EwUdor0pHo74C3nhyE4lTW7u6uzefzUCLLDSPr9fot1zYWKKtWq4n3zHLp84o+7blNc3r+/Jxi4xQgl/p68bOX5AXP1YxmdisACdf+iy++sIcPH9r9+/ftq6++sm+++SYEVUU2En1OWHC+ph55Z7TP8vX3HMSr1+uhfJU70PgfeKyAhl19L3h/jGdbax5z7bMGidgAwOLnSsJNacNYIBL38KY+/fRTe/DggR0eHlq1WrVSqWSPHz+2s7OzsCuPcv5xJPoccI07z7XNbn6Y/EPGslf8G8LnWnXf+y4mCsvRTEMAAAijSURBVH7/WC6fn+f38o9v8/k2PbdJRP592fqjLDn2ubzgs64FA2Kr1QpTpqOjI/v222/t2bNn9uLFCzs/Pw+D77bXXhQk+pxA9Fj44i0Sr2Hn15jdDAQQgA9QceSa57Exi5glfmZTcO5tkSZ+WH72HNJShmkZBHwPjUbDPvnkE2u32/b555/bycmJPX361B4/fmzff/+9zWaz8H1J8DdI9Dkpl8uJDS1g9RmfD+cVZmytWeBcMsu17T7I511hFkgsHefd8jw//jQLGQs4bnuutClHnjgEPhdSoM1m0w4ODmw+n9tnn31mn3/+ub18+dIWi0Vqf4AiI9HnAILlKLzvg292ew7qz4HKPu5gg8c4Sh2rl/dr8vnm21/Hrt/D15eVoot9rqzcf+x8WTGGPBkHfwyKlqrVahgAVqtVop+AuEGizwkCUuh6W6vVQvGIWbIvHfB/w1pzmync87JWpLWwUs2vVru4uAi93bH6zveJjwXZ0kgTb2wwizUEwWtiAs4TVMwKGsbAZ8X/TaPR2Pq1RUSizwF+XIi+N5vNUFUHoWL+6JtGeEFhcECqb7FYJKrO/Fr12WwW7mezWdjYARV/WD7rV9ttmgZkFe3462ePxJfG8vezTQqRB6NY0HHbKYMseX4k+pzAvccmlq1WK5Scmt2O4sd+vF50fokp97mfz+c2nU5tOp3aaDSys7MzGwwGtr+/nxA+bwntB4BYaW5semCW3umWpx9+Tzte7ed3040VDcVuXEnnB4jYIMVz+03TkqKSNiBK9DnAjxMuZLfbtV6vF8pw8UNEFx1uFwX8DxiNJHiFGc/tsXgFC1c6nY4dHx9bu922/f19a7Va1mq1gtfht4eG+H0Pfr8+nlfteSuN47mTDm/pxa28sIgIxTi8/bbPxcdusUEnNo3AZ4nFL2T9s5Hoc4Jce6PRCDupQNy+mqxUKgWXP6s8FJbSu828DdZkMrHxeBy2ysYeexA6LD7f2PL7tl0+VQhB+Yo/Djz6DSMherNXvfuxpoAHIUw9sCSYlwDH9grw9Q/4fngqgfNgK3CJPB8SfU5Y9P1+346OjkIk3u8Tv1wuw7zdLNvt5OcgRPSQW61Wtru7Gxbx8Go9iJr/5iCj32LLC54zA2aWECY32eTyYg4qYsBCcLPZbIapB6Y/vOMvgo648XX7TsKArxdZCrzXNsU8IolEnwP8uMrlstXrdet2u3Z4eBhEzz9eH0hjF94snuOGFYZ15fkrqssWi0W4BoiDN7JgQeFaYGVRH+DTgr7c13fhMUs2CeFW12x5kTJrtVq3Yg4QNy8+wqCE6Qg8E6598O+L/Hyn0wmDja+TENlI9DmB4Gq1mnU6HTs4OAg/RP7xwuJPp9MgeFhudlXT8vt8b3YzBViv14lridXjs3B5BR6fi6+DRY+BhNN+eA0H82J9/uDi12q1WwFGeBsQKe/wi+W3mKpgW/BSqRSmOUhbmpk1Gg37+OOPg7WHmy+2Q6K/A0jbtVot6/V6ZmYJ0fMPHGJAvT0sJFfiZQmfSfthpxXBbBJC7L3yvhbHYqBYLBZWqVRsOBwmNvKEt8HTB+4tAA+BBwl8L8iOrFYrMzPrdDp2cXFh/X7fBoOBovU5kehzgh/47u6u1et1a7fboSgGc1RYM29t8TdcdQT4Yr3ftylx9cfEgoWvI4iY8H20nAcJ7pKLAYAbdfqoPVc3spcE0fvGJBB9t9u1RqNhX3zxRRhEVW67PRL9HYBVQ3qKy0C5Qo6DbMPh0KbTaWIjCA6EsfhjKao8gn6bli+2Uw1PA3Z2dkKsADvp8BSEX8PTENQW+IETn4e/n+Vyaffu3bPpdKrmmXdAor8D+LGiSIer9GCtkDZDx5h2u22j0chGo1GoqsMA4HPzH8qPeNvrgCg9HFVPy6dzCS0PALxFFxfh4PnVahVd2yA2I9HfAcxLa7VaKEyp1+shqt1ut0ML7MFgEFploxkkxI+NILAdFHfR8dtO/avhK+2y4GIhTHk4SMhBRQy0vJ+A3Pp8SPQ54aq8er0e0neIaMeKWFBGiwIbiB0toNEDHu2zYhtB4oZ5s+9Ay4tgYv328nw+zgLgsbR7jlVwqi8mRt/CGq+HmLnewLv5XAswGAzsyy+/tH6/H+b+Ev72SPQ5YdGXSqWw5zt+zL4jLAehsIgGN15FB2sP8WOw4GP49fibd5DFgMNz4JgLHIvWm93eNTet2SYHJnkuzkG4tDk5p/u4sg5TIr7n6D+nBDudjn300Ud279690CpLbI9Efwc4aOVFxRaWBwI/IPDiFb/tMw8CsP5w/73o/RbSvjGHDwqmpQJ9jj+rJp7z8igCQhDTFyjhPf3mFXhfFr0v0uEqPVwH3ofToxJ9Pkob3D9FSTawyX2OWVlOsfFSVe/K82o2lMtmtdZKW/K6ydVPW/UWC8TFUm++ft7vp8ef1XcV4mkB1zXElgezh5G1sYcIRL8Yif49kOVue0/BP5Z2n3V82vunFfXw3zFBpR0Xezztc8bOmRY7yHNtIoFEL0TBiIp+cz5FCPGDQoG8fwHuUoByF9f3TRe6+Gvw55d7/n6Qey/EDxe590IIiV6IwiHRC1EwJHohCoZEL0TBkOiFKBgSvRAFQ6IXomBI9EIUDIleiIIh0QtRMCR6IQqGRC9EwZDohSgYEr0QBUOiF6JgSPRCFAyJXoiCIdELUTAkeiEKhkQvRMGQ6IUoGBK9EAVDoheiYEj0QhQMiV6IgiHRC1EwJHohCoZEL0TBkOiFKBgSvRAFQ6IXomBI9EIUDIleiIIh0QtRMCR6IQqGRC9EwZDohSgYEr0QBUOiF6JgSPRCFAyJXoiCIdELUTAkeiEKhkQvRMGQ6IUoGBK9EAVDoheiYEj0QhQMiV6IgiHRC1EwJHohCoZEL0TB2N3wfOmdXIUQ4p0hSy9EwZDohSgYEr0QBUOiF6JgSPRCFAyJXoiC8f8Bf9DJgMO2VzwAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 30\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 31\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO2dOZNj2fHdE0Bh32ubnp5uDrtJDb0/Pbr/CMphyJXDL6CQJ0dfQq6+gkx5MskIWrIYQUPjTLAZZHBITu+1YF+rUDI6zu3zsu4D8Kq3mXnnF/ECVSgA7wGFczNvZt68hZubGxNC5Ifip74AIcTHRaIXImdI9ELkDIleiJwh0QuRMw52/F2hfSF+uBRid8rSC5EzJHohcoZEL0TOkOiFyBkSvRA5Q6IXImdI9ELkDIleiJwh0QuRMyR6IXKGRC9EzpDohcgZEr0QOUOiFyJnSPRC5AyJXoicIdELkTMkeiFyhkQvRM6Q6IV4j/yf//fU/tP//L/2X/7Xn+xiuvrUlxNlV2NMIcSevB4v7b//76/tanNj3zwf2VHzz/Y//vO/ferLuoUsvRDvicX62q42bxtIjxdXn/Bq0pHohXhPPDxs2H/998dWKJjd69Tsv/3H//CpLylKYceutep7L0RGVlcbqxx8L+xptO+9RC/EjxdtdiGEkOiFyB0SvRA5Q6IXImdI9ELkDIleiJwh0QuRMyR6IXKGRC9EzpDohcgZEr0QOUOiFyJnSPRC5AyJXoicIdELkTMkeiFyhkQvRM6Q6IXIGRK9EDlDohciZ0j0QuQMiV6InCHRC5EzJHohcoZEL0TOkOiFyBkSvRA5Q6IXImccfOoLELvZscloKoVCdP/C936efSgUCtHXz3qN4t3RrrVC/HjRrrVCCLn3H52YZ4X7tt3u+7e0x+2C3Wz8HHO90x637Tkevib/vNhrpp1bU4O7IdG/I7tE5f8OYeLYbDa22Wzs+vrarq+v7erqyq6urmy9Xtt6vU78zn/Hz3zfzc2NXV9f22azuXWetOvxIisUClYsFhO/s8D4b8Vi0Uqlkh0cHIRbHPw4vE++BcViMfG8crkcXg8HXqtYLIbH4378TeyPRH9HvLCAt7b8ZeeDxbparWy1WtlyubTFYmGLxcLm83k4cB8OPBa36/XaVqtVYmCIiYyvc7PZWLH4ZnbHIoaIIDg/CPBjyuWylctlq1QqVq1WrV6vW7VatUqlEkSM82JQ40EJAq5UKlar1axer1u9XrdarRZeB4MABhg8ttFohPPhOsV+SPR3wIuWxYWfYYVhsSHO5XIZDhY4bmezmc3nc5tOp4m/4fEQOw8U8ARwPTywxDwND1t7b0EhKH/A2kL41Wo1IVb8HZYeYsftZrMJ3gGLvtFohJ/9ax0cHFitVrNOp2OfffaZffHFF3Z0dGS1Wk2iz4BEnxGIer1eBxFCaLBkEPdisbDZbGaz2cwmk0niGI/HNplMbDab2XQ6TYgcVttbb54CeCGludBZ03Bs0fl3/OxveZAol8u33HL+3Py18fMrlUrwGCB2WHo8plQqWa1Ws+PjY/vFL35hpVLJWq2WVavVd/un5gyJPiMselhltrbr9TpY6tFoZOPx2IbDYTgGg4GNx+NwYFBgK84u+qd4f3iP74IfPLY9zs/V2a3304xKpWLHx8dWLpft0aNHtlqtwlRF1n4/JPo7APd9uVzaZDIJgl0ulzafz20ymdhgMLDBYGCXl5d2eXlpw+EwCH06nYb5OrvrbMV/6OA9YPCIid8HD/ngICA8mUKhYNfX12GgXC6X0SmM2I5Efwdubm6C6KfTafgSQvDD4dAuLi7CAesOsUPo6/U6uLvs6sZSbzHLm/Zlf18i2NdypkX82UL71/OxAXbvEScolUrh8ZjaFItFazQaVqlUZN3viESfEQjy+vo6WPbRaBTm6qPRyC4vL+38/DwIfjgcBssOq+4j+WmpNMAC4GthMDDwc99lAIgJylvsWMqPU2o+fcfWnKPxHMjDAIBzcYbDzKzX69nh4aE1m01F7u+ARH8HMKefz+c2Ho+DsEejkQ2HQ7u8vAyCH41GYc7OgTkvdp/+26dO3QfWvEWNFdLEcvbbimXw87YsAFt2zrVz2o0DfhgUEPGv1+vWarWs1WqFtF25XA7nRVB0vV6bmVm73bb79+9bp9Oxcrksi58Rif4ObDYbW61WNplM7PLy0s7Ozuzy8jKIH/P5yWQSovKYs7N1Byz2tMq2tAq1WK7dW1sucEGQLu1a/Lyan4fncB0Argl5eYi42Wxas9kMeXcfnIMr32g0rNFoJB6PNF2hULiVKTEzazQa9vnnn1u32w2Dg9gfiT4jEM1isbDRaGRnZ2f28uXLhGWHu48cO6fdYiWznl2pMV88wwLHfBhFM2xpWbzX19fR4CFbYrjmZhYet1qtwi0X2eB8rVbL2u22dTod63Q6QcwQPgYHWHkuysF9fF7ET+De39zcWKVSsU6nY+12OwwOYn8k+gzwfH4+n9vl5aW9fPnSXr58GSL00+k0CB6pPIhsm9DNbufEvUuMQhYImXPa+BkHhIS/sTi4cIgLjLi0FqLn5yB4yQfeT7lcDm46BA/RQ9Cw9JgC4No4gAfBs+i5TgFFPajKQ9Wf2B99YhmB5YHoz87O7PXr1zYcDhPWHYL3FXueWCCMi1vYYiPQhaPVagVLyvfj4Ko2Lpbxtf4cW+AgG8+VuejIv8ebm5vg2jebTWu1WsFlZ3fdTzm45p6LevxUhoOe+KwwAGo+nx2JPiOYY06n0yD68/PzRKEOXOCY4P3c3extAI6/+GzJISBYz263a+1227rdbgiA8ZwYpay+jJWtp18LwNfF83ngS4p92pHLaXH4ebyPE/jcvE/7gdgaBwwcEnx2JPoM4IuHajxE6ieTScLlRbDL1+R7WABs+crlcsJqdrvdkKY6PDy0fr9v3W7XOp1OsKp+oQpb19hqNL8Kj0Xvpxk8rYF3gKkBF8746L0Xe9qRJva0jIPPVsT+TyK9zkKizwgsHtJ1KKXl4Nau+XusiMUvPGk2m0Hs/X7fTk5O7OjoyI6Ojqzf7ycED6sac6NZUDi3WTx1x9fn8cuBOfrvvYRtlttPZ2Kfx7Zr2fV72n3iLRJ9BvCFX61Wob5+Op0G6+7nnoy3YD61Bpe42Wxau92+Jfbj4+Ng5SF4nrP7xS58Dn/+fYgV+MSWDPvBLSbgtHPHhB97/LZrj9UYiO1I9BlBqgsr4rBklt3gbZaTBcHpq3q9Hubp/X4/CP34+NiOjo7s8PDQer2etdvtaEScg39p1j3NgseuM3b9LHou2El7vx9ahHwdfvUjvK48DwSff/559H6JPgOY12IdO6fkSqVSws3FFzJmtdgiQ/CdTueWdcdtr9cLwTuOyscEn8XS7vu3WPBxm+i3fX7vCz/dQJxlMBjYixcv7PXr17ZcLhPeTt7m+r/97W+j90v0GeHUFbex4i9XsVhMuPhcNQdLjDk4IvP9fj9Y9dPT0+DOI2LP7ryPiG9rb5XFVU7Du/qx19y1+GdbiXHanH5XbAGxldFoZBcXF3Z+fm7Pnz+3b7/91p49e2az2Sx8PnkTvJlE/96AVcEBfEQZC2RYfJyfRvVZu91OuPOnp6fBnUdKjoN13JEm5kl4vEh3FQe9L2JrCtLiAH5Bzq73hezIbDaz58+f25MnT+zJkyf2z3/+054/fx7qJlar1dY8/r4BTH+/93xij/m+vH4MiT4D+OLCwsdq5lnsHFBjwXOhTa/Xiwq+0+mEIhsWvE9TxdJZsS8NuGtQLKsL78XOBUF+sRELPiZ6H0BEcdT5+bn9+c9/tj/+8Y/2pz/9yf7+97/b5eVlWI23zQPJMxJ9RjhNxVVsELmZJZaVcmUd5+Dr9Xoi/+4Fj3p1uPO+EAUCKBQKiUYVHLzaZkVAWsorJhZ/Xyyqj1svdu4shIObZHorj2vwWREI/uzszP7xj3/YN998Y19//bU9efLEhsPh1usVb5Do74C38CxwbhYJN94vNYWV73Q61u/37fDwMBGw8+WrLHgEE/laEES8ublJjdxvIy1At+sz8LfbxM6dhbhrEAKh/lrYqvvW4OPx2J4+fWp/+ctf7G9/+5u9ePHCRqPRzmsWb5Do7wC7oljwwQLn1WNsrVFWi7+hpLbX61mv10sE7GLzdz8vxuITiL1UKmXuF7ctrbctFrBN7DwF4poGNBlB70AsO/ZWn5fvovKPVypOp1N7+fKlPX361F69emWLxSJcF5caizgSfUZ4bs5RdBZ6u90ONfGYk9dqtcTiGS6zxTJRXoLqXXofAOPAIA6kDn2Qb1tqzRfHbIue+/hBrEqPa/TRDRjNQdNaiEH4vPrPrwLkgQBBPDQnYT5FM9EfGhJ9BiA07udWq9XMzMKiF+Tb2XL7teSxklsO2HGnGbPbc2RebeaF71fH8fP3qaDbNjXwgwcsc0zs3BF4MBjY+fl54hgMBqG/YKw5KNf5+4VBsuLvhkSfEbjxWNXWbDatUCgkgnI+5Qb3nleXYe4P8WPNO5fTAnzR/bpyM0uI3i9w4edyvTzuY5GnLXphYoE6P29nVx5dhC4uLhLdhQaDwa1ViX4HnLTegeLdkegzgAh9rVYLbnm/37disWiHh4ehbPb09DSRdsN6dsDRaggdh18R5wXGkW//Or5PPJ7LbjE39MB78uky3O89g22BOlh3NAjltmE40GQEbrl3330+H9eBc4v3g0SfgULhTb085u1HR0c2mUysVCrZ8fGxnZyc2OnpqZ2cnFiv1wtReOTXWTCc7uPWVDGX2ltVXsfuX4Nfx9cV8OGtfdpgwysGfQdf787z7j3o88+7+sCyLxaL8HyeImyLPYj3h0SfEXSI6Xa7dnJyYsvl0g4ODhKih5VHFN43l4R4QawoxReksFXF/BcWMmbp8VwuG+YNL2PW3mcJ2OXmohpv4RGwg7i5ZRiE7suWY3N1ft/iwyHRZwDufbVatW63a6enp6FrDNfO93o9azQaYS7vc+xXV1ch2h5LhXnBx8QG8aIYx1t6s7flqn5HXB4w+L0BP8jABeeDu+hw7j22oQeuk5twcnpOgv+4SPQZQfS+3W7byclJsNKI2nM1HebyEJTPoRcKhVtuLUfmvcVlwXO028wSlp5Fz7ly7m0HIfoUV5pXwS3AIGSI2u+oi+2m+BzcajsWhZfgPx4SfQbg/h4cHFij0QhBPDMLjSph4WPbNftqM1hpFnvM0nux8c8QEoTq21bHrDHEGXOtY1V0ED2fn1th889+u2yuIIzl9j/W/02Dylsk+oywi99ut83sjeVCzj62xh3Pw2P93J0tIc/teU7urau39KjGgzdhZtH5PAvZp/DwO1vw2HNwi0HH77TrMwT7uO8fUpgSfJKtoteH9QYfXCsUCqHcFmkwFntarjttrp42v/aBOLjluGVLz260F31s0PArBbl8Nua28zlxXq4bYOu+j+CRMWBvR+m5j4MsfUZY+Aie4Xezt/NViG+fHLfvPc/n4k0mOBDH++Jhpd319XU0kIfDR+B9Go4LePzc3U8pfHBum+D582Fxm1niWrexqzpQ7M9W0e+7aCMvsLBZ3PjCrtdrOzg4CD3zzJILQDiwhsO72oALa/Ac7svHG01wgQ6f05e0xgpgfAyBb/k6/Fx8n3l52rJdvC679GlWfltJcFrFXrFYDJtg8m454g2y9HvgK+JgcSHCq6srKxQKiXQUXH7OmXsBz2azWzl3PNbMEufEczgVxktSDw4OEh4Gnu+tPAfuALvXGEBwv++9h/v5sTzw8OfFxITn3y9+9gLnMmF+HHsr+LlarYamJJ1Ox2q1WmLpsdgh+r/+9a8f6zq+F/jgmpklct8Q0WKxCAUo0+k0WHZE9bGkFvN8uN+YL8Na+9pzH0n3lW+cDuNNJzmIxyKNFdikWVIW1WazsXK5HJ5fqVQSAxlAgRFSjxhwcB3+HGlxjpggfcEQx0pwrdyQBJa90WjYycmJnZycWL/fl+gjbBX9H/7whw/q4sdG9U/x+t7FhECLxWJIxdVqtfCF5jbYi8UifPnxJUSbK944Eq495ua8uozLUdMq8TBgxATvu/NwkIzn6btcZ/95eaEUCgVbr9dWKpVCgZGPEcSe4z0DEJtiAO5GxJtn4P3W63Xr9Xp27949e/jwod27dy80IMFSZV8CLd6wVfS/+93vPtZ1fG+Aq7ter61YLIadZrixRcyS3tzchLp8tvYQoY/C85537KYDntP7arZYMBECRFyBBzA/pzd7IyoEAfFauD8mMsQM4HGkrYrjz9HvupvmorObDvxmIHg9pEsPDw/twYMH9vOf/9y++uor+/LLL63f7ycWOKWVNuedwrYP4sGDB7n7lDg/bmYh/4517r4pBgejeKks3E0WvV/4wivl/Fya5/V8AL/ZJVfk+f3dOb3Ggwi/51jtQKz6jgt0OIbhBcueB29k6ef9fA4elPB5+I0vS6WSNZtNu3//vn311VdB8Kenp9ZsNhW0SxJ1c7da+qdPn36YS/mBgj3Y4fLDfYRYuL01vugcVONoOrvSsa2azW5Hzs2SYkCg8Pr6TccceCIo8gFemLG0GR+AvQRfgx/zHvjauMkI2oRxYJNf16cg/evhmvEZt9tte/DggT169Mh+8pOf2NHRkVWr1ff5r/5Ro+h9BvwiE3bf8QWFhYNLC6vN0Wa27rxTbWyJbcydx+NQdovAG87B7jCIWWS+bu/Gc1Ugphl4/dgW3Dif93ZwpImeKwVZ+Pza8Ajw3lqtVqJRiebucdLiWRL9HcAmFwhmsWsMAfmqPLbYLDYIwbfJiv3DWPDlcjlE1vH6nCaEB+Atvg9a8mAVmyrE8uMx74MFD6EjtoF4iPd8OIXJsQ72KPA43G9mieCqHyRVW7IbFedkBF92zEG9QH1Oma0V4Mj0crm0SqVi6/X6Vikvw1Yegvf5baTTuBzXD0AsVJ8Sw2ACgfrts/A8nh7wdcGl94JnK+9jDT4dGVvVx6XAm80m8ZpZOv+KN6j2/g7EqthYBL4whR+LoB5ukUPmPHjMcvHcHfAAE4sD4LXZ1fcDFN+yted5OHfm9d12uWsPix7BTl5x6AdDX47Mc3u+RREUWmzhPLEIvdiN3Pt3ANaKRROrDfAW2SxedsrBKv4ie+uKCkDky2PiZzg95y0jex0xi89BSR9J99OCtOBdrPef2VuP5OrqKjw/Jnoe6DhFKbHfDYn+HfCe0LY6dF+wguIZCNLnzflxeD5EDqFxwMvnynkQiInDDypmyTQgC59Tbr5YhkXPHoIfLGLTDF5lx4MC/+zrIfg6lZ67GxL9eyStAtAPDhApPAN/8N8wEODLzxF1rqXn55nZrdffhR8gvKh9Zx72ELiff+xxfgDC+Xjag0GNaxKQmfD9CWTh3w0NlULkDFn690ia9WGrht9j7jdbWX5c2nO85eM5c8y6bsPXEvg19kiXwS3HkVZHgAPeSVrqz5+HD27QwcVA/vMU2ZDo34FY9Jt/B7EvKIsU4vVVeT6XXigUUl3nWK28D56l5exxC8FzRN1XFKYF8rgs1wcn4aZvC+TxoiIfycciJfyOa9zVeEPEkejfAW+J0wpEfMqOnwsRI+DFKTt+HR4YeLmvn0dzdJs9gVjKzswSwUSU8ELwuOZYlZ8XPoJ+y+XS6vV6yL/zVt2+xDgtZecj+EjZoXdBpVJJVDeKbKg4JyNcURernoulxdJWkOH5HB3fVZzjN8Hk3XNjTTnTqgP5vXABEQpm+He27v6aePDy69uxOAmRfI64e8Fz807fx4+r9eAdoK8ABzL1fd0PFefcgUKhkNoIE0KL1c/vU4bLde+eWDqNb9ljYBcfeHHwNXGWgKvlYl6LX5vPAxLy9OgpgEId9BaAp8BluH65MfcNxC3uN3szDeHe/fqeZkPu/R3Aajt8kSEsdnX9ijlu6QQweHj33uez/UDBwuelq34gSltww6+J+wuFQiKIB4HxtcfW5vsgHgsfFh+i5wU33EkoZuE50GdmQfzFYtGurq6s1+uFCj1ciwJ8SdI8H4k+AxB7s9kMS2tZ2L6gJWbZOBJudrsRBs/n2aqyuLggxnsJvlbe7Pb0AkUusaAbRIVr5nX4aUtruSAIrj4+A3bvefdeb+nZuuNaearE1YrL5dJarZadn59bv9+3SqUSgpwq2NnNVtE/ePDgY13H9wp2d7mJBlaQoa6cO9aYWcLK4cuOQQHi8fu74cscC96x6/0+mmiwVefX4qo+PCfWRMOvgPM72SAoyB6Pb6IRm0Lglt8jZwb4symVSjadTq1UKoXVe2Zmp6en1mq1PuC34sfDVtH/6le/+ljX8b0AQoFICoVC2Ic+rV0Wt7viQFZajzyknmL98Tx4/bR2WWxZWfwcT+AqPXbx8T6Bj6r7ABtc6SztsjiQGAtQcsrOxzw4RekHgPF4HAYg3g/g6Ogo+n/KKzy9Y7aK/je/+c0HuZjvMyzmQqEQ1m7Dat/c3CS+bHBNzd6KHvvSb2uMiQNfXp+C8imtmGtttl9jTJyfa/vZquM2Jng+0ATUW/oP1RjTzBKi56nQaDSy0WhkZ2dn9uzZM7t37551Op0wSLfb7dDSDEVEeeOXv/xl9P6tov/1r3/9QS7m+wzPpc3etsDG/dwCezwe23Q6DXNg7hjjW2Df3Nwk3GTeTBLzWbb4XvR+E0muTuPgHrvDHDyMWb1Y3b9vYeW3tsKAgOtiK+/jD/5zjVndNNH7wQKCZy/g4uLCvvvuO/vmm2/C591sNu3o6Ch0x0XcJY85/TTRb22MaWb5+pRSYAHCRR+PxzYcDm06ndpqtbJCoZCY83MaDa/BHXHZ2sf2i/fnZAGmbXYR26oaXglba55WxFbp4T3iOfP5PFE4w4L30XwfHwCxAFtsWsMBS5BW+8BxCgy81WrV+v2+nZyc5H6zi9///vfZG2OKN8DKsKAgXrTMQpEN3PrY/H+zebsZBVvnbdtaIUe9Wq2C58DTAp4De9FjUIBIfVkun4vPya5/zIKzdfar/HxaEvAA5c8Zu+XPPvYzXxuzWCzs5cuXNhgMrFqthveskt23qDhnDzjIhd9jNe++Ms7n8L2oAdbGx6weyk6Xy2VCsIVCIbGBJYve19qjjNYvzuH8PxfteKHF5uX8c5qg0qw4/4770j4b/z/Y9hiw2WzC9EncRpY+I77YhotGzCwxGPA8FsLyVh7zcl8bz3NyroxjtxbnM0um8FjsGDg4ncdz8dhqPNThoxdf2lydrTfXHuC8nF/39QC49QFF//O2+8TdUO19Blh4COjNZrMgCG5Yuc1a8aDAxSpmyXw9BM5zdCxigRC3id6nIMvlcmhNhetgQXMPPp6D43o4boDBqFQqhZgGMh44JwvfV8vFBC9hfxxk6TMCcSyXyxDMQ/ENV8exmx2rrkubKvi0lg/KVavVRG0AV8P5why4/jzf5mo3eBp4X3hv3J0XLbC4Qy3vWb9arYL3gPvY7cdr8ueX9rmKj4NEnwEI4+rqyqbTqV1eXtr5+bkVi8Vg7WJLSP2UwOe1zW7vMuMtJCw19qrD5hacz/YpO7jpfvkvBqdYIIyzDLy8Fava/Oo3zudz4RFX2WEAwCDEXo0CbB8fiT4jm83GVquVjUYje/36tb148cIODg5suVyamSUEu9lswgIaPBcWmwtyzJLLVGP15rzIplqthgGBYwI+eIjaAP98Ttnh3Lj19QEQeKz+ntOI8/ncZrOZTafTkObjQQPiRxaBxe4DpeLDItFnwLv2r169smfPngXR+/lxo9FIuPqcC+fAV2z+zIE1ROYRkIOVR90/izpWd8+94v1KNpzTLwXma/UltzwYoNYAgp9MJuFAr3pOMRaLxUSeH/EBXIeE/+GR6DNydXVl8/nchsOhvXr1yp4/fx7cexYH6tX9JpdcEGOW3AaLy0V90I8bVcC6IyDnV915b+Pq6spqtVqims/Xyfu+AD4Xz9eN5/PefhD9eDwOx2g0svF4HAYBLkhCypGFHwv4ifePRJ8BjtqPx2O7uLiw169fB3eV58Hz+Tyxrz1E5a0rhOxFD9jth7DNLFSZceEQd83BuXDNvDjITyvS0oyxYhxfiMNuPgt/NBrZ5eWlDQaDcKCCsVwu22KxSPTW48Dftko98e5I9BmAgObzuU0mExuNRjYYDILAOMA1m81sPB5bs9lMLMP1Aka9PgfZYnNtPAdCPzh486/zdfexFl5sqf0S3VjBTUz4/HNM+DzYTSYTm06nNhwO7fLy0i4uLuzi4sLOz88T4sfag22r9iT2949EnxHM6afTaTggRLZ6k8nEut1uWHGHslzub1etVq3RaCQWznAhjp/rpzWnZEsfK7WNWWp+3bRiIo8fAFj43ur7gRGiPz8/t7OzMxsOh4l5P29YyVMQLiTatqBH7I9EnwF8yf0CGKTOeHHLdDq10Wh0qzkkou9YggsrZ2a3rCzuwy0EjUGGBe+tfJqb7vFC3yZ6/1oxd5/F3+l0rNfr2eHhoR0eHtrR0ZFdXFzY8fGxDQaDMNf3u9RiGsLpQc58XF9fh0FlsVi8j39trpDoM+JdWj8nxX1w77k/HISPxpGdTifktM1uLz/lsl3venM5L3e+TbPYadbRPy424PD1+J/TxM9bVrdaLWu329br9ezo6Mg+++yzMAVAW2sOLvIAEksXTqdTe/XqlX333Xf28uXLhPA5cyHiSPR3gCPa3PcO83oE+yaTSaLvO+/q2mw2bTabhcYUfi09bnnuzkdM7H6AMNtdSu3/vuvx/Bn4WxyYaqCgCANAq9WyXq8XXHrf0dZ7J76mAQPteDy27777zvr9vtXrdXvx4oUNh8NEaa9IR6K/A2lfTi/6crls8/k80dWGW2rNZrPwxfedZ/C61Wo1nBO3MZc+5hHw87a9l33uw3vlx3C1oa8uZPFzwLLRaNxqBAJi8QgO6MH6z2Yze/z4sX355Zd2//59+/rrr+3Jkyc2GAy2/+OEmUn0mYlZU1gqFNyg/pzr0BFxh8Wv1+vRhhZ8cJMInBv4VJuv2/dTBX7ePsRc+30GEM61+2kI3jtH6GPvJXbtPBiu12t7+PChPXz40I6OjqxarVqhULBvv/3WLi8vQ3Wkcv5xJPoMxHLrfnp/RwgAAAihSURBVM7MlisWoEMTDN9dNlb5xgU0bM39Nfmf04KB+7y/XX/bJSJ/Xh909BF4H6dIC2byeeFZtVqt4EGcnp7av/71L3vx4oW9evXKBoNBGHT3vfa8INFnBK46jjTRe7fV7M2XF0tleS2+n7dyEMuvjOM5/D7pq7vO2d+VmGgRmEwrQNpnasKDSKFQsC+++MLa7bY9fvzYzs/P7fnz5/btt9/as2fPbDabJTIe4g0SfUZQVINOt1x0w4LnL1ms5JXnqL7XG8p4WfQQTZorHHNl/bzbLJu1S7OQsSDevq+V9vO+cQh+r0iBNptNOz4+tvl8bj/96U/t0aNHdnZ2ZovF4laMQEj0mYBgEYXn/dnS8uJpQsSyV56r+jw3Al6+fDbt4JSdnwbg3B4fnEv7W+x9pYk+TbxpMYZtacM0/ECGjUYwAKxWq1D0JJJI9BmB6BGBr1ar0bRTLKeNnyFKBP58xN73nefOtDwYNBqN0PQCC3HY9Y+ty99Gmnhjlj3WEATP2TeDwK//LuLkaU+5XLZGo3Hn18oDEn0G8OVC9L3ZbFqz2by16SKsNuMFBSu0Xq8TYoKl5zbZXPI7nU5tNptZt9u1VqsVKv78/nmxCj28h7QBid+nx783XxrLn88+KcQ0wWeJuKdlKMR2JPqMwNLX63Vrt9vWbrdDJN7Mwm2s4SPw9/Haelh6WHQWPVauHR4eWq/Xs3a7ndhM05f7+m2rvUvsD7N4KTCuixt1co08hBvrCBwrDY4d26YjsUGKPapd05K8kjYgSvQZwBcNwaNut2v9ft9Wq1XiS7tarULe3neJSfsCw1PwJahoUAHBdzod63Q61u12w/ZN8DiazWZiT3h4AD7ugPNw3zyuBfBWGo/n9fN+kw6OdWDaw7v8+Nf1HkGaZ4DPyU8j8HnvG7sQb5HoM4I8faPRsH6/b8fHx6FvXayizK8Vj30h4ep7txkLe7B+H2v4IW4WOt+i5p033uAuuTyN8G27uJiG010YhLCCzm+4cXBwEMqLW61WuDbe7Qefne/046ckXvR+KoHXwRbVEnk2JPqMFAqFIPrDw0M7OTlJ9JXn/euWy2UQs1k8mg/4fggRHWXQcXY+nwe3HcFEWFdevecPWHuIw/e/41oAFibEj2vyW2Qtl8swkPHmneyFYOqBTAeuBe8B18/71/vdbfl6kaXAudIq+EQ6En0G8OUqld7sjd7r9ez09DQ0wKxWqzYajYJosKBmvV6HaP22dB7n4v08m0t6vSVmKwnLiYGArSx7HLxK0HfSie1z72MNnLHAQIGUWavVCsJHsBEpTgyK+B31+BgYOA2Kz4QbbCI/3+l0wmCDx4r9kOgzAuFVq1Xrdrt2fHwcvoj1ej00zOC5NOa/sNw+6u0HgFj+23fT4WvBz1yww9MNFi9eK61DDTfq4Nf3/fF81B6DDbwLLKnlDT1h4X3ak6cqED8XPPGGmmZmjUbD7t+/H6w93HyxHxL9HcCXttlsWr/fT4ie57A8Z/WLa7jYhqPU26rcduW7/e+7hBA7V9bn4rEYKBaLRaJVN0fzeRBi4UP0fpCAx4O4xmq1MjOzTqdjV1dXoTGHovXZkOjvANxKpO02m02Yr/ION35ujC+93wXGt4D2A0EaXrSxteTvIoiY8NMW/MAqI74B68w79/qovY/4+6wDgog8rTAz6/V61mg07PHjx4me+rL2+yHRZ4StGr6sXAbq22LhSz0ajaxSqYRmkJinInLP832z2y5/FkF/SMvni47MktOMYrEYYgWlUin0/PPBNvzOVp8/N56rcyrT7E0txL1792w6nap55h2Q6O8AvqzVatVarVaiYAdHo9EIR6vVssFgENJus9ksBPkWi0Vivgxr9n1gXzFBlB4Welo+nUtoeQDAtMgX4eDvGDAl+OxI9HcA89JarRZc+3q9HtzQdrtt3W7Xer2ejUYjGw6HNhwObTAY2Gg0urUJBPZS53bQKHr5obKt0s7DxUKcYUBmgIOKlUolDKYc8BP7I9FnBF8+zOmLxaLV6/XElk9cVIMNIPyWTzi4nh7Ch/h9h1jetIIj77w0l2/Nsrv6PguA+9JuucyXU30xMcYaaPDc3ufs2c2Hd1Wr1ez4+Nh+9rOf2eHhYZj7S/j7I9FnhEWPgJ5fJec75nL5Kur0eUENNoDEJpDz+Tx0iuXHIOfPr8O76mB6wIti0uoB+P0ADjhC0LHSWK4N4Lk4B+EQrecyXp/u48o6pO8wNeJ1BFx/UKvVrNPp2GeffWb37t0LrbLE/kj0d4CDVhA98Ll3b4H5y++3hOaBgAcBlL5yJRweD49gn7X3fH2Mt+6+4Sb/jQNwXFmHQhsOZHIgDt7JLtHzkmV+HVwPzsM1ERJ9Ngo73D9FSXawy31Oq7qLeQZcbsoVcyzmtNZafkuobcU/HrbgfgDwgTgWPrv1aTX0IDb1wOv6EmZ+LT/wxLoAS/SpRD8Yif4TsM3djgl1n9ttj087V1pRz7af0/4WS8ltO7eHnx8rEEo7p9iKRC9EzoiKfnc+RQjxo0KBvB8AdylAuYvr+74LXfw1+NeXe/5pkHsvxI8XufdCCIleiNwh0QuRMyR6IXKGRC9EzpDohcgZEr0QOUOiFyJnSPRC5AyJXoicIdELkTMkeiFyhkQvRM6Q6IXIGRK9EDlDohciZ0j0QuQMiV6InCHRC5EzJHohcoZEL0TOkOiFyBkSvRA5Q6IXImdI9ELkDIleiJwh0QuRMyR6IXKGRC9EzpDohcgZEr0QOUOiFyJnSPRC5AyJXoicIdELkTMkeiFyhkQvRM6Q6IXIGRK9EDlDohciZ0j0QuQMiV6InCHRC5EzJHohcoZEL0TOkOiFyBkSvRA5Q6IXImdI9ELkDIleiJwh0QuRMyR6IXKGRC9EzjjY8ffCR7kKIcRHQ5ZeiJwh0QuRMyR6IXKGRC9EzpDohcgZEr0QOeP/A01OYsHLxzDKAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 33\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 34\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 35\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 36\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 37\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 38\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "current beta: 64\n", - "Current iteration: 39\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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6TRWV1exsbGBTCajwh+Pqxukon9AplkU7K459ngsilzGAdhMU4qfR2XstiN77tmClx6BHIUtRU/B2plyMpVWJgAxlmHn/fOs3W5nzfdk+q6Mh/D0QxYO8X25ENgTehVXVPSLjOyeI915txZacpGQj5cdZt2SgaY5MrStulvvff5MuvQyrVZG33nsZg+sYMMPOX5bCtqtWu8pqvY+cFT0HxqTPIVxj53m9STziui26rhZTwseqw+Ax1DRK4rHcBW9RkAUxWPokd2C8VDn6bL/+6Q+8IvkWi/StXxMqHuvKB8v6t4riqKiVxTPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPEbjl332PchWKojwaaukVxWOo6BXFY6joFcVjqOgVxWOo6BXFY6joFcVj/BcDKQDdDvHfEwAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 40\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 41\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 42\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO2dyW5j2bWmf7Zie9iKoppQE4ps3FXChp2ARwW4JkZNa+IXKNTsTuolalqvUMM7u0MbSMBAjZwwbJcN25FwZKqJUEuJfStKZA0S/451tg4lkiEpGHHWBxBSSGwOGfr3Xnu1gfF4DEVR/EPwfV+AoihPi4peUXyGil5RfIaKXlF8hopeUXxG+J7fq2tfUT5cAl4/1J1eUXyGil5RfIaKXlF8hopeUXyGil5RfIaKXlF8hopeUXyGil5RfIaKXlF8hopeUXyGil5RfIaKXlF8hopeUXyGil5RfIaKXlF8hopeUXyGil5RfIaKXlF8hopeUXyGil5RHpD/+MsR/uv//r/47//nj6h2rt735XhyX2NMRVGmpNIa4H/++//D9WiMf5w0UUi+xP/6b//pfV/WLXSnV5QHoj+8wfXobQPpVv/6PV7NZFT0ivJAPMsn8D/+83MEAkDZieHf/ssn7/uSPAncM7VW+94ryoxcXY8QDS/EfurZ915FrygfLzrsQlEUFb2i+A4VvaL4DBW9ovgMFb2i+AwVvaL4DBW9ovgMFb2i+AwVvaL4DBW9ovgMFb2i+AwVvaL4DBW9ovgMFb2i+AwVvaL4DBW9ovgMFb2i+AwVvaL4DBW9ovgMFb2i+AwVvaL4DBW9ovgMFb2i+AwVvaL4DBW9ovgMFb2i+AwVvaL4DBW9oviM8Pu+AMXNPQNFn+S5AgHPuYdPzqJcx8eGTq1VlI8XnVqrKIqa9wsNrbDxeOz63v6912MeglnMa953msfwGuV95ePVrH9cVPQLwng8xmg0ws3NDa6vr3F9fY3hcGhuV1dXrn/L2/X1tXncaDTCaDQyC4VcMPg6NhSavAWDQZcA5b/5+1AohFAohEgkgkgkgmg0ar4PhUIIBoOu98b3x2sKBAKejw+HwwiHwwgGg+YmX1t5N1T0j4QtNHunpggo8KurK1xdXWEwGGAwGKDf76Pb7aLX66Hb7aLT6bi+8tbr9dDv99Hv928tAlL8/N4Lipg3ijkUChlhSuFRlJFIBEtLS0gkEkgkEkilUkgkEojH44hGowiHwwgEAuZ98tqur68xHo+N4OPxOBKJBJLJJJLJJGKxGJaWlm4tAKFQCOFw2LU4hEKhx//P/MhQ0b8DtpDlV+5qNzc3RswUcL/fR6/XM4LlVwqeoreFz6+22HmjsLjre+32o9Ho1vuwd1N7l7VFT/Fxd6ZoKXiKlo/nAnR1deW6Noo+FoshmUya5+DjKW6+fjgcRjweRzabxcrKCtbW1pDNZo1FoUyHin5OpMkqd1IKfTgcYjAYoNvtotlsolar4fLyEpVKBRcXF7i8vES9Xker1UKn0zGip2iHw6HZIfmc/J6/48958xL0NEzzOHnm5gLAr3I3jkQiZqHgIiEXnpubG9fzSquC1oHc4fm8vG8mk8HGxgZ++tOf4pe//CXS6bSKfkZU9HMiBS7P1FdXV+j1emi1WqjX67i4uMDFxQXOzs5wdnaG09NTI3wp+kXHtmLeB4FAAOl0Gtvb24hEIvj000/x/Pnz93ItHzIq+jnhTjsYDMx5vN/vo91uo1qt4vT0FEdHR3j9+jVOTk5wcXGBWq2GRqOBTqeDdruNfr//oN72+5BOsKd83YdiPB6j2WyiUqmgWq0++ef3saCin5PxeIzr62sMBgMjYprxR0dHODg4wN7eHg4ODnB6eopms4ler2esAtur/lTXvEhIHwH9BDTv+TMAriNMMBhEJpNBPB43jkJlNlT0c0AT9+rqCp1OB/V6HZeXl7i4uMDJyQkODg6wv7+Pw8NDVCoVNBoN42jz4q4Y9zRC5ePuC809FJOu1yuXYBLBYBDRaBTRaBSJRALpdBrpdBqO4xhnIP0B/X7f+D2CwSBWV1exvb2NdDqtop8DFf0ccJfv9/toNBo4Pj7GyckJjo+PcXR0hMPDQxwdHeHi4gLdbhfD4RAAzB+x1/PJr/Ncz1Ny3/VKjz/Davb30WjUhPtyuRwKhQKKxSJyuRwcx0EsFjOe/06ng1qthk6ng2g0irW1NXz++efI5/PqxJsDFf0cjMdjDIdDtFotnJ6e4rvvvsN3332Ho6MjnJ+f4+zszPyR0tNO59ck4T8GgUDAmMrSFJZRAYbP7MfRay6tCN7/Lihkx3GQyWTgOI6JvXNnZ3w/Ho8jlUrBcRxks1lks1mk02kkEglEo1ET4+/3++Z4FA6HkcvlsLKygkwmo6KfAxX9HNDkvLi4wOHhIV6+fIl//etfODs7Q6PRQKvVunV+fwzsMBpv3EVjsZi5MQzGBYshRZnMA8AVg5fJL/Rf8MbHMbOO8XbHcVAoFFAul1Eul1EqlZDNZpFKpUz8XV5bPB43N5mQI7P5mOvABScSiZhkHjXvZ0dFPwfj8RidTgcnJyd49eoVvv32WxwcHKBWqxlv/nA4fBRnHUVN0fCPnwkyPA8z2YX/jkajRkhM4mHSkIzxS4cav+dx5urqyiQX9ft9k2xDyyCRSCCbzSKfz2NlZQWlUgn5fN7s3hS1TLllbF5aFl6+AjurUOYCKLOhop+D0WiEZrOJw8NDvHr1yjjs+v2+MeUfIpbNP2ieg5mymkqlkMvlUCwWzS2fzyObzcJxHJMOSzN5aWnJlQsvE3uYry+LYGQqLo8jvC8zC5kRyMWNu28qlTJOOS5GFDavwes2TV691zFEmR0V/RyMRiO0Wi28efMG+/v7OD8/R6/XMw67h9jdZbprLBZDOp1GNptFsVjE8vIySqUSSqUSlpeXjQMsk8kglUq5ztBSbHac3i7M4et6FbfIYiBaCNKiCYVCxmy3zXT5XLZQvXIH7otiqNjfDRX9HNzc3KDZbJoMu1ar5VnRNg+ywCUajSKZTCKfz2N9fR3Pnj3D9vY21tbWsLy8bEznVCplzsRLS0su8/whK9NkKq1M/ZUVc7xNu3tPy7TPs2i5CO+TSZ+Zin4OhsMher0earUa6vU6hsOh+SN/lz86mccej8eRyWSwsrKCjY0N7OzsYHd3F1tbWyiXy8hms0gmk2ZX9RKaV/z+XeE1yuo2r1140ms/9i6tVsD9qOjngKKnU+tdkdVtkUgEqVQK+Xwem5ub2N7exvPnz80OXyqVkMlkzHmdobinrjVXcX24qOhnRFbQDQYD83OauPPAkNfS0hIcx0GxWMTW1hZ2d3fxySefYHt7G6urq8jlcua87lVL/i7X8LFwfX1tnIz35RR87Kyurnr+XEV/D7aQRqOREf3V1dU7PTd3Z8a4s9ksVldXsbOzgxcvXuD58+fY3Nw0oS+GvaRn3avl1MfEfUcTeYy4urpCo9HAmzdvcHx8jHa77brPtM/5sfCb3/zG8+cq+hmh6BnqmhfpnY/H48jlclhfX8fu7i4+/fRT7O7uGoedzFKzz+4fo9Al970/pkLX63U0Gg2cnZ3h1atX2N/fR6PR8LX1o6J/IGSLq1lFL51cFHwymUShUMD6+jpevHhhasTX19eNd16a816htw/pj3pSj755qVar+NOf/oS//vWvePPmjeldUKvVTOntpOefxsno9Xg7tDjpNRbh+b1Q0c+ITGyxRR8MBl0/sz3ZNMkZjkskEigUCtjY2MAnn3yCTz/9FDs7O+b8nkqlJnrn76rMW1TsXoHTLABevQWZL9BqtfC3v/0NX331FX7/+99jf38fzWbzvdQ5fEio6GdEtsm6S+D8SqHKzrEsSikWi1hbWzPhuN3dXSN4nt8npady9V/0nd4Wuf35TWrYKfsMyoV2OByi3W4bM/7Pf/4zvv76a7x8+fJWJEUF742K/gGhuO1EFWarySaQuVwO5XIZ29vb2NnZwebmJsrl8r2Cl6bfIgvfq0koc/7twh3bauJjmP0n24EPBgNUq1W8fPkSf/zjH/Hy5UtUq9V3dqr6CRX9jEjzWobMZG47C0nY0pnFMEtLS0gmk0ilUigUClhZWcGzZ8+wvr5uqtGSyaSJv3sJniKfJPT3KX67iYcUr+wbeHl5iWq1ikajgW63i8Fg4OrZz0VCtszm94PBAO12G/v7+/jmm2/QbDbNa3otjsptVPQzIp1wspabBTHhcBipVArZbBaFQsEUwsiqt1QqhUwmY4pmCoXCrYSbSRVk9pHiMTz40ziNvH5nd72VlXn1eh1nZ2emXuHNmzeoVCqmTp7VfrLTr1wIZIsx7vh2Q9H30YLsQ0RFPyMUN51rhDu74zimJ3u5XEaxWDSiZzEK68i56zN33ha8fYa3b3ZxzH2LwF2C8Cp8kT+f9FjbjOeuzCah7Ah8cnKC169f4/DwEIeHhzg5OUG1WjUNQq+uruYSrO7ss6OivwdbQOzPTpOdu30ymTRi393ddWXRpVIpl6DlKCcWyUwy6QG3qWw7v3jfu8Y/2YsFfyYfL9/rfTu9vbNLc5w7MHd2Ngk9PDzE8fExzs/PUa1WTc+7dz2Lq9hnR0U/I3TKsWFEoVBAMBjE2toatre3Tehtc3MTy8vLRvBe5jr7xt3XRAK4PTVHduSRPelsK8EWpow6SGvhrgYW8nnk4iNr7Nm8kh2Bz8/PcXp6anb34+Nj0zNwMBhMnWk3CRX7/KjoZyQYDGJpacmMVtre3kY4HMb29jY+++wzkyvPTDp64aUI7XP5fY0kbOHSo80WV7I6TzoU+Vg5FNNOLJJOSV6LfKztXJPJSWyoIR10lUrFDPOQk3za7bZpITYNixiR+FhQ0c9BNBpFPp/H7u4uRqMRotEotra2TL58qVQyZa+yCs7rXA7cPZ5ZJqXIMBbDXRSH3deOr8e0YTkcU7bIotBl8o8dZpPec/lc3W4X7XYbtVoN1WoV5+fnRuzNZtOY8LZlMi26mz8OKvo5CIfDyOfz+OSTT5BKpRAOh03dO0tf7Tx5wNsZZ/9he/1bzsnjuVl6vKXo5VFiPB67dmROveVjudvb/ebshYI98eRwzV6vZyboNptNtFotNJtNNJtNU3KssfPFREU/B6FQCNlsFjs7O8jlcggGg3AcB/l83uW0s/Pk7d1+Uu6+HY/3Sm5hnzq26LLnuwcCASNeCpTipMdcmtq8Vq9zOiflygm7vMmJu/aYbE2DXUxU9HMQDAaRSCSwvLyMZDIJACbTTjahvM9sl8KWP/NaHOQce46w7na7ZjcNhUKm1XUkEjEC5hSeRqOBZrNpWnSzqSX9AqwboDVBy6Ddbrs64EqB0xqQM+cXEV183Kjo5yAQCCAajSKVSiESiWA8HiMcDk8leDt9ltihNH5vh8Ok4DudDq6uroxf4fr62tVNhwM2O50OWq2WKUFlX34mwtiLC8XN1+DiwhstCB457PHTi4YK3s2dotcPy40UMSvlgO8/J+mBv4tJ2WuTzve2ud3tdo25TtEDcKWsUvQybbXdbpux2DzXy+k7fC3ppJOtruk/kC2zvYqO3sffzKTEIsUb3emnYNKOTQcYz6+AW8z2YycltUjvtlehCmfeU7g8m3c6HVxfX5uQG0Upd3qeuyleOvHkrk0R02fQ6/Vc3n4OteDuLkWvqa8fHneKXuOk3thZb9ILPhqNEAwGPU14wDuLjTs0he/lre92u8ZEp+jpjGNqMJ/TNu/lRBoZfpNlq9KqoJnv1RdfhhAXRexe18GW4LTAlLfoTj8HdryceeNMq7Xj5bZjjmKWYTFbiHwN6UWXuzyn4XKRWVpaMgKORCLmOun44+tJk573B24Pv+DPJvkaFplSqYSVlRVks1nEYjGEQiG1SAR3iv7Vq1dPdR0LgW2iB4NB1wBI/p5ms4x705nGajpOmKFjzzbXZbybu7AUvh2e63Q6aLfb5kwuPe/RaNTVZIJz6yh6OY3mrrFbdjqu3CXt0COff5JF81j/N4T1DyxaYsESayBY96Civ82dov/qq68e1cR/7FTLeZ+foohEIigUCiY0R+HTw91qtUzc++bmxjV+SpbKysGRMuQmnWpS9DI8xzM4s9vsUBuTcuw0Wy40cjqtV6caClZOiY1EIi7/AC0HvgcuYHI23qRoxLzYNQHy+oLBIAqFgql1eP78OcrlsgmZcrRXPB53pUAr33On6H/7298+1XUsDPzjvbm5QTQaRbFYxMrKCtLpNCKRiPnjY504Q1q8v+M4yOVyZta63Gns7Dh6yLkT24MlpTNNip0iY7VeLBa7lRvP16RJTwtCpsPaufaTCnX4O36l85D38drppWDlUYfWgx0qlM5BAJ7DLfn4eDyOnZ0d/OxnP8MvfvEL/OAHP8DGxgZSqZRnDYHi5k7Rf/311091HQuDFD3HL7PrDavi7DRX7qKhUAjxeNw1tZX59/K+FLJd/CKdZNLEly23KTLZb892yslUXOk/sAXvVYPPHVzeBoOBed/ymm3hAm/FKgdayjHatJbkImhHE2SSkjxWMT+iUCjgxz/+Mb788kt88cUXePbsGdLp9FP/qXyw3Cn6o6Ojp7qODwrG6KXpzj9UmsNsmCHvw6QWeab2KnjhfaVTT2bOsXMPE3JkuI87PcXCf8s+dHLX5L+l05Gvx1p/ipILlddRQb6PpaUls/g5joN0Om2OO1wEZXhQpvlS+PI6AZj3n0gksLq6ih/96Ef47LPPsLGxgWQy6TrKPfax8UNHvfdzMBqNzPnaRpqzchINH2fH8LkzshOPHde37y8XFq+dG4Ax4+ViY/fpl+FFuejwDGyn/9opt1LwvH72AHQcB9ls1hxzHMdxOdv4/FxImEcgZ97LibhcHIbDIeLxuJngWywWkUwmjf/CK9LgZyYtfCr6B4ZmK4tZvJJz+DPppBoMBhOHWRDe1+tcLhcYioXtvLycd9zdpeXAxYT/9rI6vPwC0WjU1eWXff/y+TwcxzGtwmSLMS4qdtmvrObj50inaa/XQyQSQbFYRC6XMxmR9uesu/zdaHLOFNifw33hn/u82PLsLk1tuTt7XQN3ZXnmlaayXdknm3d6meJS/Dwu0KRn1Z7dAFQ672gZ0JznDs9moI7juEx6acl4JSlxAeCN/+71eqjX6+h2uwgEAuZ5w2Hds+ZBc++n4DE/B2nC0xl4V6EOTfThcIhgMGjEzl3argGwn49ilQuHFH0sFjNONy4AXs9NwdN/kUgkTJNPzt7j7u5VZkxGo5HruGKHHmnaR6NRExrltU36rJS70aVygWDUwEsgcne1C15kBh/Tce10YMB9PJhk4kvh0yxnohHFy6OEtA7ooZeJSXZWopdA5TXyue0FgOHHQCCA4XDo6f9QpkdFvyDIeLcMf3ndzyvGbRfByK9ScBQ6rQq5e8vuOzLUxkgExWb7AGgRyAVCClO+thcyzm+HEbnIxWIxk3TEa5imqlG5jYp+gbBDTfeJ3/ZWTyqOIVJcMlwnQ3Zejj2GJ2VNgf17+bt5xMhrswVPh6R90+Sb+dFPTlF8hu70C4S9O961m3mZzfbZ2csvQOSZn74EmQgkswFlBuLNzY3JzKP/gK9FC4Bn8Fnwslbk9cgbr1+ZDxX9gmA72yZ58O1wm52jPukroXCBtyFDu36fRUFcdFgZaCcd2Y48W4g0zSc58XifSUK3+wIycYeOPpmyq0yPin6BkGdrr9/Zordz5JlQYy8CRDoJubMyWiCLfHq9nvkdG2syZCd9ABzxxYk/DNexys0O2XkhHY52yI6WBpNzZMhukRtxLjqanDMFsybnzPrctoAn3U+mzFJM7H5r/9uerCvFbqfQSsHTjKfYJvXu52OZnJNIJJBOp5HL5czNLjqS78+uFZCpvnaCTrfbRaPRQKfTMd78dDo91wANRZNzpmLWz+GulFBpjtqmud1J115c7NAahS7/zfg4K+0A9/md1yBNcZbK8ndM+JHXIM/UsmCIefdMw83n8ygUCiYNN5PJIB6Pmwo72z8gS4hli23ZX8BOw72+vkY6nZ56RJbiRs37B4ai9Cq48dplpWkuw2Ze/em4GFDsjI+zmk+m0Mraf+a4E7nLyuenqGW+gDSz5WgrmQPA62dbcKbj8pbJZDwLbmhNsNLObhLC67u+vjYFN7FYDMPhEOl0Guvr6673JL9XK1ULbh4UGZ+WgqbgKUImqnCXlZ5o6YSSVW7Soy7r1u3SWgqbCTHxeNzV2kvWrUuREum8k9fC+3IHZv3/XaW1slqP759dhBzHMTcm+rBzr6ywo+hlVyDpk6Apn0gk0O/3kUwmsba2ZkaBT5MEpHzPnaLf2Nh4qutYKPiHbDfRsM/JAO5tohGLxcz9ZRMNCoois0NWXoMjJzXRoOD5VZrR3Ln5+vI1ZLhNFgHxNe1OunbjD68mGgBcnn2a9rw22b9vUhMNXhMXUZlIFI1G0Ww2EQqF4DgOYrEYNjY24DjOY/5JfFTcKfovv/zyqa5jIZC7ymg0crXLchzHmMwUBnvRd7tdM10mk8kYR1YqlXK1y6Kjim2yZLss7nD2pFhZbio76Ejhc4eXO718TYblvKrc7Nj9aDQyr8VeftKxxuuzQ23yefiavV7PCFRaMvL15DFDTsqRfg47/6BWq5n+fbze9fV10y5L+kX8DH06NneK/te//vWjXMwiQ4Gw7VQ+n3c1xgTedsNlS+pOp2M6zcjGmHwMBcgQGFtas7+eLXx7JLRcICY1xpRVcfJIwfJTFq7c5WOQnnQuNnaLbtkYUz7Odna+qxPYKzzJ1+Iie319jWq1im+//fZWY0z2J/RzY8wvvvjC8+d3iv5Xv/rVo1zMIiM91sFg0JjPNDMpXnaoZZdaWgY8DtBbbTejoKDlQEi5k8tW1rKRJttf07Lgrmufo+lroEXC4hoWq9i7oBSufG0pcvm9bdJPyvN/V7yOIIRi73a72N/fNwKnI9FugS3DhH5ikugD93wQ/vqUpmQ0GrnCTPawC4bL7hp2QUeZvNmOO3nm5ahpDrtg22xmvdF7z+IXeZ1cLORj5SLD+9pHCrsnvwzXPabg35Xl5WUddgHgd7/7naeJo977OeDuarelkrHzSYk2tCDsRJulpaVbDS6l8Gk9sMzVHmslRS/HWjH5ZjAYmOsbDAau66Ozz7YCJnnEF91crlQqaLfbrrFWmqv/Fk3OmYJJGXky3m6nv3qJhZ53Gabj4+3dSArfjr3L8JgcYClr2QHcEn2/33d1qZFxdooiHA6b9t/yvcj3w4XL6yz/PrA/YwAmFKjcRnf6KZDJMfJnFCVFwPvYQiEUjBQ+kRlz8jVsAUrzOhgMmlHVMj/Aa6enA5HHCF6HNNVleMzOJ+C1ybAfcHu6zSIsAsrdaO79nMhzPQUzTUmpLXzu0l6Pk0cB/lsWpAAwuzrj4vZOT2tCTqSlg48z8PjcDEX2+33Xc/Emz/bs0SfLXd+X4HWhmQ3d6edgPP6+Zzs96QAQi8VcySSTssMm7Yhe52iKXuaqMw2VabUUuDTv5U4vh22QYDBoQn9ecXoZVux2u2i3265Ig10YA7y1AJTFR0U/B6PRCJ1OB5VKBfV6HcFgEI7juExk23wn9rkd8Ba87fG369cTiYTJUONiw92ZoqeA7cIcprLKfHxpEcgUWU6fkQM06dWX//Yat+1Hj/mHgIp+Dm5ubtBoNLC3t4fj42OEQiGUy2Vz/qaAJpWlemWyeXnHZTUeRS8HVtK8lkU4co4djwP0+LPLLc/2Msdd9p2TIUXmEDBEKMN5XAwYCmw0Gmg2m64RVcrioaKfg+FwiGq1im+++QavXr1CNBpFvV43Z2UAJjvMbuI4SfBeuz2RiTZynBXbVdGTz5sUPc/pFLzjOC5nHp/fa5Yed2270o6xfJr+9Xodl5eXOD8/x8XFBS4vL1Gv1411IKfi6M7//lHRzwFFv7e3h7///e8Ih8Not9uuMUylUgmO47iE75Wn7hUfl8gQmSxh5S4PuC0BKV6ZDCTF61XlJ8ONhIuGvMmsPXbZabVat4TPW7VaRbVaRbvdRq/Xm/rsf58TWReP+VHRzwgLPOr1Ok5OTnBwcGBCZ7JUtN/vm5x9OY1F7u5yh5aZe16hPunlpwlv79RexSYy2UeGGKVo7Hi8naLrdSThc0nxdzodtFot1Go1VCoVnJyc4PXr1zg8PMTx8TEuLy/Rbrdd1XTK06OinxGZd1+v13FxcWGEcnNzY8669Xrd5H/LllFeTSWXlpYAYGrh86v8uZ0YZO/YtpUhX2PSV4lXDoHXAiA/m7OzMzx79gwbGxs4ODjA0dERKpUKarWaiQgMBgPPz1l38sdDRX8PtgBloku/3zd/+J1OB2dnZ6Y45vz8HOVyGcvLy8hms6a2nkJPJpNIJpNm/hvgPs97hf1kVMCO9d+VFCTfyyQmHS2meQ4pfo7DchwH+Xweq6ur2N7edu36h4eHODk5MTs/6+nn2f1tq0S5HxX9jNAxJotVAJjiF9ag12o1nJ6eolAouNpFURSZTAb5fB7FYtGY3BTspHJQrx3ZK012EtMkW911Hy8LhI+R/gFmB7JnXrlcxtraGp49e4bNzU0cHBzg9evXqFQqaDQaJjIgfQ90JNKKkJmDbJ/V6XRU7HOgop8RWSVnt5/i+fb6+tp0cD0/PzddbSj6dDqNQqGAlZUVbGxsuNJipai8HHwyEuAl9sfMorxvQZEClIVEMnJQLBbx7NkzVKtVNBoNdLtdDAYDl4dfFhvxM5Ulv81mE/v7+/jmm2/QaDRc16A7//2o6GdEnmXlTi9TUZmo0uv10Gg0TMor++Ylk0nkcjlcXl6i0+m4ymr5HIB7vvyksN5TiH1aJvkhaAFEo1E4joNyuWxKhmU0gVD4k0KFDJcmk0n885//RK1WM+nQKvb7UdHPyaTzrlwIAoGAaR0lHXhLS0toNBpotVrodDrGvJWiH4/Hxutve+UXUfA28pp4/Xzv/JzsunwbGSKUocJ2u43t7W3s7u7iL3/5C/7whz/gH//4B/r9/lO9vQ8aFf2MyLi6nXQjvxJmzLHizW5SwRRW2Ybq5uYGuVzOCN/Lq7/Igpd4pRUD3lWFdzkgZVXfzc0Ntra28Pnnn2Nra5WvlccAAAg2SURBVAuxWAzj8Rh7e3smX0K+puJGRT8jdkxcYnuf7YWAOxwXAbslleyUS3M/lUqZ7DvbwTcpvLeo3JVqPA/pdBrA9wtrqVTCmzdvUKlUcH5+jmq1aqIrKn43KvoZkQk1XgU1d+GV7ML5bLJyTZ5hi8UiHMdBPB53nY8/lJ3e5qGvN5/P4+c//zlevHiBZrOJ09NTfPvtt9jb23M5+ZS3qOhnhGOc5hG9RJ5rbY8189ql6Z/P5+8NzX1oC8A03LdDs+338vIyhsMhNjc3sb6+jt3dXXS73Q/KEnoqVPT3YP/BUPTsUvMucLdniWutVjPttdlpV8awZXafHGhxVybfh8607ycQCJiW5YlEAhsbGy6nqvIWFf2MyPgz02eBd9tlKXzu9rKEVXbBXV9fR6lUQiaTQSKRMLXzD3ENHwvhcNiV5ajcRkU/BxwuwdTadw0V2XnxPOMzzs9y1Vqthq2tLZTLZc+cfrtS7jEXgUnRivteWxem94+Kfg4ikQiSyaSZylqtVl1DJueFKabM5Wf1WqPRMMU9Z2dnWFtbw/LyMvL5PBzHQTKZdM2Ko89Bmv8PgV2tZ5foykm972u0lHrp3zLps1fRz0EoFEIqlUK5XEa5XDbz6WRn2Hn/+Cj8QODteK3BYIB2u41KpYK9vT0sLy+jVCqhVCpheXkZxWIRuVwOmUwG6XTaTIe1rQCZoiqLZLwaeti+Apl+zOMHM+rG47GpGpTz9Ow22nx+yTyFPu9aX+B3VPRzwJ54Gxsb2NnZQb/fx9nZGYC3zSXftVGk3fyCRTxHR0dm/nuxWMTy8jIKhQJyuZxrFjx3fzlxR86Ds4tbmGMgh3DI0dl27bycq8c8gkQiYebTy2ug78EeZGk375g2t18uUMrsqOjnIBgMIp1OY3NzEy9evDADLJkDzpTad80F52O5gFBwrNc/PT01vgU5Epo7vfy5HKQpC1lkM0vg7Zhp3p91+3KoJQU/GAzMYkHRZ7NZFAoFY4nwCCIXILbUlt97WQXyc7A/T7kwKbOhop+DQCCAZDKJtbU1Vzw4Ho+b5pBsDcXKsYdiNBqZWn5eCwDXDiqLe2xzm6Knec4FQO6esskmn1/2EZBz6nmeD4fDiMViSKfTKBaL5uhTKpWQzWbN2G5GPTgYVN7ksA67179s+82593Rk6o4/Gyr6OQgEAojFYsjn89ja2jJtprPZLM7OzkwaaKfTMaG4xxr4aFsDAFzRBJr2MoVXFrDIBpny/dn9++WZfhIc3V2tVnF2doa9vT04jmPm8HFnZyMRWiV0iGazWaTTaTPim36Nfr9vFtJwOIxcLmdq9OXCpEyHin4OuBum02msrKxgNBohFoshl8shl8shkUggEong4uICnU7HtIR66F1/GuZpQy0ThmaFx5t2u43T01OTzCQbe8qBm4yC5PN5E5Hg6Gk2/+x2u2YRjUajWFtbww9/+EMkk0mk02k18WdERT8H0pzNZrMYj79vVplOp5FOp13Oq/Pzc1dDyknPJ79K7lsk5GPkfR9zcZl0vdKSkaO3vAZJysxGOgDT6bSxDGi2sz8Be+pxxkAgEMDGxgbW19cf7X1+rKjo50A2hUgkEi7vdTKZRCKRMCYtz6lsCyXP+V5VeLPyPuLSD3FM4fQdJiHV63VX734eR+S8PDob6/U6yuUyWq2WxuXnQEU/J3K3Z943nUsMW+XzeaysrODk5AQXFxeo1WpmCATHRT3VH+2kXfl9InMFZjlOLC0tmQV0Ed7Hh4aKfk4YMuLgCXrLaarmcjmsrq5iZ2fHZNKdnp7i7OwMlUrFzMFrt9tP0uDxYxBHIBBAOp02oUAuuMpsqOjnhGmn/ErvPHf7TCaD5eVlrK+vmwEQnABzeXmJarWKer2OZrNpxj+xnl561vmVN7tbrDR9H3OAhDzHy85BdM4xQmDXAQC3B27I8KBM3aV3n0VNclEFvi+mSafT2NjYwE9+8hMUi0V14s1B4J4d4MPfHh6RSWdy+Qcu01ZliywmuMgJsLwPJ+XIuno5QVb+TD5WduKRnWW9zuCcgQe4B2ZIIdoz7nijsOmIY+iNfgw6MrkockGyp9oyCYhefNsXYifuhMNhxONxZDIZlEolrK2tIZvNqvAn42kGqegfkWkWBdnaWea0y8mwnA4rv+fvZJ89O8POK5PNyxqw02FlsY6dKScXAx5paN1QuBQtn0N2tpVefXrw5TwAVi5S9Hb6LhcC+TtlIir6RcbuniN759kttOQiIe8vO8x67fDThAztXd2rYEZaBHLuvazws+fzec3Sk88hU3JlCrDXNSlTo6L/0LjLUph032meTzKviO6rjps1WnBfKzBlLlT0iuIzPEWvHhBF8RkaslswHiueLvu/39UHfpFM60W6lo8JNe8V5eNFzXtFUVT0iuI7VPSK4jNU9IriM1T0iuIzVPSK4jNU9IriM1T0iuIzVPSK4jNU9IriM1T0iuIzVPSK4jNU9IriM1T0iuIzVPSK4jNU9IriM1T0iuIzVPSK4jNU9IriM1T0iuIzVPSK4jNU9IriM1T0iuIzVPSK4jNU9IriM1T0iuIzVPSK4jNU9IriM1T0iuIzVPSK4jNU9IriM1T0iuIzVPSK4jNU9IriM1T0iuIzVPSK4jNU9IriM1T0iuIzVPSK4jNU9IriM1T0iuIzVPSK4jNU9IriM1T0iuIzVPSK4jNU9IriM1T0iuIzVPSK4jNU9IriM1T0iuIzVPSK4jNU9IriM1T0iuIzwvf8PvAkV6EoypOhO72i+AwVvaL4DBW9ovgMFb2i+AwVvaL4DBW9oviM/w/f02+L30z15AAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 43\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 44\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 45\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 46\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 47\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 48\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 49\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 50\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "current beta: 128\n", - "Current iteration: 51\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 52\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO2dSXNb5/XmH4zEDAIgRlIkRBIxTZmmJctxvEi6Kr1J/be9yRfo6l1v+kv0tr9CL3vXy6TiVVeSiqWKbImyFEmUyBDggHmeSAC9cJ1XB5cAMRAcxHt+VSiSAC5wL4jnHc5o6PV6EARBPxhv+gQEQbheRPSCoDNE9IKgM0T0gqAzRPSCoDPMIx4X074gfLoYBt0pM70g6AwRvSDoDBG9IOgMEb0g6AwRvSDoDBG9IOgMEb0g6AwRvSDoDBG9IOgMEb0g6AwRvSDoDBG9IOgMEb0g6AwRvSDoDBG9IOgMEb0g6AwRvSDoDBG9IOgMEb0g6AwRvSDMkP/7Ywr/8b/+H/7r/36KfK1906czkFGFMQVBGJNMpYX/8X9+wlm3h5+Pygg4X+N//pcvb/q0ziEzvSDMiOZpB2fdjwWkK82zGzyb4YjoBWFG3PM78N/+0yoMBiDiseG//+fETZ/SQAwjutZK3XtBmJD2WRdW862YTwfWvRfRC8LdRZpdCIIgohcE3SGiFwSdIaIXBJ0hohcEnSGiFwSdIaIXBJ0hohcEnSGiFwSdIaIXBJ0hohcEnSGiFwSdIaIXBJ0hohcEnSGiFwSdIaIXBJ0hohcEnSGiFwSdIaIXBJ0hohcEnSGiFwSdIaIXBJ0hohcEnSGiFwSdIaIXBJ0hohcEnSGiFwSdIaIXBJ1hvukTEPoZ0VD0yo4dB4NhYD/EO/eedx3pWisId5eBI6bM9NfIRQOszGjCdSGiv0a4sPkAMI7ge71e30372E3Bz51+NxgMA6+JzlN77cOeL1wNIvobYtiXvNvtotPpqJ9nZ2dot9totVpotVpot9tot9s4PT099/Ps7EwdO8kAoRUr3YxG48C/jUYjjEYjzGYzLBYLrFbruZvZbIbJZFLv2el01PXQ+fHXmJub6zuO3kMGhNkjor9hut2uEm6z2VTCPj09xenpKZrNJur1OsrlMqrVKiqVCmq1Gur1OqrVKmq1GiqVCur1OprNJtrtNs7OznB2dqZeHxg8yxJaUZtMpr4bCZB+N5vNsFqtsNlssNvtcLlcfTen0wm73Q6z2QyDwYBOp6Ouka6NRG+z2eB0OuF2u+F0OmGz2ZT4aQCg3+lvfl4yIEyOiP6K6fV6ODs7U+Il4dbrdTQaDTQaDSV4Ei0XfbvdRr1eR61WQ7VaVUJvNBqo1+vqNRuNhho0ut0uzs7OBs70F0GC5yLn4uJ/z83NYW5uDna7HU6nEw6HA06nU93m5uZgNpvVZ6BdkZDo5+bm1LEOhwN2ux0Wi6VP6GazWQ02TqcTPp8P4XAY4XAYHo/nqv51dxYR/YzgM2m321XCa7fbqNVqyOfzOD4+RjKZxMHBAQ4PD5HJZFCpVNBoNJQoaClMP/kyX3ujGZQev+zengaoi6BVAZ9xSZQWiwUmkwkWi6VvFqbzos+l0+kAQN/AYrFY1PHaQYZWCyaTCYFAAOvr63j8+DG+++47uN1ume0nREQ/A/j++ezsDI1GA5VKBblcDplMBtlsFplMBoeHh9jf38f+/j4ODw+RTqfRaDRu+vQngq6TtiU3wcbGBoxGIxKJBFZXV/vOTQaA0YjoLwEXAM1g9XodmUwGe3t7+Pnnn/Hy5UscHh6iWCyiWq2iXC6r/fmoWXVWXCSEm7T8T8ve3h5SqRTq9bq671O8jptCRH8J+IzXarVQq9WQTqexu7uLnZ0dPH36FM+fP0cqlVIGtZs6z9uM1l5AP+kxsvzT5x0IBOBwOJShUJgMEf2U0FKeLOzFYhEHBwd48+YNXrx4gZ2dHbx79w6pVGpkUM64fvpBxwJQAuFwt91FDHvvUVb+YceSHWISvF4vFhYWsLCwAJ/PB7fbDavVCoPBgF6vh3q9jkKhgGq1CpPJhJWVFTx8+BCBQEAt6em5wmhE9FNCoq9UKkin09jf38fr16+xs7ODFy9eYG9vD6VSaeQXcVILu/ZYAJdaRUzy3nw7My6DfP7c7efxeBCJRBCPxxGPxxGLxeDz+WC322E0GtHpdFAul5FKpZDL5eByubC2tobNzU0Eg8Fz7yWMRkQ/Jb1eD+12G0dHR/jxxx/x7NkzvH37FgcHB0ilUigWi+q5NDNe5CsfB601fFyMRiOsVitMJpOyP5Cn4Cqw2+0IBoMIhUKYn5+Hw+FQLjy6kcvP7XbD7/cjHA4jFAohEAj0zfSdTgeNRgO5XA7lchk2mw2hUAihUEgs91Miop8CEnyxWMT79+/xt7/9DX/9619xdHSkfO2cWe3nJxGp2WyGzWaDy+WCw+FQe2AAaLVayq/fbDaV24+OI1HSQEHHNJtNNBoNtFqtgediNBrh9/uxuLiItbU1fPbZZ1hZWYHP51PC10bukfjpRj56PlB2Oh3EYjFl+ORRgMLkiOinpFKpYG9vDzs7O9jZ2cHu7u45sV8lVqsVXq8XXq9XRcFRlBz9JLE7HA7YbDaYzWYVKEMi5hFywC+rCfKZk7+dhMcHi1ar1RdSazKZYLfbMT8/j2g0iuXlZcTjcUQiEXg8nnORduSTnwZ+rsLkiOjHhPuAe70e8vk8dnZ28OOPPyKZTF6r4F0ul9oHr66uYmlpCQsLC/B6vSqyzWazwWaz9UW30flr4/u5XYEH33AjIwUb0YBBN1ohkOidTmdfSC6dAw+6uaxYReyXQ0Q/Jfl8Hm/evMGrV6+QyWT6Hpu1JdloNMLj8cDv9yMUCiEcDiMWiyEej+P+/fuIRqMIBALweDwqBJYvzWcNRQJSSC0ANXtPMoNf1rYhTIeIfkoqlYqKrmu1Wn2PzdpAFgwGkUgksLW1hc3NTSwuLsLv98Pn86nlPV8+X7UoyKdus9kutdS+ivMUt91Hhn2+Ivop6HQ6Kp6+2WwC+LgsnpXRjmb3SCSCtbU1fPnll/j666+xubmJcDisElMoOWYQVyWAQTn0w973umdlWQWMRkQ/JvzLxA1hV8XCwgI2Nzexvb2Nzz//HIlEAisrKwiFQnA6nUOFftWMIyoR3u1GRD8FlPN+FbHzNpsNgUAAn3/+OX7zm9/g8ePHSCQSCIfDcDqdfemqwMUC06P4er2eSjueRebhp0w0Gh14v4h+CshyPet4epvNhng8jq+++gpff/01vvjiC6ytrSEUCsHlcvVVoiFj4V3NLBtXrPzaefReKpVCuVxW3gX+XL0MBH/84x8H3i+iH4FWVJ1ORxW6mOX+3el0YnFxEd988w1+97vfYXt7G9FoVPm4SeTc5XUXxU6Me23tdhulUkllMWYyGezu7uL9+/fI5/N9otcbIvoZQf5qKmIxDtovsHam8Xq9SCQSePToEb755htsb29jeXkZbrdbRafdJYFrr/8y11apVPDPf/4Tz549QzKZRC6Xw8nJCQqFAprNpopDGPQ+45zHoJWU9vWGrbZuw+sPQkQ/IbyizbjLxGHPs1gs8Hq9WF1dxXfffYff/va3+PzzzxEMBtX+nYJk7hLTXg9tZ0jI1WoVL168wPfff4+//OUveP/+Pcrlcp9o9LKUnwQR/RQMy4wzGo1jL/ldLheCwSDW19extbWFb7/9Fg8ePEAsFsPc3FxfTrkeoWhBGmB5CbJarYZUKoWXL1/iyZMn+OGHH/Dq1atz3hQR/GBE9FMyzReKst3cbjcikQgSiQQePnyIR48eYW1tDcFgUCWd3LXSzzwtl5fDpt+5uHlNQF7dl275fB7Pnj3D999/j+fPn/fN7sJoRPRTMKxBg9aF53K54Ha74Xa7VZaZw+HA/Pw8YrEY1tfX8eDBA6yvryMQCKgZ/q4JHvjlMyOjWzqdxvHxMfL5PGq1mkre4QMACZ8yAPl9pVIJb9++xdOnT/tqDFKg0iRbLz0iop8QbWknfj990cxmMzweD5aWlrCysoJoNAq/3w+32w2XywWv14tAIIBQKIRgMAi/36+y4O6K4PnMTsVCqbrQy5cvVaGRQqGAWq2G09NT9Vxe9Yd+5/X7KcdeW1SUVgrCxYjoJ8RkMg3M5e52u7DZbGrpvrKygtXVVcTjcUSjUfh8PlUTnqe80nL+rs3wVCS0UCjg5OQER0dHOD4+VhWG3rx5g2QyiVKpdKn3odRfmdnHR0Q/Aq0IqSsLpYwSZrMZ4XAYa2tr2N7exhdffIHl5WU1w1OsPE915XXdJ3XL3WR8+yC4Zb3dbqNaraoioc+fP8fPP/+sXGqFQgGlUmkmYcwi+MkR0U8BVaTh3VWWlpawtbWFR48e4fHjx9jY2EAwGITVaj2XFDOsd9y4aL/o3I87TqHLUf7dUa/BBU7GtkajoUp8F4tF5PN5HB0d4e3bt/jpp5/w+vXrcynIg95v3HLdly09pmdE9FNAVWvu3buHRCIBm82GBw8e4NGjR3j48CHW19cRDAbhcDhmGlRBx/K9Ln+NYQOI9hjtoDEqyo8fw63rrVYL9XodxWIRx8fHODg46GvkQeJPp9MoFApjXx8/LxH17BHRT4HJZMLCwgIePHgAq9UKl8uFjY0NbG1tIZFIwOfzwWQyDV2CXzY4hVe+6Xa7anug7TI7SKhU/IKXqh50HI885MfxZpvUWDOXyyGZTGJ3dxcfPnxQlWvHNaoNE7YI/mowjPhg5VMfQK/XQzKZVEtWm82GaDSKe/fuKV87PW+W+21aUlPlGh4KrO3mSs8n8VJ9u1qthlqtpgpiAh9dXWQU0z6fmmZSt1zKYqP7KpUKCoUC8vk88vk8qtXq0GvQW9LLTdLr9QZ++UT0U1Kr1ZQxymg0qvpwdrv9SspUaQ1llM9PwqUmkDx0lwTfbDZRrVZRLBaRy+VQLBZRqVRUpiB1laGS07Rsp/05Pb9cLiuh8467s0w+EmbHMNHL8n5KyK+unWmvInRWu0ynrjo0Y/d6PdU8goTPBVytVpHL5VRQTDqdVgMWiZWW9eRT5221qbU2lcweVgKbw1c4Nz2ri22gHxH9lFCXFprVp3G7jQO3Umv75lUqFdRqNXS7XVWzjvz+wC8RguQrJ0Pb4eEhTk5OUC6XVSQcX0XQgMJLXfOe95fdp98Et+lcbgMXil4+rPNcZJCbtkjkRZ/zIPdYvV5HpVJROeSdTgcWi+Wc6Mlfns1mcXh4qG7ZbBaVSgXtdrsv7p1ET5WBKO592PmNSlW9DrTeCtlmjEZm+hFMUo5qmll+kL9Z6w/nMzyJnYJcaKanBhcUNNTr9dBqtVAul5FOp5FOp5HNZlEoFNRynaz4PF2YGwhHifi2TAq35Tw+FS4U/W2I9LqtXEX1Gu4P1y65KfilUCggk8kgm82iWCyqqLa5uTnY7XbY7XbVyabZbKJUKqkBolwuo1qtnutso3UD8hXLbbe2Dzsvu92Oubm5C6sF6xWZ6S+BNuBFu68fJRieTKIVHS27ySdeqVSQz+eRyWSQTqdVhtrZ2RnMZjPsdruy6FssFmXEK5VKKJVKKJfLqNfratnO30tbGIR3vZllmOs4gUqzwO/3q+63NptNxUzc1oHrurlQ9O/evbuu87gVcJH2er/0Z3M4HHC5XCqclrd5IqMXGcSoaSR1mKHKtdovOw+WIRFS0AsPgCHXGbnb8vm8mrWr1SparZZKAHI6nWi1Wmp53+121fK+UqmoxpO0R9cKmzNJMZBJmKXoDAZDX9oyeVOoVwBlNoroz3Oh6L///vsrXeLPOnhlVq9PlmqHw4FIJILFxUV4PJ6+bDhK7yyXyygUCkpwXq8XPp8PHo9HLbVpsNAay3iQCwW9kOWcu8yo8CNfnp+dncFgMMBqtapZvt1uq8QeAMoGQDnrlL46KAyYAnNI8HQfT2kdh6ty1Wndbh6PB19++SW++OILxONxLCwswOFwqAGQYibo8xfBf+RC0f/pT3+6rvO4NdCXq9PpwG63IxaL4d69e/B6vWr2NhqN6HQ6as9MnW5sNht8Ph8CgQDm5+fVCoFmfBpMeBirNtiFRE+RcOQnp2AaEi5V4bHZbHA6ncoA1263VdovJcJQEM+weH3g4wDZ6XTU+Z6dncFkMo1l1CMGPc9oNKpqQDRo8m0N39qM87+xWq24f/++qiu4sbGBUCgEu90u+/cxuFD0P/zww3Wdx62Bvvi9Xg8Wi0Vl01FVG16okmeYkUAcDoeaaah9NH3htfHvfDlPlnRtZ1i+faClucFgUD3a7Xa78p+TeGhFQtF4/Fi6RhIz/U2YTKa+mb7dbsNgMPT58yfB5XJhfn4ePp9P9dwzm83qs6vVairSjyL8+CBDIqZzcjqdWFlZwbfffotvv/1WlQqngUoYzYWfVCqVuq7zuFPQspsET8vtXq+nZtxBVnJuLyAB03Ha5/KBgr8vAGW1JrcdlfHihkYePUj3c2gbYrVa+xJvBmX48dcwGo2Ym5uDzWZTnXaj0SgikQj8fj9cLpcSPYUyU8w+GRt5N1z6POr1Onq9HkKhELa3t/HNN9+oGZ53/aHVgHiehiPD4xVAYtN2s70sJHi+RzUYDCoykBpaUlgu0B+sQsdaLJa+VQMPIdb2sddm2vFadnQ8rTi8Xi/8fj/C4TACgQD8fj/8fr/a7rjdbthsNmUroC1OpVJBtVpFtVpVBke+uqnX60in02g0GgiFQtja2lLpyzy5SYx1/Qwb+ET0nxDaLzZfglPsPd9+cOOXyWSC2WxWszQ33NFjtDrhtgttzD8vVAn8UrvfbrfD5/OpMmHxeByxWEzN7NRGmwYWvqfnWxryZPBtDdlNqOqOx+PB6upqn+DpWmV2Hw8JzhmDcau5TPLYZdD69rkRb25uTt3P6+5x0ZN9AYASPQX3cMs3uf8ov0C77TCbzbBYLHC73fD5fAiHw4jFYohGowgEAsqQOcl18cGFBoByuQy/349sNguz2YxQKASHw9G3j582BFqPSOz9GNzGz0EbRUfGPG0ILS3nOXympsHAbrfD7XbD4/Fgfn4eXq+3zwdOWwegf5tgt9tVqW+PxwOPx9PnN58EbmuglQcVDzWZTHC5XOh0Oqr7zywKk+gRWd5/omijAQcZ2LiBjgv/9PRUzd40W9vtdlWTPxAI9O3DSXi05CdRUpIPHctXBpcJ3+V2BrIbkJuStjJ3sd3XdSGivwNw0dPfBImUIga5hRvoL+lNy3ua7WnG15bq5nYAi8WiHuOPXxZuhadZn4yAvOiHMDki+k+ciyzWPGyY97bXWu5pqU7iJ5ebw+FQSTwkbC46Ej6tALTnc5lagIOuRVsyXJgO+eQEQWfITP+Jc5GrivbBwEfjHW8bRZhMpoEus3q9rqIJyUjIZ3pK7KHzmFWXnkH2AN748qoSgvSCiP4OwIN26G+Cx7eTj53y6AEoC7vZbFY5+7x7D+UYaA15ZAugppx2u13FxWvPYRr4NoHnK5Ahb25u7lZ6VT4FRPSfKDyklotem+Wm9eVrg2v477Q/p1j7er3eZ8TjgwqPxCOXHbn5nE5nX8vtSeD5/XSj5peFQgHdblf1AxTRT4cE54zBbQvOAT6Knvu1ebFObSgtCZ/XxQOgLPt0rlR8o1Kp9Fns6bVoEKH3t1qtA4NzFhYWLh2cQ+nC5XJZ1fazWCyIRCLweDx9S3wJzhkfCc4Zg9v2OfDkFl7vnoe68tr3JCaKZW+322pGpeeSmKmYJrfI8xh8EiQJ7qIwXJ/Pp+LteWgvoQ3vHTcM12AwqGQe/pkI4yHL+08Ivozn7jLaW5OrjfbfwMeEGx7jTr9ztx0NBrS8HxQbz39yA57FYoHD4cCHDx/w5s0bBINBFeBDSTd8AOAJN7xuABUToboB9F71eh2ZTAb1eh2hUAgmk0mtLAit61IGAUm4uVbI760tm8XDZYcVoAT69+KDkmxIaGTQoiq43KfO+7a32+2+19UW1CCLOIfbAS5KrSUPQaFQwNHRUV9xD4/Hg0AggEgkgkgkooTPU2upDBi1r240GudShqnXfbfbRSQSgclkgtfrRSgUUrUOtElGIvrhXCj6paWl6zqPWwV9sSmZhM9QPOKM9r/0ReU19aiYBo9B5yWmeW08PoPyIhq8o8xFRTScTqcyoDmdzr4iGjzNlguW7+sHDTj8vEY1utDe32g0UCqVcHJygqOjIySTSVVJiNp+kVeA2mdpi2jQYKItotFoNNDpdGC1WlVhjlgs1heLL4K/mAtF/+tf//q6zuNWwMXc7XZVuazl5WV4vV4VdjpOuSz6QvJ0VxITL2OlbQzJ76c8c/pJLivai1Psu9PpVBZ0u93eVy4L+KVWHhcFL4xJf3OrOd/D82YY01CtVlU+PA2awMdKwDTIDGqqoa0FAADFYhG1Wg1GoxFerxdzc3NotVoq805m/I8M66l4oej/8Ic/XMnJ3GZ4AUubzaYKY7rd7r4+cVSKalhhTBIgd3Vpe7tPUhiTblRoQlsY0+VyKVcWb3YBQK0aBrn0uPBpICDB8y3GJJ8ff326bhqALgO93unpKd6/f4+///3vqFQqePnyJQKBgHIv0iBIqyy9Fsbc3t4eeP+Fov/9739/JSdzm6EZotf7WAKbat0NKoHt9/sRiURUQUkyqPG9vJZut9tX0JIv9S8qgZ3L5fpKYJ+enirhayvAUglsAKpUt9VqRaPRODf78WW/dgaetBrNVdYQ4FQqFTx//hy7u7t9cQFutxuRSER5D2g7oceqOsNEL62qL4FWGNoAmVHppbwYhvbG+9A3Gg3VAz6TyeDk5ES1tDo9PVXLfJ7eyptdZLNZHB8fq7ZWNGBom1fyyD1+DrMSy6Cl9lUIkery6b3ZxZ///GdpVT1ryN01zvOG3U+vwffV2j22tsKu0+lENptV7aYBqIITtKTt9XpqSX96eop6va62EBSGO2gmpxUODWKXyYvXcl2iy+fzqNfrfam4Eqv/EQnOGYOLZqhBvuFpjUckMv7a2jRWHohjt9tVA0sKkuFda5vNJsxmc5+XgYyBPAyXBhfun6f3v+0z5KCtCgDl+RDOIzP9GAwL+hgkiEkFP8jKrH0Pmq24QZDup5p41FKLJ8u0Wi1lyde24AIwsFU1fw9eD2/YuXNuanAYZDwUhiOx95eAZkWe9DLNZzbqGHqc140jMVqtVtXgggyIJPqzs7OBe1qKoKNGGDxIhwYHch9S/DtPy+XXf9Pc9pXIbURm+inhiSwABia7zAK+EuCRfrQst1qtaqanyje83x7FvfNgnvn5edXmmkf6kbtOGx5LNel5sNAoocnse3sR0U8JBeY0Gg0YjUblKycX0SwhAfEEG5vNBoPBoPLKeeINDwaiWHzKe/d6vQgGg6rrLUW+8aAZchVSbECxWESlUlGRczQA8E64vCMNIEK/zYjop6DX6yGfz+PVq1dIp9Ow2+2IRqO4d+9eXyrqLCPCuJGQrPMU5w5AGfu0hSkpZJVE7/F4EAwG+5b22kKTPHiIIurop/ZGrakKhYJqT1WtVi+8BvpshJtBRD8F3W4X6XQaT58+xZs3b+B2u/HZZ5+pirN+v/9cr7hZwQWtbTapLapBKwBertrlcqmEFr605/EF2gw7yhXgeQHtdlu1pMpkMkgmk9jd3cX79++RSqVQKBRk9r+liOinoNPpIJvNYmdnB0+ePIHNZlOpn61WC4lEAsFgsC8WnDOtxZ8v8/lPemzYIENJNyT8QWmoF7kbueuODwYk/GKxiOPjY6yvr+Pg4ACpVAqZTAaFQgG5XA7pdBr5fH7kdQ37e9BgIQPI9Ijop6DdbqNUKiGVSuHdu3cAfkksoeSZZrOJjY0NBINBFb47KFJvlNgGoRW+9v5Br0OzPi9TPejYYX8T2gSdTqejillEIhEkEgmUy2WVLnt0dIS3b9/ip59+wuvXr5FOp8e6RuFqEdFPQbPZRLVaRblcVvclk0n0ej2VHXdycoKVlRX4/f6+7DcqfEF7f17HfRLh8yCecY4bFgcwCdqBhWwXdrsdHo9HrQRarRaq1SoymQyWl5cRDAYRi8X6VgDlchmNRgPA+UFo0gQfmfUnQ0Q/Aq0xjrdYPj09VfefnZ3h5OREVXl5/fo11tbWcP/+fRUHTnn2FFbLi05SNtgkgrxNcRS8qg8lHtFgEIvF8NVXX+H4+Bj7+/t49eoV3rx5g2QyiWKxeOn3BWS5Pwki+gmhOnJaI5XRaFR+7Fwuh1QqhWQyib29PSV6Ksjh8XiwsLCAUCiEUCgEv98Pu91+J4pA0CBJDSedTifC4TASiQSKxSIODg6wtLSEaDSK/f19ZLNZVTyDRwFq+/RpbQrkUZCY+skR0U8I7WW1hSX4TNPtdlEoFHB6eopMJqOW95QJNz8/j2g0ikQigQcPHiCRSCAQCKjurJ9yn7ZB9greCtvhcMDn8yGRSKhMQfIG8M9WW5uP31epVPCvf/0LT548UVsEAH3JNTLzD0dEPwXDElGo9htBkWzHx8cAoIJp3G43wuEwjo+PUavV0G63sb6+jlAoBKfTeSWuvpum1+vBYrHA7/djfn4eq6urfQLnqb3cVdhqtdTftMoqFAqqlNvz589RKpX60pSFixHRT8k0gqR0V4pmI6NfPp9HrVbDl19+iVgsBgDKzz9tPP9tg+/5AYysh6+tK8D/rlarCIVCuHfvHp48eYJ//OMf+PnnnyWrbkxE9FMwTIiTzDIUBkuhrp1ORxWMDIVCffX19Agt1bXVh7rdLlwuF8LhMH71q19hbW0NbrcbAPD+/XuUy+W+8tyyzD+PiH5CyEg1qYuNw2u95fN59SWlQWB7exvLy8vqyzzIx/8pc5l0ZJ5ibLVa8eDBAzSbTfj9fqRSKWSzWWQyGeRyOTQajXOlxmUQENFPDM0+lNgyDqO+aOVyGa9fv1YJLbSUjcVi8Hg8qhrOXRA8MNuBy+Px4NGjR1hdXVWxARQOPCgUWBDRj0T7BaVurRRpNwu63S4qlQr29/dhMBhwenqKQqGAra0trK2tIRwOw+Vy9UXUTRqc86kx7oxssViwsLCAhYUFdDodVCoVRKNRrK6uqqX+LBOf7gIi+imgVNVZiZ5oNiO8cUIAAAc9SURBVJv48OEDSqUSMpkMyuWycmdFo1E4nc5z/eDu6pd5muuizjdWqxXRaHRgLX1BRD8Vo0pcX4ZWq4WjoyPloiqXyzg+PkYikUA8HlduvXFEcRVf+Ns+yBgMBhX1KAxGRD8mfIlI2Wo2m+3K3i+Xy+Gnn37CyckJ3r17h+3tbXz99dfY3NxEOBxWjTQokOe6xDjOUnlYTUHhdiCinwJqghEIBGCz2VTZqVnOrN1uF8ViUWWsUfba4eEhlpaW4PP5VKALdXOh1cd1WvoH2RVuUuiynP/IsP+DiH5KPB4PlpeXsbKygv39/b7AkFm7hrLZLNrtNg4PD/Hs2TOEw2HEYjHE43Hcv38fsVgMgUAAHo9H1b6/Sh8/71NPxTioRh+vHDSKaT+jiwYVWVmMRkQ/JT6fDxsbG0gmk6jVakgmk+qxWc82fNb/8OGDSmKJx+NYW1vD4uIiAoFAX2dYqoFPsz+v5MOTWnhyC/CxGIe2BgAVAqUWXK1Wq6+cttlsVrH11EyTzoUGAm2EoQj0ZhDRj4l2+er3+7G5uYlMJoOjoyNkMhnVO+6qoUGmXC5jb29P+fIpZ5961pMIqdcb1dajMtckXl7amuIQqHouDRRUJosaZgw6jrr2RqNRrKysIB6PIxqNqvOzWCwqjZhu03CXXZXXgYh+StxuN+LxuEqjrVQqSKVSSkxXnfjRbreRzWaRzWYHPm40Gvvy9rXdbCn+n7e/BqCq6vJy2sDHzrcXdY4xGAzw+XxYWlrC2toaNjY2cO/ePfh8vr4+e1TGe9CN3pNWBZR5R+nMBoOh7/xm7TbVA9LAckooEGRvbw8//vgjnj17hrdv3+Lg4OBccQhtmarL7mUnPZ6q5tLx1NTiqoxedrtdBcz4fD44nU4lVJrhrVar6twbCAQQDocRDocRCATgdrvV+Xa7XdTrdeRyOZRKJdjtdoTDYYRCIbWCEIYycCkkop8SqqBTLpeRyWSwv7+P169fY2dnBy9evFBBNpLq2Z9hRzeKbPR6vYhEIlhZWcHKygoWFxfh9/tVXf9ut4tyuYxUKoVcLgen04n19XVsbm5ibW0NCwsLsswfjnStnSVUf55mJYfDAbfbDa/XC4/HA6/Xi7dv3+Lw8PBC4Y/rY78oSWXQEnfc3vKjimAOOteL8v21xUXotXhjTKJWq6FQKKBYLCKbzWJ/f1+VFaOZvtPpoNlsqhbbZrMZu7u7qFQqcLlcWFhY6HsfGQBGI6KfEhI9n7lsNpuqDhsIBFTkHEXYDWJa/762Us+0TPLew8R7WUqlEqrVKg4ODlQWI6/fTzn19P77+/twOBx4+PCh1MibAhH9JaBZjyzSvCSUy+WCx+NBNBpVe/xqtYpSqYRyuYxqtXptGWAXzX63QSzUQ2/cz6NQKKBer6uBQGb3yRDRXwI+G1FdeafTqSL2IpEItra2VI734eEh9vf38e9//xvJZBLpdLqvxttVcRuEPUvi8TgWFxfhdDrVfZIrPz4i+hnAg00oEIUs2CsrK2rvenx8jGQyiYODAxweHiKXy6n67+SSoswwbbkoin7jP7vdbt/f1/Glp0GO986j4B/ug9cWGSEbA69jx19HG0RES3zeF5Bahq2treHx48cIBAID/w/CxYj1/oqhpSt1gq1UKqoTDnV95T7wVqulQlx5QAwV2dQ2kuSvRcfzaLtJG0eQ6LStt0mIPHiHko6onr/T6VS/U2VfmoHpemhwo5URNdakctk8ipAXKzEYDMpgOj8/j0gkgnA4rKoLCQMRl91thMJbSfyUP08C4YMF3Wq1mhI8b6dFgwgXPTA6PkBbrprPtvx3+kliJD87Cdblcqnf7Xa7Sv6h4Bq6JlqVUGlsfqw2co+/H19dTFqyTKeI6D8FtHHxvFMsDQgkHBIR/U1hsXwJzf+/F4mefmpvvFkmv493w+URcpR0Y7FY1DF0PlQjgJb63F9PnX7oOL7CEKZGRH9bmKYw5KBa+7fJcKVNohl0TeOsNISZIqK/aS76rOVLL1wBEpF304iwhduAiP6WcZkl+1Uv929i0JKBcvbI8l4Q7i4DR0wxjQqCzhDRC4LOENELgs4Q0QuCzhDRC4LOENELgs4Q0QuCzhDRC4LOENELgs4Q0QuCzhDRC4LOENELgs4Q0QuCzhDRC4LOENELgs4Q0QuCzhDRC4LOENELgs4Q0QuCzhDRC4LOENELgs4Q0QuCzhDRC4LOENELgs4Q0QuCzhDRC4LOENELgs4Q0QuCzhDRC4LOENELgs4Q0QuCzhDRC4LOENELgs4Q0QuCzhDRC4LOENELgs4Q0QuCzhDRC4LOENELgs4Q0QuCzhDRC4LOENELgs4Q0QuCzhDRC4LOENELgs4Q0QuCzhDRC4LOENELgs4Q0QuCzhDRC4LOENELgs4Q0QuCzhDRC4LOMI943HAtZyEIwrUhM70g6AwRvSDoDBG9IOgMEb0g6AwRvSDoDBG9IOiM/w9RKt11xIJfMgAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 53\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 54\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 55\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 56\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO2dSXNbZ/beH8zDxQwSIECKpEiiJGuibUnd9qKdqs6m67/Npr9AKrts8iWyzVfIMrssu6vdm3RVly27ZEu0TMkaSBGgSGKeB2LIwnVeHVwCIACCg3jPr+oWKYAXuBfC8w5nNPV6PQiCYBzMl30BgiBcLCJ6QTAYInpBMBgiekEwGCJ6QTAY1lOeF9O+IHy6mAY9KDO9IBgMEb0gGAwRvSAYDBG9IBgMEb0gGAwRvSAYDBG9IBgMEb0gGAwRvSAYDBG9IBgMEb0gGAwRvSAYDBG9IBgMEb0gGAwRvSAYDBG9IBgMEb0gGAwRvSAYDBG9IBgMEb0gzJD/+1MK//G//h/+6//+Ablq67IvZyCnFcYUBGFM0uUm/sf/+Rntbg8vPpQQ1rbxP//Lg8u+rBPITC8IM6Jx3EG7+7GAdLnRvsSrGY6IXhBmxI2QG//tP63BZAIWfE789/+cuOxLGojplK61UvdeECak1e7Cbr0S8+nAuvciekG4vkizC0EQRPSCYDhE9IJgMET0gmAwRPSCYDBE9IJgMET0gmAwRPSCYDBE9IJgMET0gmAwRPSCYDBE9IJgMET0gmAwRPSCYDBE9IJgMET0gmAwRPSCYDBE9IJgMET0gmAwRPSCYDBE9IJgMET0gmAwRPSCYDBE9IJgMET0gmAwRPSCYDBE9IJgMET0gmAwrJd9AUI/pzQUPbdzx8FkGtgP8dq953VHutYKwvVl4IgpM/0FMmqAlRlNuChE9BcIFzYfAMYRfK/X6zv0z10W/Nrpd5PJNPCe6Dr19z7s74XzQUR/SQz7kne7XXQ6HfWz3W6j1Wqh2Wyi2Wyi1Wqh1Wrh+Pj4xM92u63OnWSA0IuVDrPZPPDfZrMZZrMZVqsVNpsNdrv9xGG1WmGxWNR7djoddT90ffw1HA5H33n0HjIgzB4R/SXT7XaVcBuNhhL28fExjo+P0Wg0UKvVUCqVUKlUUC6XUa1WUavVUKlUUK1WUS6XUavV0Gg00Gq10G630W631esDg2dZQi9qi8XSd5AA6Xer1Qq73Q6n0wmXywWPx9N3aJoGl8sFq9UKk8mEbrerBiu6NxK90+mEpmnwer3QNA1Op1OJnwYA+p3+za9LBoTJEdGfM71eD+12W4mXhFur1VCv11Gv15XgSbRc9K1WC7VaDdVqFZVKRQm9Xq+jVqup16zX62rQ6Ha7aLfbA2f6UZDguci5uPi/HQ4HHA4HXC4XNE2D2+2GpmnweDxwu91wOBywWq3qM9CvSEj0DodDnet2u+FyuWCz2fqEbrVa1WCjaRqCwSCi0Sii0Sh8Pt95/dddW0T0M4LPpN1uVwmv1WqhWq0il8vh4OAAe3t7SCaT2N/fRzqdRrlcRr1eV6KgpTD95Mt8/dHpdHB8fKyeP+vengaoUdCqgM+4JEqbzQaLxQKbzdY3C9N10efS6XQAoG9gsdls6nz9IGMymdDpdGCxWBAOh7GxsYFHjx7h66+/htfrldl+QkT0M4Dvn9vtNur1OsrlMrLZLNLpNDKZDNLpNPb397G7u4vd3V3s7+/j6OgI9Xr9si9/Iug+aVtyGdy+fRtmsxmJRAJra2t91yYDwOmI6M8AFwDNYLVaDel0Gjs7O3jx4gV++eUXpFIpFItFVCoVlEoltT8/bVadFaOEcJmW/2nZ2dlBKpVCrVZTj32K93FZiOjPAJ/xms0mKpUKjo6O8PbtWzx//hxPnjzB8+fPsb+/rwxql3WdVxm9vYB+0nNk+adBNhwOw+12K0OhMBki+imhpTxZ2PP5PJLJJF69eoXnz59ja2sLr1+/RiqVOjUoZ1w//aBzASiBcLjbbhTD3vs0K/+wc8kOMQl+vx9zc3OYm5tDMBiE1+uF3W6HyWRCr9dDrVZDPp9HpVKB1WrF8vIyvvjiC4TDYbWkp78VTkdEPyUk+lKppJbzL1++xNbWFp4/f453796hVCqd+kWc1MKuPxfAmVYRk7w3386MyyCfP3f7+Xw+LCwsYHV1Faurq4jH4wgGg3C73WqWL5fLSKVSyGaz0DQNGxsb+OyzzzA/P3/ivYTTEdFPSa/XQ7PZxMHBAZ4+fYqnT5/i9evX2NvbQyqVQqFQUH9LM+MoX/k46K3h42I2m2G322GxWJT9gTwF54HL5cL8/DwikQgCgUCfC48s9A6HA06nEx6PB6FQCNFoFJFIBOFwuG+m73a7qNVqyGazKJVKcDqdiEQiiEQiYrmfEhH9FPR6PbRaLRSLRbx58wb//ve/8a9//QsHBwfK186Z1X5+EpFarVYlKrfbrfbAANBsNpVfv9FoKLcfnWe1WlWEHEXVNZtNNBoN1Ot1NJvNgddiNpsRCoWwuLiI9fV13Lp1CysrK2rmptfkB/n76SAfPR8oO50O4vG4MnzyKEBhckT0U1Iul7Gzs4OtrS1sbW3h7du3J8R+ntjtdvj9fvj9fhUFR1Fy9JPE7na74XQ6YbVaVaAMiZhHyAG/rybIZ07+dhIeHyyazaYKqQV+F7zL5UIgEEAsFsPy8jJWV1exsLAAn893ItKOZvxp4NcqTI6Ifky4D7jX6yGXy2Fraws///wzksnkhQre4/GoffDa2hqWlpYwNzcHv9+vItucTiecTmdfdBtdvz6+n9sVePANNzJSsBENGHTQCsFisajoPB6SS9fAg27OKlYR+9kQ0U9JLpfDq1ev8OuvvyKdTvc9N2tLstlshs/nQygUQiQSQTQaRTwex+rqKm7evIlYLIZwOAyfzwdN004szWcNRQJSSC0ANXtPMoOf1bYhTIeIfkrK5bKKrms2m33PzdpANj8/j42NDTx48AB37tzB4uIiQqEQgsGgWt7z5fN5i4J86k6n80xL7fO4TnHbfWTY5yuin4JOp6Pi6RuNBoCPy+JZGe1odl9YWMD6+joePHiAhw8f4s6dO4hGoyoxhZJjBnFeAhiUQz/sfS96VpZVwOmI6MeEf5m4Iey8mJubw507d9TsnkgksLKygkgkAk3Thgr9vBlHVCK8q42Ifgoo5/08YuedTifC4TA+++wzfPXVV3j06BESiQSi0Sg0TetLVwVGC8yI4uv1eirteBaZh58ysVhs4OMi+ikgy/Ws4+mdTidWV1fx+eef4+HDh7h37x7W19cRiUTg8Xj6KtGQsfC6ZpaNK1Z+751OB6VSCalUCqlUCqVSSXkX+N8aZSD461//OvBxEf0p6EXV6XRUoYtZ7t81TcPi4iIeP36Mb775Bpubm4jFYsrHTSLnLq/rKHZi3HujIKlCoYBKpYJ0Oo03b97g7du3yOVyfaI3GiL6GUH+aipiMQ76L7B+pvH7/UgkEvjyyy/x+PFjbG5uYnl5GV6vV0WnXSeB6+//LPdWLpfx448/4qeffkIymUQ2m8Xh4SHy+TwajYaKQxj0PuNcx6CVlP71hq22rsLrD0JEPyG8os24y8Rhf2ez2eD3+7G2toavv/4af/rTn1QiCe3fKUjmOjHt/dB2hj7/arWK58+f49tvv8U//vGPE0lOknk3GBH9FAzLjDObzWMv+T0ej/K/b25u4vHjx7h79y7i8TgcDkdfTrkR4SXH6Hf6d6VSQSqVwosXL/DkyRN8//332N7ePuFNEcEPRkQ/JdN8oSjbzev1YmFhAYlEAg8fPsTnn3+O9fV1zM/Pq6ST61b6mafl8nLY9DuvPsRDfnl1X3osl8vh6dOn+Oc//4lnz56NlcIsfEREPwXDGjToXXgejwderxder1dlmbndbgQCAcTjcWxsbODu3btIJBIIh8MqdPa6CR74/TMjo9vR0REODw+Ry+VQrVbRaDT6avbzQqCUAcgHimKxiFevXuHHH3/sqzFIgUqTbL2MiIh+QvSlnfjj9EWzWq3w+XxYWlrCysoKYrEYQqEQvF4vPB4P/H4/wuGwygsPBoMq3/y6CJ7P7FQstFAoIJlM4pdffsEvv/yCnZ0dZDIZ1Go15Q3hmXs0+/PCHbSnp/LhHPp7YTQi+gmxWCwDc7m73S6cTqdauq+srGBtbQ2rq6uIxWIIBoPQNE1lwdFBy/nrNsNTkdB8Po/Dw0N8+PABBwcH2N3dxcuXL/Hq1Sskk8m+YiPTQKm/MrOPj4j+FPQipK4slDJKWK1WRKNRrK+vY3NzE/fu3cPy8rKa4SlWnqe66ptJTCL4y4xvHwS3rLdaLVUk9PXr13j27Bl+/fVX5VLL5/MolUozKf8tgp8cEf0UUEUav9+vHltaWsL9+/fx5Zdf4tGjR7h9+zbm5+dht9tPJMUM6x03LvovOvfjjlPo8jT/7mmvwQXOi2uUy2WUSiUUi0Vks1kcHBzg1atXePbsGba3t0+kIA96v3HLdZ+19JiREdFPAVWtWVpaQiKRgNPpxN27d5UlfmNjA/Pz86q4o56zBKfwvbJ+th80gOg77/DGHPpzh10LP4cb2kjs+Xxede/hjTzy+Tzy+bz6fdz749clop49IvopsFgsmJubw927d2G32+HxeHD79m3cv38fiUQCwWAQFotl6BL8rMEp3O1F70GrCX30nl6ovPgFP5eXttafQ+259JVzarUayuUy0uk0kskk3rx5g3fv3iGZTCKXy41tVBsmbBH8+WA65YOVT30AvV4PqVRKVc1xuVxYWFjAjRs3lK+d/m6W+22+pCbx8nJVg7wK+lm5UqmoDrfkYqQGE3Stg/6+Wq2qbrm8cSZ11M3n88jlcsjlcqhUKkPvwWhJL5dJr9cb+OUT0U9JrVZDoVBAo9FQRSGpRfN5lKnSG8p4W+ter3einTMV9KCOueVyGYVCQS25K5WKqmrLRU/lsavVqmrBVSgU+tpx6bvkzjL5SJgdIvoZwyPKaGnMu6zOEr6sp+U1zbyUVELNI8g7QI0iGo0GKpWKSkQ5PDxEJpNBqVRCo9FAt9vt29Pz16e22rw9NlXQPU3kg+wKl4VRbQPDRC97+imhLi00q/MuLrNEb4jjve5LpRKq1apq40wFMcmVeHx8jFqtptpkp1Ip7O/vI5PJoFgsotVqqe0BrSJI9BT8QjM5b4c9joCuksiu0rVcBUaKXj6sk4wyyE1bJHLU58yX9WRQI8EXCgWUy2W0223VoIIi+4Dfi32QoW1/fx/JZBIHBwdq380NenrRUz18XhN/1Gdx2n2cF3pvhWwzTkdm+lOYpBzVNLP8IH+z3h/Ol/W0N89ms0q8JHpeEZfKRpVKJRXrnk6n+wJjeKILFz1Pghnn2i+bq3IdnwojRX8VIr2uKudRvYb7w/WzLxnjKKyVIttIvLy7jdVqVT3gisUiMpmM2sfzBBc+y/PGFyR2PoteVWENuy6XywWHwzGyWrBRkZn+DOgDXvT7+tMEQ+cPOmi2JUt9uVxGLpdDOp3G0dERcrmcWtqbTCbVEJIy9SgphZeSqtVqqh0VGSH198Bn/kGBPGflIgx8oVBIdb91Op0qZuKqDlwXzUjRv379+qKu40rARdrr9WCxWOB2u+HxeFQ4LW/zxEth8301n3H56xL6YBmquUd7aHqMDHaVSgWFQgG5XE7N8OVyWbXSolne6XSqAhwk+lKphHK5jHq9rt6DMtn0gr8IZvU+JpPpRNqyzWZTvQIos1FEf5KRov/222/PdYk/6+CVWb0+WcndbjcWFhawuLgIn8/Xlw1H7rBisYh8Po9mswmHw4FAIIBAIACfz6c6xeo7sPLBggJfarWacolRCedKpaJi2YvFovKT1+v1vg6u1KySL2l7vR4ajYZytTWbTWWU47M6cLIWG50/zfL+vGZyvdvN6/XiwYMHuHfvHm7evIm5uTm43W7Y7XaVzehyudTnL4L/yEjR/+1vf7uo67gy0Jer0+nA5XIhHo/jxo0b8Pv9avY2m819oqdONw6HA8FgEOFwGIFAAB6PR828PFiGZvF6vd4X5UZuMhJruVxWB+3Fj4+P0e12YTab+wRPqwPK/qMgGz7D83h9HnZLcMMdvQd9FuMySFzk3qRYBoK2F/qQ4tOw2Wy4efMmvvrqK3zzzTf47LPPEIlE4HK5ZP8+BiNF//3331/UdVwZaBbv9Xqw2Wwqm45mUH24KvnC2+222g7QloBmHip/xctA8VJQtOTmce40MPC20GR4I8Hb7Xb1Gny5TsLir83FToc+889isaith8lkUvYC/plMOmNqmqZWP16vF06nUw0mtKIplUpq4KPAHxqA6F4oAMntduPGjRt4/Pgx/vjHP2JzcxPxeFxtpYTTGflJpVKpi7qOa4XJZFKipBx6LnpuLBuWGadvI60Xrc1mO9FXnkRM70cDhd4ab7VaTwwE3F6hL1tFP/VVbPjKgGL+qQ6gy+WC1+tFOBxGNBpFNBpFOByG2+1W106hzBQaXCwW1SDHPx/6WwCIRCJ48OCBSl+ORqN9XX9opSaep+HI8HgO9Ho9NVvPEhItXyI3m01YLBbYbDY0m00lfF4rjsRosViUD5/vkXmWnX75ra/zz918fNXhcrng8/kwNzeHSCSCcDiMcDiMUCikOuxSd10yNOrDfWmrQ1l8tIqhJhbVahXRaBR3797FxsYGIpFIX3KTGOv6GTbwieg/IQZ9sS0Wi9qzt1ot2O12tTyn52lPzZfNtIrgNf8GJe3Q+/JVCu3x6VxN0xAMBvvKhFE7bX0bbb6l4KsJGiRJ8GTzaDQayOfzeP/+PdLpNAKBANbW1voET9cis/t4SHDOGIxbzWWS584CGb/IoEgeARImxd6TwGh2J+g8glYK3PVH7j+r1apaYvN7ooGEqgjRMn5paQnxeBzhcFgZMie5L+7GpAGgUCggGAzi6OgIdrv9RDNPfl3ynT0dib0fg6v4OegDe/heG/g4Cw+yZpN9gbvoHA4HXC4XPB4PPB4PfD4fNE2Dx+NRrkDK3qNBwuFwQNM0eL1e+P1++P1++Hw+JXZeQ3AcyN5AA4rD4UCn01HGP4/Hg06nA4/Ho66FnyuMhyzvP2FoxteXzuIFNYCT5bD4TE//Jtefx+NRe/BgMKhE7HK5lGGSRE/ncL84r91P1zgpZGOgoBqTyYRQKKS2MrTyEKFPh4j+E0WfoKO38PPSWYMESI+R8c5ut/fN3IFAAKFQSLnauPuRLPR0Du3ZSfCz8JVzQyOtKsgPT/YHEf10iOg/YXgDCIILnbvxyGKu39/TczR7c4G5XK4TNfq5sY+X9KZVhd7QOKs0Y73YRfDTI+FLwrkhwryayEz/CUOzuL6IhD41l+/9ub+dXkNfbJNXzqEwYrKs06xOy3labfBoxbOIfZgtgLv39JWGhckQ0X+i6C3X+r071b4D0OcL500huZ/ebDarYBlefYfKc5GRji/tuSGPxE+GvrPu6/nAxQciMuTxiEJhMkT0nzBcsHwQoJkb+Oj75gE8PPmG7/v1BTKpCAd32fG9td5lR9mFmqapxJ9p9vS8nkCn00G1WlXltbvdrmoEKqKfDgnOGYOrFpwD9Fvo9c0q6L1pSU9Cp/RaXi8fgFouk9ioBDavrjsqOMfr9SIUCvUF58zNzc00OCeZTCKdTsNms2FxcRHBYPCEB4M+F2E0EpwzBlftc6AZnofQkiuNC5QKffCZnjL29Mt7feFN7munAKBBYbhWqxUul0uJ/ubNm1hdXcXS0pIKw6XmnXRt5I7TFxMhkevDcHO5HPb29pDJZOD3+2G1WhEKhZRdgq5FGA9Z3n9C8IQb7mKjGZn23CRYXiyDp9nqc+v1tfuB/pXCsGw7uiZKuPH7/Xjz5g0ikQjm5uYQCARU4g35+2mbQAMMrxvAE24oFr/dbqNareLo6Egl3NjtdoTDYUQiEdVE9KyuwuuIJNxcICaTSVm3SZjAx+UrD52lv6eDC1WfWsv/joxpPDiG173n+fC87h4t7adNreXXzcN+zWYzDg8PT02tpZj5drutUmtzuVxfld5BqbX1eh29Xg+5XA5WqxWBQADRaBSBQAAOh6Mv4lBSa0czUvRLS0sXdR1XChKdzWZTddgo/ptbpnmb5uPjY1VEQ9M09dPpdKqAEv1ye1QRDVri6mc9oD9fn4JoKAyWV86h4hf6/bh+tgb6XX30PAl+nJLY/LlGo4FSqYTDw0N8+PAB79+/V0Y++hy73a7yFtAsT9Z5GpB4GjHdB3X0cTgcCIfD8Hq9iMfjfUZDEfxoRor+D3/4w0Vdx5WAi7nb7apyWcvLy2ovabfblYAbjYaaqRqNBpxOp1rSUv44+bmBj7X3qIzVsBp5VEWGauJxUVDhDBI+uc141Bwvl0Xi0q8k9Ak6dH100BZg0lJWeui6s9lsn8GRDzLD3oNfI61cisUiqtUqLBaLmuVbrRYikUhfa3CZ8T9WHdIzUvR/+ctfzuVirjIkaMruosKYXq/3RJ84qjbLC2P6/X6VqMILM/LX5V1hSeBUA48XxqS9LnWzoS88iZ+E73A4hhbGJNHb7XY0Go0Tvnxi0LaC599P8vnx1wSgBqBZ0W63sbOzg++++w7VahUvXrxQhTHJjUh5/EYujLm5uTnw8ZGi//Of/3wuF3OV4bMhX64PK4EdCoWwsLCg+slRHjovga2n2+3C6XRC07Q+3zkvg01L/FElsJvNJoCPJbB5llun01G2BKq3Z7PZlPAHzbjAyVr+k1ajOc8aApxyuYxnz57h7du30DRNrXC8Xi8WFhZU3XvqImzEqjrDRC9da8+AXiB6g9hp6aX6nHj9Qfv9er2uutuk02kcHh729aMzmT42u6CZnne4yWazSKfTyOVyyljGo/L0S23umjvL0l7PoKX2eQgxFAohFosZvtnF3//+d+laO2v09epG/d2wx3ne+KCj0+n05azT4fV6USgUUKvV0Ov1VKAM2RDIJsHr0ZFhkBfU7PV6apAgY9lZ6t6P4qJEl8vlUKvVlNGQ7k/4HQnOGYNRM9Qg3/C0xiNubKPX5n3vyU3HY9/L5bJKmeVda7vdLur1el/bal5skkRNqwpaoRwfH6sknGmW9xeN/rOmayX7iHASmenHYFjQxyBBTCr4QVZm/XvwcFvgo5Wd4gFGtarmsz2vgU9VaLjhjuwS5Cfn0XfDrn3Y53SRDDIeCsOR2PszwEWvz3SbhNPOoefJZeh2u5V4bTabmukpQIdEf3x8rCre0KBBg0OpVOrz/QPo65BL7sNGo4FWq3Wi/DXd/2Vz1VciVxGZ6aeEB68A/XXpZjlY8pUA1ZgnF12v11M57TzHnffbowAhsvB7PB4Eg0GUSiU1o/NtBbkTK5UKqtWqam9NPfQoNv60PbLMvlcXEf2UUB+7er0Os9msKsnScnqW6OvZUaw7Le+Bj2Ws9aWrjo+PVUlrr9eLYDCIaDSKSqWCZrPZZzegc3hMPLW6pkaafACglQBFEnJE6FcXEf0UUAz49vY2Dg8P4Xa7EYvFsLS0pIpI0N/NatbnRkLepYaLng6eyUb7fBqUfD4fotGoEivt7/Wx9zx4iGZ96nFPj1erVVSrVdW5l3LeK5XKqfchg8LlIaKfgm63i6OjIzx58gS//fYbPB4Pbt26hePjY5X2yWP0Z7nc5znz5JrjwTb6ghrkzqPlvdfr7fPR0/Xpz9Onveobb1K4cLlcRiaTwd7eHt68eYO3b98ilUohn8+fmP3peoTLRUQ/BZ1OB5lMBltbW3jy5AmcTifS6bTa8yYSCczPz/fFgnOmtfjzZT7/Sc8NMyaS8MnNNygNdZQRkofT8th8yr0vFAo4ODjAxsYG3r9/j1QqhXQ6jUKhgGw2i8PDQ+Tz+VPva9i/Bw0UMnhMj4h+ClqtForFIlKpFF6/fg0AfUvgRqOB27dvY35+vs9yrvfjc6FNK3z944Neh5b6+mw7/bnD/k1wqz1F8vl8PhWKvLGxgXK5rEKGP3z4gFevXuHZs2fY3t7G0dHRWPconC8i+iloNBqoVCoolUrqsWQyiV6vpwxgh4eHWFlZUT3dBhWW5Nb+STq26IN4xjlvWBzAJOgHFm5U9Pl8aiAg6386ncaNGzcQiUQQj8f7VgBkBAVODkKTzOL8cxDGQ0R/CnpjHKXU1mo1HB8fq8fb7TYODw9Rq9WQTqexvb2N9fV13Lx5U8WBezwelQJLOfeUKMKz8cblKsVRcLsCxQLQYLC4uIjPP/8cBwcHeP/+Pba3t/Hy5Uvs7e2hUCic+X0BWe5Pgoh+QqhwpN5IRQUeGo0GstksUqkUkskkdnZ2EIvFVL04r9fb18c9EokgFAopFxxwtcQ8Kbz4hcfjgaZpiEajSCQSqsDl0tISYrEYdnZ2kMlkUKvV0Gq1+nLrB2X68dRf8ipITP3kiOgnRP/F5I8T3W4X+Xwex8fHSKfTqhccBdUEAgHEYjEkEgncvXsXiUQC4XBYJcvMOsDnIhlkr7BYLGrm1zQNgUAAiUQC+XxexQtQoBP3GnDPAX3m7XYbpVIJL1++xA8//KC2CAD6kmtk5h+OiH4KhiWiUO03olKpoFKp4ODgAABUCizlfB8cHKBaraLVamFjYwORSASapp2Lq++yoZDhYDAIv9+P9fX1PjGT2PVpxc1m88QgkMvlsLS0BJPJhGfPnqFYLE5d9MOIiOinZBpBUjUbim2nUli5XA7VahWbm5uIx+MA0Bcwcx3Ez/f848ATfvSDQbVaRSQSwY0bN/DDDz/gu+++w4sXLySrbkxE9FMwTIiTzDK0rC0WiygWiyrDrd1uIxKJwOPxqDh6I8IThDjU4SYajeLWrVtYX19X3W7evXuHUqnUV1dPlvknEdFPCBmpJnWxceiLSEtV+jcNApubm1heXobX6wWAgT7+T5mzpCPzFGO73Y579+6h2WwiHA4jlUohk8kgnU4jm82iXq+fKDUug4CIfmJo9uGJLadx2hetWCxie3tbZbTRUjYej6uy0VSQ8zowy/vwer348ssvsba2pmIDKBx4WCiw0RHRn4L+C8pTWM/amZXodrsol8vY3d1V1Wvy+Tzu37+P9fV1RKNReDyevoi6SYNzPjXGnZHtdjvm5hHX7DUAAAdbSURBVOYwNzeHTqeDcrmMWCyGtbU1tdSfZeLTdUBEPwWUuTYr0RONRgPv3r1DsVhEOp1WOe+tVguxWEx1h9HH3F9Hprkvi8UCv98Pu92OWCwm7ayHIKKfgtNKXJ+FZrOJDx8+KHdWqVTCwcEBEokEVldXlVtvHFGcxxf+qg8yJpNJRT0KgxHRjwlfIlK2mtPpPLf3y2az+Pnnn3FwcIDXr19jc3MTDx8+xJ07dxCNRlUnWArkuSgxjrNUHlZTULgaiOingJpghMNhOJ1ONBqNmddq63a7KBQKKBQKyOfz6vf9/X0sLi4iFAohFAohEAioPna0+rhIS/8gu8JlCl2W8x8Z9v8gop8Sn8+H5eVlrKysYHd3ty8wZNauoUwmg1arhYODAzx9+lRlrVEv+MXFRYTDYfh8PrjdblUT77x8/LygBhXjoEIdvHLQaUz7GY0aVGRlcToi+ikJBoO4ffs2kskkqtUqksmkem7Wsw2f9d+9e6eSWFZXV7G+vq5EHwgEVBov9bXjPet5CW196Ku+io6+BgBvvkkttyhmHvg9BNnlcsHtdqvEIroWGgj0EYYi0MtBRD8m+uVrKBTCnTt3kE6n8eHDBxwdHc20SeMoaJAplUrY2dlRvnxa4lOLKxIh9Xqj2npU5prES22sgI9xCNQKmwYKioOngpiDznM6nQgGg4jFYlhZWcHq6ipisZi6PpvNptKI6ZiG6+yqvAhE9FPi9Xqxurqq0miLxSI+fPigxHTeiR+tVguZTAaZTGbg82azuS9v3+12w2azodfrqRZXJGBKawU+Fsbg5bQBqHNGdY4xmUwIBoNYWlrC+vo6bt++jRs3bqjUYdp28MYc+oPbJWibxNOZTSZT3/XN2m1qBKSB5ZRQIMjOzg6ePn2Kn376Cb/99puqEceLQ+jLVJ11Lzvp+WazGXa7va/aLe9nN2tcLpcKmAkGg9A0TQmVZngq1KlpGsLhMKLRKKLRKMLhMLxer7peasSZzWZRLBbhcrkQjUYRiUTUCkIYysClkIh+SqiCTqlUQjqdxs7ODl6+fImtrS08f/5cBdlIqmd/hh0dFNno9/uxsLCgtgPxeByhUEg1n6RYhVQqhWw2C03TsLGxgTt37mB9fR1zc3OyzB+OdK2dJVR/nmYlt9sNn88Hv9+vfv72229IpVIjZ9RxfeyjklQGLXH1fedHvf8478evdVS+v764CL0W5btzqtWqckdmMhns7u6qsmI00/d6PdRqNVVww2q14s2bNyiXy/B4PJibm+t7HxkATkdEPyUkej57OZ1OVR02FAqpEtipVGrojD+tf19fqWdaJnnvYeI9K8ViEZVKBXt7eyqLkZflppx6ev/d3V243W588cUXUiNvCkT0Z4BmPXJJUUkoclv5/X7E43Ekk0kUCgVUKhUUi0WUSiVUKpULywAbNftdBbFQD71xP498Po9araYGApndJ0NEfwb4bET7VPrpdruxsLCA+/fvqxzv/f197O7u4v3790gmkzg6Ouqr8XZeXAVhzxIKSNI0TT0mufLjI6KfATzYhGZ9smCvrKyovevBwQGSyST29vawv7+PbDaLUqmEer2uXFKUGaYvF0XRb/wndZo5b2u8/l5pCU4HBf9wH/ygNln6Onb8dfRBRLTE530BqWXY+vo6Hj16hHA4PPD/QRiNWO/PGd7+mTrgUONH3vqZ/N/NZlOFuPKAGCqySU0k6eCvRefzaLtJG0eQ6ChIhzfjoOd4iyxqf00xAfQ7VfalGZj3waOBzWw2w+FwQNM0dXBfPS9WYjKZlME0EAhgYWEB0WhUVRcSBiIuu6sIhbeS+Cl/ngTSbDZVo0g6qtWqEvygQYSLHjg9PkBfrprPtvx3+kliJD871bf3eDzqd5fLpYJsqOsN3ROtSsgOws/VR+7x9+Ori0lLlhkUEf2ngD4unpeCpgGBhMNFRDMobzIJ9At9lOjpp/7gzTL19gua8XmEHB18ic8r2fJYf+6vp04/Nputb3kvEXdnQkR/VZimMOSgWvtXyXClT6IZdE/jrDSEmSKiv2xOC9IRhBkjEXmXjQhbuAqI6K8YZ1myn/dy/zIGLRkoZ48s7wXh+jJwxBTTqCAYDBG9IBgMEb0gGAwRvSAYDBG9IBgMEb0gGAwRvSAYDBG9IBgMEb0gGAwRvSAYDBG9IBgMEb0gGAwRvSAYDBG9IBgMEb0gGAwRvSAYDBG9IBgMEb0gGAwRvSAYDBG9IBgMEb0gGAwRvSAYDBG9IBgMEb0gGAwRvSAYDBG9IBgMEb0gGAwRvSAYDBG9IBgMEb0gGAwRvSAYDBG9IBgMEb0gGAwRvSAYDBG9IBgMEb0gGAwRvSAYDBG9IBgMEb0gGAwRvSAYDBG9IBgMEb0gGAwRvSAYDBG9IBgMEb0gGAwRvSAYDBG9IBgMEb0gGAwRvSAYDBG9IBgMEb0gGAwRvSAYDBG9IBgM6ynPmy7kKgRBuDBkphcEgyGiFwSDIaIXBIMhohcEgyGiFwSDIaIXBIPx/wHmytOkJd7hoQAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 57\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 58\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO2dSXNaadbn/yCGyywGgZBkC1si0mMqM+2srFxUVUT1pqK3vakv0NG73rxf4t32V+hl73pZFZW16YqoqkxXuNJ22pYnjWgAMV1mJKAXjvP4cAUIEJKw7vlF3EBmvBfzf4YzWjqdDgRBMA/Wqz4BQRAuFxG9IJgMEb0gmAwRvSCYDBG9IJgM2xmPi2lfED5fLL3ulJleEEyGiF4QTIaIXhBMhoheEEyGiF4QTIaIXhBMhoheEEyGiF4QTIaIXhBMhoheEEyGiF4QTIaIXhBMhoheEEyGiF4QTIaIXhBMhoheEEyGiF4QTIaIXhBMhoheEEyGiF4QJsj//XcK//V//T/89//9BLlK86pPpydnFcYUBGFIMqUG/uP//IyTdgcv93WEPa/xn//ty6s+rVPITC8IE6J+3MJJ+1MB6VL95ArPpj8iekGYEDdCbvyP392GxQLM+zX8z/+SvOpT6onljK61UvdeEEakedKGwzYV82nPuvciekG4vkizC0EQRPSCYDpE9IJgMkT0gmAyRPSCYDJE9IJgMkT0gmAyRPSCYDJE9IJgMkT0gmAyRPSCYDJE9IJgMkT0gmAyRPSCYDJE9IJgMkT0gmAyRPSCYDJE9IJgMkT0gmAyRPSCYDJE9IJgMkT0gmAyRPSCYDJE9IJgMkT0gmAyRPSCYDJE9IJgMkT0gmAybFd9AkI3ZzQUvbDXDoPF0rMf4rX7zOuOdK0VhOtLzxFTZvpLZNAAKzOacFmI6C8RLmw+AAwj+E6n03UYH7sq+LnT3xaLpec10Xkar73f84WLQUR/RfT7kbfbbbRaLXV7cnKCZrOJZrOJer2u/j4+Pj51e3Jyol47ygBhFCsdVqu157+tViusVitsNhvsdjscDsepw2azYWZmRn1mq9VS10Pnx9/D6XR2vY4+QwaEySOiv2La7bYSbr1eR6PRUCI+Pj5GvV5HtVqFrusol8solUqoVCqoVqsol8uoVCoolUqoVqtqUDg5OcHJyYl6f6D3LEtwUQNQwqODBEh/22w2OBwOaJoGl8sFr9fbdXg8HrhcLthsNlgsFrTbbTVY0bWR6DVNg8fjgc/ng8fjgaZpSvx0HvR3r/OSAWF0RPQXTKfTwcnJiRIvCbdaraJWq6FWqynBG2dyGgyq1SoqlQrK5bISeq1WQ7VaVe9Zq9XUoNFut3FyctJzph+ExWI5JXIuLv5vp9MJp9MJl8sFj8cDt9sNj8cDr9cLt9sNp9MJm82mvgPjioRE73Q61WvdbjdcLhfsdnuX0G02mxpsPB4PgsEgYrEYYrEY/H7/Rf3XXVtE9BOCz6TtdlsJr9lsolKpIJfL4eDgADs7O9jZ2cH+/j4ymQxKpRJqtZoSBS2F6ZYv841Hq9XC8fGxevy8e3saoAZBqwI+45Io7XY7ZmZmYLfbu2ZhOi/6XlqtFgB0DSx2u1293jjIWCwWtFotzMzMIBwOY3V1FY8fP8b3338Pn88ns/2IiOgnAN8/n5ycoFarQdd15HI5ZDIZZDIZHB0dYW9vD1tbW9ja2sLe3h7S6TRqtdpVn/5I0HXStuQquHPnDqxWK5LJJG7fvt11bjIAnI2I/hxwAdAMVq1WkclksLm5iV9++QUvX75EKpVCsVhEuVyGrutqf37WrDopBgnhKi3/47K5uYlUKoVqtaru+xyv46oQ0Z8DPuM1Gg2Uy2Wk02l8+PABz58/x08//YTnz59jb29PGdSu6jynGaO9gG7pMbL80yAbDofhdruVoVAYDRH9mNBSnizs+Xweu7u7WF9fx4sXL/DixQu8ffsWe3t7ZwblDOun7/VaAEogHO62G0S/zx7Gyt/rtWSHGIVAIIBIJIJIJIJgMAifzweHwwGr1Yp2u41qtYp8Po9yuQybzYabN2/i66+/RjgcVkt6i8Uy9YPbtCCiHxMSva7rajm/vr6O58+f48WLF9jY2ICu62f+EEe1sBtfC+Bcq4hRPptvZ4all8+fu/38fj/m5+eRSCSQSCSwsLCAYDAIt9utZvlSqYRUKoVsNguPx4PV1VXcvXsXc3Nzpz5LOBsR/Zi02200Gg0cHBzg6dOnePr0Kd6+fYvt7W3s7++jUCio59LMOMhXPgxGa/iwWK1WOBwOzMzMKPsDeQouApfLhbm5OUSjUczOzsLj8SjfO1nonU4nNE2D1+tFKBRCLBZDNBpFOBxWMz35+KvVKrLZLHRdh6ZpiEajiEajYrkfExH9GJDfuVgs4v379/j73/+Ov/3tbzg4OFC+ds6k9vOjiNRmsylRud1utQcGgEajofz69Xpduf3odTabTUXIzczMoNPpqFiCWq2GRqPR81ysVitCoRAWFxeRTCaRTCaxvLysZm56T36Qv58O8tHzgbLVamFhYUEZPnkUoDA6IvoxKZVK2NjYUPv3Dx8+nBL7ReJwOBAIBBAIBFQUHEXJ0S2J3e12Q9M02Gw2NWA1Gg01QFGEHPBxNUE+c/K3k/BokKAgIAqpBT4K3uVyYXZ2FvF4HMvLy1heXsb8/Dz8fv+pSDua8ceBn6swOiL6IeE+4E6ng1wuh19++QU///wzdnd3L1XwXq9X7YNv376NpaUlhMNhtZQmkWua1hXdRudvjO/ndgUefMONjBRsRAMGHbRCmJmZUdF5PCSXzoEH3ZxXrCL28yGiH5NcLoc3b97g1atXyGQyXY9N2pJstVrh9/sRCoUQjUYRi8WwsLDQZfwKh8Pw+/1K8LQ0vwgoEpBCagGo2XuUGfy8tg1hPET0Y1IqlVR0XaPR6Hps0gayubk5rK6u4ssvv8S9e/ewuLiIUCiEYDColvd8+XzRoiCfuqZp51pqX8R5itvuE/2+XxH9GLRaLRVPX6/XAXxaFk/KaEez+/z8PFZWVvDll1/i0aNHuHfvHmKxmEpMoeSYXlyUAHrl0Pf73MuelWUVcDYi+iHhPyZuCLsoIpEI7t27p2Z3soRHo1F4PJ6+Qr9ohhGVCG+6EdGPAeW8X0TsvKZpCIfDuHv3Ln7961/j8ePHSCaTiMVi8Hg8XemqwGCBmVF8nU5HpR1PIvPwcyYej/e8X0Q/BmS5nnQ8vaZpSCQS+Oqrr/Do0SM8ePAAKysriEaj8Hq9XZVoyFh4XTPLhhUrv/ZWqwVd15FKpZBKpaDruvIu8OeaZSD44x//2PN+Ef0ZGEXVarVUoYtJ7t89Hg8WFxfx7bff4re//S3W1tYQj8eVj5tEzl1e11HsxLDX1mw2USwWUSgUUC6Xkclk8P79e3z48AG5XK5L9GZDRD8hyF9NRSyGwfgDNs40gUAAyWQS33zzDb799lusra3h5s2b8Pl8KjrtOgnceP3nubZSqYR//etf+Pe//43d3V1ks1kcHh4in8+jXq+rOIRenzPMefRaSRnfr99qaxrevxci+hHhFW2GXSb2e57dbkcgEMDt27fx/fff4ze/+Y1KJKH9OwXJXCfGvR7aztD3X6lU8Pz5c/zwww/4y1/+cirJSTLveiOiH4N+mXGUCjoMXq8X0WgUKysrWFtbw7fffov79+9jYWEBTqezK6fcjPDCJCRyWmWVy2WkUim8fPkSP/30E3788Ue8fv36lDdFBN8bEf2YjPODomw3n8+HeDyO1dVVPHr0CF999RVWVlYwNzenkk6uW+lnY5Uh2h5R/D4XNt1PdQN5XcDj42Pkcjk8ffoUf/3rX/Hs2bOhUpiFT4jox6BfgwajC8/r9cLn88Hn86ksM7fbjdnZWSwuLmJlZQX3799HMplEOBzuiqi7ToIHPn5nzWYTuq7j8PAQ6XQauVwO5XIZjUYDx8fHXTM7FzndR/cXi0W8efMGT5486ZrdKVBplK2XGRHRj4ixtBO/n35oNpsNfr8fS0tLWF5eRjweRygUgs/ng9frRSAQQDgcVnnhwWBQlYy+LoLnMzsVCy0UCtjd3cXLly/xyy+/YHNzE5lMBtVqVXlD6PnApyU+L9xBe3pKDebQ84XBiOhHZGZmpmcud7vdhqZp8Pl8mJ+fx/LyMm7fvo1EIoF4PI5gMAiPx6Oy4Oig5bwxq+1zh4Sez+dxeHiI/f19HB4eYnt7G+vr61hfX8fOzk5XsZFxoNRfmdmHR0R/BkYRUlcWShklbDYbYrGYMsw9ePAAN2/eVDM8xcobGzmM277pKuPbe8Et681mE6VSCZlMBu/evcOzZ8/w6tUr5VLL5/PQdX0i5b9F8KMjoh8DqkgTCATUfUtLS3j48CG++eYbPH78GHfu3MHc3Jwq8GjcCtDtOA0cjT907scdptDlWf7ds96DC7zVaqHRaKhOO7quo1AoIJfLYX9/H2/fvsWzZ8/w+vXrUynIvT5v2HLd5y09ZmZE9GNAVWuWlpaQTCbhcrlw7949ZYlfXV3F3NycKu5o5DzBKXyvbJztew0gxs47vQpbnhXlx5t5cOs6ib1QKODg4ADb29vY3t5GKpVCJpNBPp9HPp9HOp1GPp8f+vr4eYmoJ4+IfgxmZmYQiURw//59OBwOeL1e3LlzBw8fPkQymUQwGFS15YhhZ7NBGIVHhiteZdYYvcefT4UvyCLOg1j4FsMobl4wg1fOqVarahm/vb2NjY0NbGxsYHd3F7lcbmijWj9hi+AvBssZX6x86z3odDpIpVJqyappGubn53Hjxg3la6fnTXK/za3hXLzAp8IWRq8Cn5VrtZpqgFmv15WVnBpM0LlSDz56PjXQpG65xn/ruo58Po9sNotcLodKpdL3GsyW9HKVdDqdnj8+Ef2Y0LK2Xq+ropDUovkiylQZDWWUz09FLXlLZxIwdd+p1+sol8tqr53P51EqlVQZbC56Ku1NYi4Wi+q2VCqpzrm8S+4kk4+EySGinzAkKF4NlndZnSRGnze1vaaW1e12W7kSyTsAQFWwLZVKKhHl8PAQR0dH0HVdpQfzZT0t38kwZ2yPTRV0zxJ5L7vCVWFW20A/0cuefkwsFosqKU3/vohsOKMhjhvQdF1HpVJRbZwpfoBEf3x8rMp67e/vI5VKYW9vD0dHRyiVSkr09BkUBcfr4tNMztthDyOgaRLZNJ3LNDBQ9PJlnWaQQW7cIpGDvmfjLM8NaLTkPj4+Vl1jSPSdTgeNRgO6riOdTmNvbw+pVAoHBweqLxw36NHWgWZ6Hvfe7/zOSlW9DIzeCtlmnI3M9GcwSjmqcWb5Xv5moz+cL+vL5TKKxaIymlHLay56al9Foa/pdBoHBwfKjVYqlZQhzyh6XivgLBFPy6QwLefxuTBQ9NMQ6TWtXET1Gu4PN86+JPh8Po+joyNkMhkUCgVUq1W02+2uVlRWqxWtVksZG4+OjlQUXLlcVst23tmWuwD5imXare39zsvlcsHpdA6sFmxWZKY/BzzghdxzfF9/lmB4qmmvg7fCLpVKSvDpdBrZbBaVSgXNZhNWqxV2u71L9MfHx0r0hUJB7f+5q4+L3DjQGO+fFJdh4AuFQqr7raZpKmZiWgeuy2ag6N+9e3dZ5zEVcJGSG8ztdsPr9Sox8TZPvBQ2GdOoGys3qBlXA71yxqmnHB3kliMreqFQQD6fP+VyA6AET59rsVhUbX5ys9VqNRVgQ0v3q0hBndTnWSwW+Hw+1UaLEpeoVwBlNoroTzNQ9D/88MOFLvEnHbwyqfenGVDTNMTjcSwsLMDv93f1ZKM9NgWm1Ot1OJ1OBAIBBINB+P3+roYUdD7cWEalmumgrrDkkiuVSiiVSl3+clqeHx8fA4Dq/OpyueByubqW97VaTQXQkOB5iqoRWs4bq+72e34vLmomN7rdfD4fHj58iAcPHuDWrVsq7NnhcKhsRpfLpZKaRPCfGCj6P/3pT5d1HlMD/bharRZcLhcWFhZw48YNBAIBNXuTqBqNBorFInK5HGq1GpxOJ4LBoGo5RTMQiYgSVHjbZ6Po+S2JnA4ejGOxWLq609JqgfLyyZBHryHBGz0M/JYCdYCPAx/vWDssvcRltVrV98YDl2jFQd/LWV4MwmazIZFI4LvvvsPvfvc73L17F7FYrG+ug9DNQNH/+OOPl3UeUwMtjTudDux2u8qmI6MQD74hAVNjBervRq2jXS6XahFN0W48hJbHtBtLQtG2gfzk9Dwefed0OtVjPJmGxMrfn2Z4OncSt1H0JEKLxYKTkxM1+xu72w6Lx+NRzTe9Xi9cLpeqblOv19UWxLgioc/hAyZttxYXF/Ho0SN89913WFtbw8LCQleaszCYgaJPpVKXdR7XCovlY493WhlQzTsSPd9PG0UIdCfJcGMaz6Kz2+1dYqbBiAYrAF1lunlCjs1mU4MUf4wPZp1Op8t9x1cK9Jk8GpG/v8PhgMvlgs/nQzgcRiwWQywWQygUUlV+T05OUKlU1EqJ59iTZ4GiBY+Pj1Gr1dDpdBCNRvHgwQM8fvwYd+/exfz8vLpe+o4uetv4uSPW+wug0+mo5fYk4Xtumglp9cGLctD9xmhBEjx/nA8kvFwXt+KTHYIGLeM2wW63w+VyIRAIIBKJYG5uDuFwGOFwGKFQCKFQCLOzs2q7Q6JvNpuoVCool8tqtq9UKmp1Q8bMSqWCdDqNSqWCWCym6gpGo9Gu5CYx1nXTb+AT0X9GGH/Y3F1HFn+Hw6FmSOBTuLDdbu9a4tNsTo/T+9Bz+czPA4S4O49e63a7EQwGEY/HkUgkkEgkVDttYxttvqLhjUO4x4LsHXTkcjlsbW3h6OgIgUBAtfrSNE2913UqNXbRSHDOEAxbzWWcx8el1WopgyIXIxckzcJ8oKCVglH0ZCPQNE0FtpAbjPe8N87wVBcwFAohGo1iaWkJCwsLCIfDamYfFtpS8Jz9er2OfD6P2dlZpNNpOBwO1cyTGwXHDYE2IxJ7PwTT9j3Q+RgDeYxBQr2W8PQYj1En+wOlB/v9flW+2+12K1cgt8DTIOF2u+H3+xEIBBAIBOD3++HxeNSAMQp81WGz2aBpGjwej/K1e71etNtteL3eroGIXisMhyzvP2OMATZc8JTmS244bqzjFWRJaOTf9vv9yu04OzurRMyFT6Kn2ADuF6fY//OE79J5zszMqK0GeRJoC3Md231dFiL6zxQu9F4177hP3Ohnp20BPZdHEpLwZ2dnEQqFEAgEVDVfytcnMRojAUmMk4p1J1HzVQWvECSiHw8R/TXAuGfvdQDd2wHu2uIluSnCj/b2VJ+f9vn8uWT0o9nfeC50PqNei/HfNDDxcmBiuBsfST8SLgwR5XQiM/01wJgC2ytrjh/ke6fXAp+q5pDbjNxlFMtPlnXjqoBWDTxa8Txi7+UlMF4Dv05hdET0nyncD2/cQ/NQWtrz8+w9it/ny3uLxaJETntzACq1lxvpSPQU90+GPOBjAhCP4R8XPmjxun1kyBumyIfQGxH9Z0yv/H2eo09uPJrBuei58Y/Ka9F7kdCq1SqKxSI0TVOJQ0a/fj+XHbX9GmdPb+xeW6lUkM1mkc1m0W634ff74fP5RPRjIsE5QzBtwTnc306GLWMILTfaccHzfu/0XsZW0I1GA+Vy+VRzTX49PDjH6/WqGPvFxUUsLCwgEomMHZxD51mv11Gv11EoFLC9va2CcywWC0KhUNd3K8E5wyPBOUMwbd8DWbNJ+Nx3zmdrmrH5Xp1EzyPyKPmGagSQ0Dk86YZeS4OOy+VCKBRCPB7H8vIyEokElpaW+obh8oGJd97hYbi8voAxDNfhcCASiXS5IkXswyPL+88InnDDS17zbrjcpcWFz5f2PGmGZnpjKi1PuDFm2/H9Ng06brcbW1tbePv2LaLRKCKRCGZnZ1XSDdUXoOg6qkdQqVRUKa9eTTSOj49RLpeRTqdRrVZVB6FIJIL5+XnVRPS8rsLriCTcXCIWi6WrBv2g1Fp6Phdbr9Ra/t48dZd86rTvpkEA6F6h8H0+X97Te1LUGzB6ai0A1cTSmFobCoUwPz8/Umot1dmn/ALqdd/pdJDL5eBwODA7O4v5+XnMzs7C6XSesmuI6PszUPRLS0uXdR5TBf2w7XY7fD4ffD4fNE3r2kMDULMV1Z+jIg8ej0fdkghJ9LwRJC21jYU0yGLOW1fRc4FPlWioTBYPoKHz5Et3fk3GgQeAOjcaYEjgJHju6usHf4zKiB0eHsLlcmFnZ0eF9NL58SIavFUWv07gdBENqkfocrkwNzcHn8+HxcXFLqOhCH4wA0X/q1/96rLOYyrgYm6326pc1s2bN3uWy6rX613lsjRNU0tayh+n1/CZnppD0o++Wq2q0lm0n63VaqpGHuWaU0spEjRlwpHgPR6PWuZTTzryrfM6fcCn4pwcvsogC/8wpawGQUUxstlsV+w/XzXwVY0RPgCcnJxA13VUq1U122uahmazeapclsz4OGWXIQaK/g9/+MOFnMw0Q+JstVp9C2PSPphET40sqTAmzWput/uU4MhwRcLnXWDJWk2BMeVyGbquQ9d1FAqFU5VteTYazfK8MCbtnev1epcRjc6l1y0XIAly1O+P4O953oIiJGLgo/g3Nzfxj3/8A5VKBa9evUIkElGFMb1er7IfmLkw5traWs/7B4r+97///YWczDTD99V8ud6vBHYwGFRLTlpy8/ZSvXA6nWi1WvB4PF0GNm5o48UzqSJuLpfr2v9SRVwSPq97TxZ5EhwXPl0nwYXPDXjjVKO5KHEZ31fXdbx48QIbGxtqpUPbsfn5eVX3nroImzGCr5/opWvtOeAGOZ7Watxb9vuOjf70Qc0uqLtNJpNBJpNBLpdTte+p6g0FxPBmF7quq4441AarVqudqoLTa2k/aNk9Dr2W2hchRHIfmr3ZxZ///GfpWjtpyH02zPP63U/vYYyXBz4ttblhkA6v14t8Pq9aVVMsPIXKUlsr8r9TJRpjdVxe5pri6M9T934QlyW6XC6HarWqjIbGoiFmR4JzhmDQDNXLNzyu8Yi77ejfvCAG98VTLnupVFLGOi76drsNt9ut3Hc8OIcMeDxIh5fe4g0xpn2GNH7XdK5kHxFOIzP9EPQL+ugliFEF38vKbPwMmq14JBu9xuFwqP07jw3odD62qtY07VSoLX1Gv1bV9LlnNbnoJ7jLppd9QuiPxN6fAy56Y8GKUTjrNcYKMuTP73Q6qv69UfTAxww5smjTCoEaclC76l77ee5F4KsDHo1H13/VTPtKZBqRmX5MePAKgAsr48RXAjwoh3fhIc8BD8cFoOwBFLFHUXJHR0fQdV2JHvi0t6foN3IZUowAGQDJNnDWHllm3+lFRD8m5KOv1WqwWq3K0EYuoklCAqL9PVnqgU/565Rww2vW08BEee9erxfBYFB1vaW8el4Ag7fqohiBYrGoGmgaY+Tr9fqpsF5AhD7NiOjHgGLAX79+jcPDQ7jdbsTjcSwtLXVlqE0yIowLn+e/00qDG/x4AYtWq6XCdb1eL2ZnZ1XkH++Nx0tmk/Cp6y0d5XK5K3qQ7i8Wi6qNNrkFz7oOGRSuDhH9GLTbbaTTaTx58gRv3ryB1+vFF198gePjY9hsNoRCoS7xTXq5T4MKWel5fj2PEwCgZn+eBEMGPO6269XRhgx/PF+Agoh4O+1MJoOdnR28f/8eGxsbSKVSquCFERH71SOiH4NWq4WjoyM8f/4cP/30E1wuFzKZjNrzJpNJ1S99mICUYQcFPtvzW3qsnzGx0+ko8Wua1jdzr9+58LgBOkj81WpVZdglk0lsb28jlUohk8mgUCggm83i8PAQ+Xz+zOvq9+9eA4UMHuMjoh+DZrOJYrGIVCqFd+/eAUCXwater+POnTuYm5tTYbG9IvXOElsvjMI33t/rfcgYaEy6Mb62378JY7gula6i9NnV1VWUSiUl9oODA7x58wbPnj3D69evkU6nh7pG4WIR0Y8BhcXquq7u293dRafTUf3WDw8Psby8rHq68Q4xNOtya79xWT6IXkE8w7ym19+jYBxYyKjocrng9/vVQEDltjKZDG7cuIFoNIqFhYWuFQAZQYHete5HOSeZ9UdDRH8GRmMc5YFXq1UVyAJ8jG47PDxEtVpFJpPB69evsbKyglu3bqk4cK/Xq3LfKbSWN4kcRfjAdMVRcLsCz/X3+/1YXFzEV199hYODA2xvb2N9fR3r6+vY2dkZuOwf9nMBWe6Pgoh+RMiybXRRWa1W5cLKZrNIpVLY3d3F5uYm4vG4qhfn8/kQCAQQDocRjUYRjUYRCoXgcrmuRREIGiSp4aTH40EsFkMymUShUMDu7i5u3LiBeDyOzc1NZLNZVCoVZVzkBTuM+QjcwFitVlEulyWmfgxE9CNCLi1jJRk+07TbbeTzeRwfHyOTyajur1TwYnZ2FvF4HMlkEvfv30cymUQ4HFZlpj/nPm297BXUK48KfYRCISSTSeTzeZTLZVXsw1iVl1cV4vfruo719XU8efJEbRGAT14IXopMOI2Ifgz6JaJQ7TeCykAdHBwAgKp2QznfBwcHqFQqaDabWF1dRTQahcfjuRBX31VD0YPUFPPWrVtdYuaeARI3NbkwDgK5XA5LS0uwWCx49uwZisXi2EU/zIiIfkzGEWSn0+mKa6cw13w+j0qlgrW1NSwsLADAtWvUaJz5z4IPAHxQoIKa0WgUN27cwJMnT/DPf/4TL1++lKy6IRHRj0E/IY4yy9CylkJcee35aDSq6utNOqT3c4GW6sbqQ+12Gz6fD7FYDF988QVWVlbg9XrR6XSwsbEBXde7Cn7KMv80IvoRISPVqC42Dv0QaalKxi8aBNbW1nDz5k34fD4A6Onj/5w5TzoyDQbAx7yDBw8eoF6vIxwOI5VKqSpB2WxWFRjhrk0ZBET0I0OzD+/JfhZn/dCKxSJevXqFYrGISqWilrJUkJMKPF4HwQOTHbh8Ph8ePXqElZUVFRvw/v17fPjwAfl8/pSXRRDRn4nxB8rz1s/bmZVot9solUrY2tpSxS3y+TwePnyIlZUVxGIxeL3eroi6UYNzPkeGmZWpxRW1uSqVSojH47h9+7Za6k8y8e0ebx4AAAdISURBVOk6IKIfA6p4OynRE/V6HRsbGygWi8hkMtB1XRWxiMfjqjuMMeb+ujLqtc3MzKj+BPF4XGURCt2I6MfgrBLX56HRaGB/f1+5s3RdV8ksiURCufWGEcRF/OCnfZCxWCwq6lHojYh+SPgSkbLVqJDFRZDNZvHzzz/j4OAA7969w9raGh49eoR79+4hFoupOu8UyHNZYhxmqdyvpqAwHYjox4CaYITDYWia1lVrblK0220UCgUUCgXk83n1997eHhYXFxEKhVSgizGh5zIt/b3sClcpdFnOf6Lf/4OIfkz8fj9u3ryJ5eVlbG1tdQWGTNo1dHR0hGaziYODAzx9+lRlrSUSCdy6dQuLi4sIh8OqlRa1t7ooHz8vqEG1+qgEd6/e9v0Y9zsaNKjIyuJsRPRjEgwGcefOHezu7qJSqWB3d1c9NunZhs/6GxsbKoklkUhgZWVFiZ6aZrpcLrhcri7bA6/kQ5Fu/NZYa99YA4A336Qa+hQzD3za8lAtPp/Pp86FBgJjhKEI9GoQ0Q+JcfkaCoVw7949ZDIZ7O/vI51On7tJ47DQIKPrOjY3N5Uvn5b41LOe2lh7PB44nU5VW4/KXJN4jR1veIktGigoDp4KYvZ6naZpCAaDiMfjWF5eRiKRQDweV+fH6wnQMQ7X3VV50Yjox8Tn8yGRSKg02mKxiP39fSWmi078aDabODo6wtHRUc/HeYVesmbb7XbVBIPi/3n7a+BTYQzeLafT6ai6eIM6x1gsFgSDQSwtLWFlZQV37tzBjRs3VOowFz79Te5PY+NPXiiEpzNbLJau85u029QMSAPLMaFAkM3NTTx9+hRPnz7Fu3fvVI24QqGgnmssU3Xeveyor7darXA4HOr1VOzyooxeLpcLkUgEc3NzmJ2dhcfjUUKlGd7hcEDTNHg8HkQiEUSjUcRiMYTDYfh8PnW+7XYb1WoV2WwWxWIRLpcLsVgM0WhUrSCEvvRcConox4Qq6Oi6jnQ6ja2tLayvr+P58+eqhXKxWJRUT3RX1aGDIhsDgQDm5+fVdmBhYQGhUEg1n6RYhb29PWSzWbjdbqyuruLevXtYWVlBJBKRZX5/pGvtJLFYLLDZbPD5fLDb7fB4PPD7/fD7/QgEAggEAnj79i1SqdTAGXVYH/ugJJVeS1xeeeas6xjm8/i5Dsr3NxYXofeifHdOpVJR7sijoyNsbW2psmI003c6HVSrVVVww2az4f379yiVSvB6vYhEIl2fIwPA2Yjox4REz2cuTdPg9/sRDocRCoVUCexUKtV3xh/Xv2+s1DMuo3x2P/Gel2KxiHK5jJ2dHZXFyMt5k+eAPn9rawtutxtff/211MgbAxH9OaBZj1xSVBKK3FaBQADxeFzt8cvlsmoPVS6XLy0DbNDsNw1ioR56w34f+Xwe1WpVxQjI7D4aIvpzwGcjmu3p1u12Y35+Hg8fPlQ53nt7e9ja2sL29jZ2d3eRTqe7arxdFNMg7EmSSCSwuLgIj8ej7pNc+eER0U8AHmxCsz5ZsJeXl9Xe9eDgALu7u9jZ2VGGKV3XUavVlEuKlrHGclEU/cZvqdPMRVvjjddKS3A6KPiHSnn3KudNNgZex46/jzGIiJb4vC8gtQxbWVnB48ePEQ6He/4/CIMR6/0FQ0vXRqOhOuBQ40fe+pn8341GQ4W48oAYKrJJTSTp4O9Fr+fRdqM2juDNLEmExpUMb5GlaZqq5+/xeNTfVNmXZmDeB48GNqvVqioEU7ls7qvnxUosFgscDoeqJjw/P49YLKaqCwk9EZfdNEJGKhI/5c+TQBqNhmoUSUelUlGC7zWIcNEDZ8cHGItW8tmW/023JEbys5NgvV6v+tvlcqkgG+p6Q9dEqxKyg/DXapoGu92uVg388/jqYtSSZSZFRP85YIyL56WgaUAg4XAR0QzKS0kD3UIfJHq6NR68WabRfkEzPo+Qo4Mv8XklWx7rz/311OnHbrd3Le8l4u5ciOinhXEKQ/aqtT9NhitjEk2vaxpmpSFMFBH9VXNWkI4gTBiJyLtqRNjCNCCinzLOs2S/6OX+VQxaMlBOHlneC8L1peeIKaZRQTAZInpBMBkiekEwGSJ6QTAZInpBMBkiekEwGSJ6QTAZInpBMBkiekEwGSJ6QTAZInpBMBkiekEwGSJ6QTAZInpBMBkiekEwGSJ6QTAZInpBMBkiekEwGSJ6QTAZInpBMBkiekEwGSJ6QTAZInpBMBkiekEwGSJ6QTAZInpBMBkiekEwGSJ6QTAZInpBMBkiekEwGSJ6QTAZInpBMBkiekEwGSJ6QTAZInpBMBkiekEwGSJ6QTAZInpBMBkiekEwGSJ6QTAZInpBMBkiekEwGSJ6QTAZInpBMBkiekEwGSJ6QTAZInpBMBkiekEwGSJ6QTAZInpBMBkiekEwGSJ6QTAZInpBMBm2Mx63XMpZCIJwachMLwgmQ0QvCCZDRC8IJkNELwgmQ0QvCCZDRC8IJuP/A19nBB8VuZBHAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 59\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 60\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 61\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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XQVerxexWExsOcjTQNsMEq3L5RItt+PxOOLxOKLRKPx+v7jefr8vKvGoqgqXy4X5+XnEYjEEAoEr9aDcAQyXQiz6Kel2u2g0GigWizg/P8f+/j52d3fxww8/4M2bNzg+Pr5URZi7hFxZR26z5XQ6RfLM+vo61tfXsbi4iGg0KppPdrtdVCoVJJNJ5PN5eL1ebGxs4MGDB9jY2EA0GuVl/mAMPxhe3k8JFYcIBoOiSITf7xf94v1+Pw4ODpBOp4ceZ1wfu9HgIZfE1iPnqY9inIq98rUOq+mnLy5CxyJjoB5qppHNZnF4eIhIJAKfz6eZ6akddaVSgcPhwE8//YRisQifzycad9B5eAAYDYt+Sqh+vFwbjvrERaNRhEIhUQL7/Px84HEu49+Xu9pehnHPP0y8l6FUKqFSqeDo6Mgwi5E8B3T+9+/fQ1EUPH36lGvkTQGL/hLQF5R+Kooi3GU0C62srCCVSokqOuVyGeVyGaqqXlt9t1GVbG8auVjGOFDaLMXW8+w+GSz6SyBXgqHOsIFAAHa7HYFAACsrK3j27JnI8U4mkzg6OsLR0RGSySQymcxYTSAuy20Q9ixZW1vD4uIivF6vuI9z5ceHRX9J5FmG9vmBQABerxfz8/NoNpuoVCrI5/M4OzvDyckJTk5OcHZ2hlwuB1VVRf13mu309eLIZaX/SXXm6e/r+NLTvt5ms4kb1fAndxu53PSlw+X3RceiY5B1Xx5A5WCefr8Pu92OSCSC+/fv4/nz54jFYgP/F8xg2Hp/xVAnGH1TSH0PeDnohXzSFBBDnWTpVqvVNDc6Hr2ejGm0Dx4XeT9NwtP/LQfvKIoCRVE0sQD0u8vlElsf8vNTDAMNbHK3X5/PB6/Xq8lglG96u0kikUA8Hoff77/C/94nD7vsbiM0KMgRclT9lSLnarWapl88dYul2u+VSgXValVTO55WCIBxfIA+qk2ewWXB62deuo9ET0Knn/S72+0Whs5erycGM3pv/X4fNpsNLpdL81o5co9mfrkjkL4zEM/uQ2HRfwrQDK1vGCkPCHJJaPl3WvLL7rpxW0XJrkO5Cq++Th/dJwvQKNJOXuLLve/kWH86DgXqkNjpfvn8zFSw6G8L03StnVTE140+nXdc3z89l2fsK4FFf9OMmmkZZsZwRN5Nw8JmbgMs+lvGZZbsV73cv4lBiwfK2cPLe4a5uxiOmGwaZRiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJNhH/G45VqugmGYa4NneoYxGSx6hjEZLHqGMRkseoYxGSx6hjEZLHqGMRn/H71+ty8MNW7iAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 62\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "algorithm = nlopt.LD_MMA\n", - "n = Nx * Ny # number of parameters\n", + "n = Nx * Ny # number of parameters\n", "\n", "# Initial guess\n", "x = np.ones((n,)) * 0.5\n", - "x[Si_mask.flatten()] = 1 # set the edges of waveguides to silicon\n", - "x[SiO2_mask.flatten()] = 0 # set the other edges to SiO2\n", + "x[Si_mask.flatten()] = 1 # set the edges of waveguides to silicon\n", + "x[SiO2_mask.flatten()] = 0 # set the other edges to SiO2\n", "\n", "# lower and upper bounds\n", - "lb = np.zeros((Nx*Ny,))\n", + "lb = np.zeros((Nx * Ny,))\n", "lb[Si_mask.flatten()] = 1\n", - "ub = np.ones((Nx*Ny,))\n", + "ub = np.ones((Nx * Ny,))\n", "ub[SiO2_mask.flatten()] = 0\n", "\n", "cur_beta = 4\n", @@ -1721,16 +416,16 @@ "num_betas = 6\n", "update_factor = 12\n", "for iters in range(num_betas):\n", - " print(\"current beta: \",cur_beta)\n", - " \n", + " print(\"current beta: \", cur_beta)\n", + "\n", " solver = nlopt.opt(algorithm, n)\n", " solver.set_lower_bounds(lb)\n", " solver.set_upper_bounds(ub)\n", - " solver.set_max_objective(lambda a,g: f(a,g,cur_beta))\n", + " solver.set_max_objective(lambda a, g: f(a, g, cur_beta))\n", " solver.set_maxeval(update_factor)\n", " solver.set_xtol_rel(1e-4)\n", " x[:] = solver.optimize(x)\n", - " cur_beta = cur_beta*beta_scale" + " cur_beta = cur_beta * beta_scale" ] }, { @@ -1742,28 +437,15 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plt.figure()\n", - "plt.plot(10*np.log10(0.5*np.array(evaluation_history)),'o-')\n", + "plt.plot(10 * np.log10(0.5 * np.array(evaluation_history)), \"o-\")\n", "plt.grid(True)\n", - "plt.xlabel('Iteration')\n", - "plt.ylabel('Mean Splitting Ratio (dB)')\n", + "plt.xlabel(\"Iteration\")\n", + "plt.ylabel(\"Mean Splitting Ratio (dB)\")\n", "plt.show()" ] }, @@ -1776,53 +458,32 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Starting forward run...\n" - ] - } - ], + "outputs": [], "source": [ - "f0, dJ_du = opt([mapping(x,eta_i,cur_beta)],need_gradient = False)\n", + "f0, dJ_du = opt([mapping(x, eta_i, cur_beta)], need_gradient=False)\n", "frequencies = opt.frequencies\n", "source_coef, top_coef, bottom_ceof = opt.get_objective_arguments()\n", "\n", - "top_profile = np.abs(top_coef/source_coef) ** 2\n", - "bottom_profile = np.abs(bottom_ceof/source_coef) ** 2" + "top_profile = np.abs(top_coef / source_coef) ** 2\n", + "bottom_profile = np.abs(bottom_ceof / source_coef) ** 2" ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plt.figure()\n", - "plt.plot(1/frequencies,top_profile*100,'-o' ,label = 'Top Arm')\n", - "plt.plot(1/frequencies,bottom_profile*100,'--o',label = 'Bottom Arm')\n", + "plt.plot(1 / frequencies, top_profile * 100, \"-o\", label=\"Top Arm\")\n", + "plt.plot(1 / frequencies, bottom_profile * 100, \"--o\", label=\"Bottom Arm\")\n", "plt.legend()\n", "plt.grid(True)\n", - "plt.xlabel('Wavelength (microns)')\n", - "plt.ylabel('Splitting Ratio (%)')\n", - "plt.ylim(48.5,50)\n", + "plt.xlabel(\"Wavelength (microns)\")\n", + "plt.ylabel(\"Splitting Ratio (%)\")\n", + "plt.ylim(48.5, 50)\n", "plt.show()" ] }, @@ -1835,30 +496,23 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "opt.update_design([mapping(x,eta_i,cur_beta)])\n", + "opt.update_design([mapping(x, eta_i, cur_beta)])\n", "plt.figure()\n", "ax = plt.gca()\n", - "opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n", - "circ = Circle((2,2),minimum_length/2)\n", + "opt.plot2D(\n", + " False,\n", + " ax=ax,\n", + " plot_sources_flag=False,\n", + " plot_monitors_flag=False,\n", + " plot_boundaries_flag=False,\n", + ")\n", + "circ = Circle((2, 2), minimum_length / 2)\n", "ax.add_patch(circ)\n", - "ax.axis('off')\n", + "ax.axis(\"off\")\n", "plt.show()" ] }, diff --git a/python/examples/adjoint_optimization/.ipynb_checkpoints/05-Near2Far-checkpoint.ipynb b/python/examples/adjoint_optimization/.ipynb_checkpoints/05-Near2Far-checkpoint.ipynb index 3d6528ff8..8b9ffc01e 100644 --- a/python/examples/adjoint_optimization/.ipynb_checkpoints/05-Near2Far-checkpoint.ipynb +++ b/python/examples/adjoint_optimization/.ipynb_checkpoints/05-Near2Far-checkpoint.ipynb @@ -24,6 +24,7 @@ "from matplotlib import pyplot as plt\n", "from matplotlib.patches import Circle\n", "from scipy import special, signal\n", + "\n", "mp.verbosity(0)\n", "Si = mp.Medium(index=3.4)\n", "SiO2 = mp.Medium(index=1.44)" @@ -49,69 +50,88 @@ "\n", "resolution = 20\n", "\n", - "Sx = 2*pml_size + design_region_width\n", - "Sy = 2*pml_size + design_region_height + 5\n", - "cell_size = mp.Vector3(Sx,Sy)\n", + "Sx = 2 * pml_size + design_region_width\n", + "Sy = 2 * pml_size + design_region_height + 5\n", + "cell_size = mp.Vector3(Sx, Sy)\n", "\n", "nf = 2\n", - "frequencies = np.array([1/1.5, 1/1.6])\n", + "frequencies = np.array([1 / 1.5, 1 / 1.6])\n", "\n", - "minimum_length = 0.09 # minimum length scale (microns)\n", - "eta_i = 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n", - "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n", - "eta_d = 1-eta_e # dilation design field thresholding point (between 0 and 1)\n", - "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length,eta_e)\n", + "minimum_length = 0.09 # minimum length scale (microns)\n", + "eta_i = (\n", + " 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n", + ")\n", + "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n", + "eta_d = 1 - eta_e # dilation design field thresholding point (between 0 and 1)\n", + "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length, eta_e)\n", "design_region_resolution = int(resolution)\n", "\n", "pml_layers = [mp.PML(pml_size)]\n", "\n", - "fcen = 1/1.55\n", + "fcen = 1 / 1.55\n", "width = 0.2\n", "fwidth = width * fcen\n", - "source_center = [0,-(design_region_height/2 + 1.5),0]\n", - "source_size = mp.Vector3(design_region_width,0,0)\n", - "src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)\n", - "source = [mp.Source(src,\n", - " component=mp.Ez,\n", - " size = source_size,\n", - " center=source_center)]\n", + "source_center = [0, -(design_region_height / 2 + 1.5), 0]\n", + "source_size = mp.Vector3(design_region_width, 0, 0)\n", + "src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)\n", + "source = [mp.Source(src, component=mp.Ez, size=source_size, center=source_center)]\n", + "\n", + "Nx = int(design_region_resolution * design_region_width)\n", + "Ny = int(design_region_resolution * design_region_height)\n", "\n", - "Nx = int(design_region_resolution*design_region_width)\n", - "Ny = int(design_region_resolution*design_region_height)\n", + "design_variables = mp.MaterialGrid(mp.Vector3(Nx, Ny), SiO2, Si, grid_type=\"U_MEAN\")\n", + "design_region = mpa.DesignRegion(\n", + " design_variables,\n", + " volume=mp.Volume(\n", + " center=mp.Vector3(),\n", + " size=mp.Vector3(design_region_width, design_region_height, 0),\n", + " ),\n", + ")\n", "\n", - "design_variables = mp.MaterialGrid(mp.Vector3(Nx,Ny),SiO2,Si,grid_type='U_MEAN')\n", - "design_region = mpa.DesignRegion(design_variables,volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(design_region_width, design_region_height, 0)))\n", "\n", - "def mapping(x,eta,beta):\n", + "def mapping(x, eta, beta):\n", "\n", " # filter\n", - " filtered_field = mpa.conic_filter(x,filter_radius,design_region_width,design_region_height,design_region_resolution)\n", - " \n", + " filtered_field = mpa.conic_filter(\n", + " x,\n", + " filter_radius,\n", + " design_region_width,\n", + " design_region_height,\n", + " design_region_resolution,\n", + " )\n", + "\n", " # projection\n", - " projected_field = mpa.tanh_projection(filtered_field,beta,eta)\n", - " \n", - " projected_field = (npa.flipud(projected_field) + projected_field)/2 # left-right symmetry\n", - " \n", + " projected_field = mpa.tanh_projection(filtered_field, beta, eta)\n", + "\n", + " projected_field = (\n", + " npa.flipud(projected_field) + projected_field\n", + " ) / 2 # left-right symmetry\n", + "\n", " # interpolate to actual materials\n", " return projected_field.flatten()\n", "\n", + "\n", "geometry = [\n", - " mp.Block(center=design_region.center, size=design_region.size, material=design_variables),\n", - " #mp.Block(center=design_region.center, size=design_region.size, material=design_variables, e1=mp.Vector3(x=-1))\n", - " # \n", + " mp.Block(\n", + " center=design_region.center, size=design_region.size, material=design_variables\n", + " ),\n", + " # mp.Block(center=design_region.center, size=design_region.size, material=design_variables, e1=mp.Vector3(x=-1))\n", + " #\n", " # The commented lines above impose symmetry by overlapping design region with the same design variable. However,\n", " # currently there is an issue of doing that; instead, we use an alternative approach to impose symmetry.\n", " # See https://github.com/NanoComp/meep/issues/1984 and https://github.com/NanoComp/meep/issues/2093\n", "]\n", "kpoint = mp.Vector3()\n", - "sim = mp.Simulation(cell_size=cell_size,\n", - " boundary_layers=pml_layers,\n", - " k_point=kpoint,\n", - " geometry=geometry,\n", - " sources=source,\n", - " default_material=SiO2,\n", - " symmetries=[mp.Mirror(direction=mp.X)],\n", - " resolution=resolution)" + "sim = mp.Simulation(\n", + " cell_size=cell_size,\n", + " boundary_layers=pml_layers,\n", + " k_point=kpoint,\n", + " geometry=geometry,\n", + " sources=source,\n", + " default_material=SiO2,\n", + " symmetries=[mp.Mirror(direction=mp.X)],\n", + " resolution=resolution,\n", + ")" ] }, { @@ -129,12 +149,20 @@ "metadata": {}, "outputs": [], "source": [ - "far_x = [mp.Vector3(0,40,0)]\n", - "NearRegions = [mp.Near2FarRegion(center=mp.Vector3(0,design_region_height/2+1.5), size=mp.Vector3(design_region_width,0), weight=+1)]\n", - "FarFields = mpa.Near2FarFields(sim, NearRegions ,far_x)\n", + "far_x = [mp.Vector3(0, 40, 0)]\n", + "NearRegions = [\n", + " mp.Near2FarRegion(\n", + " center=mp.Vector3(0, design_region_height / 2 + 1.5),\n", + " size=mp.Vector3(design_region_width, 0),\n", + " weight=+1,\n", + " )\n", + "]\n", + "FarFields = mpa.Near2FarFields(sim, NearRegions, far_x)\n", "ob_list = [FarFields]\n", + "\n", + "\n", "def J1(alpha):\n", - " return -npa.abs(alpha[0,:,2])**2" + " return -npa.abs(alpha[0, :, 2]) ** 2" ] }, { @@ -144,10 +172,10 @@ "outputs": [], "source": [ "opt = mpa.OptimizationProblem(\n", - " simulation = sim,\n", - " objective_functions = [J1],\n", - " objective_arguments = ob_list,\n", - " design_regions = [design_region],\n", + " simulation=sim,\n", + " objective_functions=[J1],\n", + " objective_arguments=ob_list,\n", + " design_regions=[design_region],\n", " frequencies=frequencies,\n", ")\n", "opt.plot2D(True)" @@ -168,9 +196,11 @@ "source": [ "evaluation_history = []\n", "cur_iter = [0]\n", + "\n", + "\n", "def f(x, grad):\n", - " t = x[0] # \"dummy\" parameter\n", - " v = x[1:] # design parameters\n", + " t = x[0] # \"dummy\" parameter\n", + " v = x[1:] # design parameters\n", " if grad.size > 0:\n", " grad[0] = 1\n", " grad[1:] = 0\n", @@ -200,39 +230,49 @@ "metadata": {}, "outputs": [], "source": [ - "def c(result,x,gradient,eta,beta):\n", - " print(\"Current iteration: {}; current eta: {}, current beta: {}\".format(cur_iter[0],eta,beta))\n", - " \n", - " t = x[0] # dummy parameter\n", - " v = x[1:] # design parameters\n", + "def c(result, x, gradient, eta, beta):\n", + " print(\n", + " \"Current iteration: {}; current eta: {}, current beta: {}\".format(\n", + " cur_iter[0], eta, beta\n", + " )\n", + " )\n", + "\n", + " t = x[0] # dummy parameter\n", + " v = x[1:] # design parameters\n", "\n", - " f0, dJ_du = opt([mapping(v,eta,beta)])\n", + " f0, dJ_du = opt([mapping(v, eta, beta)])\n", "\n", " # Backprop the gradients through our mapping function\n", " my_grad = np.zeros(dJ_du.shape)\n", - " for k in range(opt.nf): \n", - " my_grad[:,k] = tensor_jacobian_product(mapping,0)(v,eta,beta,dJ_du[:,k])\n", + " for k in range(opt.nf):\n", + " my_grad[:, k] = tensor_jacobian_product(mapping, 0)(v, eta, beta, dJ_du[:, k])\n", "\n", " # Assign gradients\n", " if gradient.size > 0:\n", - " gradient[:,0] = -1 # gradient w.r.t. \"t\"\n", - " gradient[:,1:] = my_grad.T # gradient w.r.t. each frequency objective\n", - " \n", + " gradient[:, 0] = -1 # gradient w.r.t. \"t\"\n", + " gradient[:, 1:] = my_grad.T # gradient w.r.t. each frequency objective\n", + "\n", " result[:] = np.real(f0) - t\n", - " \n", + "\n", " # store results\n", " evaluation_history.append(np.real(f0))\n", - " \n", + "\n", " # visualize\n", " plt.figure()\n", " ax = plt.gca()\n", - " opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n", - " circ = Circle((2,2),minimum_length/2)\n", + " opt.plot2D(\n", + " False,\n", + " ax=ax,\n", + " plot_sources_flag=False,\n", + " plot_monitors_flag=False,\n", + " plot_boundaries_flag=False,\n", + " )\n", + " circ = Circle((2, 2), minimum_length / 2)\n", " ax.add_patch(circ)\n", - " ax.axis('off')\n", + " ax.axis(\"off\")\n", " plt.show()\n", - " \n", - " cur_iter[0] = cur_iter[0] + 1\n" + "\n", + " cur_iter[0] = cur_iter[0] + 1" ] }, { @@ -249,19 +289,19 @@ "outputs": [], "source": [ "algorithm = nlopt.LD_MMA\n", - "n = Nx * Ny # number of parameters\n", + "n = Nx * Ny # number of parameters\n", "\n", "# Initial guess\n", "x = np.ones((n,)) * 0.5\n", "\n", "# lower and upper bounds\n", - "lb = np.zeros((Nx*Ny,))\n", - "ub = np.ones((Nx*Ny,))\n", + "lb = np.zeros((Nx * Ny,))\n", + "ub = np.ones((Nx * Ny,))\n", "\n", "# insert dummy parameter bounds and variable\n", - "x = np.insert(x,0,0) # our initial guess for the worst error\n", - "lb = np.insert(lb,0,-np.inf)\n", - "ub = np.insert(ub,0,0)\n", + "x = np.insert(x, 0, 0) # our initial guess for the worst error\n", + "lb = np.insert(lb, 0, -np.inf)\n", + "ub = np.insert(ub, 0, 0)\n", "\n", "cur_beta = 4\n", "beta_scale = 2\n", @@ -269,37 +309,37 @@ "update_factor = 12\n", "ftol = 1e-5\n", "for iters in range(num_betas):\n", - " solver = nlopt.opt(algorithm, n+1)\n", + " solver = nlopt.opt(algorithm, n + 1)\n", " solver.set_lower_bounds(lb)\n", " solver.set_upper_bounds(ub)\n", " solver.set_min_objective(f)\n", " solver.set_maxeval(update_factor)\n", " solver.set_ftol_rel(ftol)\n", - " solver.add_inequality_mconstraint(lambda r,x,g: c(r,x,g,eta_i,cur_beta), np.array([1e-3]*nf))\n", + " solver.add_inequality_mconstraint(\n", + " lambda r, x, g: c(r, x, g, eta_i, cur_beta), np.array([1e-3] * nf)\n", + " )\n", " x[:] = solver.optimize(x)\n", - " cur_beta = cur_beta*beta_scale" + " cur_beta = cur_beta * beta_scale" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "scrolled": true - }, + "metadata": {}, "outputs": [], "source": [ - "lb = -np.min(evaluation_history,axis=1)\n", - "ub = -np.max(evaluation_history,axis=1)\n", - "mean = -np.mean(evaluation_history,axis=1)\n", + "lb = -np.min(evaluation_history, axis=1)\n", + "ub = -np.max(evaluation_history, axis=1)\n", + "mean = -np.mean(evaluation_history, axis=1)\n", "\n", "num_iters = lb.size\n", "\n", "plt.figure()\n", - "plt.fill_between(np.arange(num_iters),ub,lb,alpha=0.3)\n", - "plt.plot(mean,'o-')\n", + "plt.fill_between(np.arange(num_iters), ub, lb, alpha=0.3)\n", + "plt.plot(mean, \"o-\")\n", "plt.grid(True)\n", - "plt.xlabel('Iteration')\n", - "plt.ylabel('FOM')\n", + "plt.xlabel(\"Iteration\")\n", + "plt.ylabel(\"FOM\")\n", "plt.show()" ] }, @@ -316,13 +356,19 @@ "metadata": {}, "outputs": [], "source": [ - "opt.update_design([mapping(x[1:],eta_i,cur_beta)])\n", + "opt.update_design([mapping(x[1:], eta_i, cur_beta)])\n", "plt.figure()\n", "ax = plt.gca()\n", - "opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n", - "circ = Circle((2,2),minimum_length/2)\n", + "opt.plot2D(\n", + " False,\n", + " ax=ax,\n", + " plot_sources_flag=False,\n", + " plot_monitors_flag=False,\n", + " plot_boundaries_flag=False,\n", + ")\n", + "circ = Circle((2, 2), minimum_length / 2)\n", "ax.add_patch(circ)\n", - "ax.axis('off')\n", + "ax.axis(\"off\")\n", "plt.show()" ] }, @@ -339,23 +385,22 @@ "metadata": {}, "outputs": [], "source": [ - "opt.sim = mp.Simulation(cell_size=mp.Vector3(Sx,90),\n", - " boundary_layers=pml_layers,\n", - " k_point=kpoint,\n", - " geometry=geometry,\n", - " sources=source,\n", - " default_material=SiO2,\n", - " resolution=resolution)\n", - "src = mp.ContinuousSource(frequency=1/1.5,fwidth=fwidth)\n", - "source = [mp.Source(src, component = mp.Ez,\n", - " size = source_size,\n", - " center=source_center)]\n", + "opt.sim = mp.Simulation(\n", + " cell_size=mp.Vector3(Sx, 90),\n", + " boundary_layers=pml_layers,\n", + " k_point=kpoint,\n", + " geometry=geometry,\n", + " sources=source,\n", + " default_material=SiO2,\n", + " resolution=resolution,\n", + ")\n", + "src = mp.ContinuousSource(frequency=1 / 1.5, fwidth=fwidth)\n", + "source = [mp.Source(src, component=mp.Ez, size=source_size, center=source_center)]\n", "opt.sim.change_sources(source)\n", "\n", "opt.sim.run(until=200)\n", - "plt.figure(figsize=(10,20))\n", - "opt.sim.plot2D(fields=mp.Ez)\n", - "\n" + "plt.figure(figsize=(10, 20))\n", + "opt.sim.plot2D(fields=mp.Ez)" ] }, { @@ -364,21 +409,21 @@ "metadata": {}, "outputs": [], "source": [ - "opt.sim = mp.Simulation(cell_size=mp.Vector3(Sx,90),\n", - " boundary_layers=pml_layers,\n", - " k_point=kpoint,\n", - " geometry=geometry,\n", - " sources=source,\n", - " default_material=SiO2,\n", - " resolution=resolution)\n", - "src = mp.ContinuousSource(frequency=1/1.6,fwidth=fwidth)\n", - "source = [mp.Source(src, component = mp.Ez,\n", - " size = source_size,\n", - " center=source_center)]\n", + "opt.sim = mp.Simulation(\n", + " cell_size=mp.Vector3(Sx, 90),\n", + " boundary_layers=pml_layers,\n", + " k_point=kpoint,\n", + " geometry=geometry,\n", + " sources=source,\n", + " default_material=SiO2,\n", + " resolution=resolution,\n", + ")\n", + "src = mp.ContinuousSource(frequency=1 / 1.6, fwidth=fwidth)\n", + "source = [mp.Source(src, component=mp.Ez, size=source_size, center=source_center)]\n", "opt.sim.change_sources(source)\n", "\n", "opt.sim.run(until=200)\n", - "plt.figure(figsize=(10,20))\n", + "plt.figure(figsize=(10, 20))\n", "opt.sim.plot2D(fields=mp.Ez)" ] }, diff --git a/python/examples/adjoint_optimization/.ipynb_checkpoints/06-Near2Far-Epigraph-checkpoint.ipynb b/python/examples/adjoint_optimization/.ipynb_checkpoints/06-Near2Far-Epigraph-checkpoint.ipynb index 3e552be49..407781c03 100644 --- a/python/examples/adjoint_optimization/.ipynb_checkpoints/06-Near2Far-Epigraph-checkpoint.ipynb +++ b/python/examples/adjoint_optimization/.ipynb_checkpoints/06-Near2Far-Epigraph-checkpoint.ipynb @@ -11,17 +11,9 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Using MPI version 3.1, 1 processes\n" - ] - } - ], + "outputs": [], "source": [ "import meep as mp\n", "import meep.adjoint as mpa\n", @@ -32,6 +24,7 @@ "from matplotlib import pyplot as plt\n", "from matplotlib.patches import Circle\n", "from scipy import special, signal\n", + "\n", "mp.verbosity(0)\n", "Si = mp.Medium(index=3.4)\n", "Air = mp.Medium(index=1.0)" @@ -46,7 +39,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -57,68 +50,87 @@ "\n", "resolution = 30\n", "\n", - "Sx = 2*pml_size + design_region_width\n", - "Sy = 2*pml_size + design_region_height + 5\n", - "cell_size = mp.Vector3(Sx,Sy)\n", + "Sx = 2 * pml_size + design_region_width\n", + "Sy = 2 * pml_size + design_region_height + 5\n", + "cell_size = mp.Vector3(Sx, Sy)\n", "\n", "nf = 3\n", - "frequencies = np.array([1/1.5, 1/1.55, 1/1.6])\n", + "frequencies = np.array([1 / 1.5, 1 / 1.55, 1 / 1.6])\n", "\n", - "minimum_length = 0.09 # minimum length scale (microns)\n", - "eta_i = 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n", - "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n", - "eta_d = 1-eta_e # dilation design field thresholding point (between 0 and 1)\n", - "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length,eta_e)\n", + "minimum_length = 0.09 # minimum length scale (microns)\n", + "eta_i = (\n", + " 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n", + ")\n", + "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n", + "eta_d = 1 - eta_e # dilation design field thresholding point (between 0 and 1)\n", + "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length, eta_e)\n", "design_region_resolution = int(resolution)\n", "\n", "pml_layers = [mp.PML(pml_size)]\n", "\n", - "fcen = 1/1.55\n", + "fcen = 1 / 1.55\n", "width = 0.2\n", "fwidth = width * fcen\n", - "source_center = [0,-(design_region_height/2 + 1.5),0]\n", - "source_size = mp.Vector3(design_region_width,0,0)\n", - "src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)\n", - "source = [mp.Source(src,\n", - " component=mp.Ez,\n", - " size = source_size,\n", - " center=source_center)]\n", - "\n", - "Nx = int(design_region_resolution*design_region_width)\n", - "Ny = int(design_region_resolution*design_region_height)\n", + "source_center = [0, -(design_region_height / 2 + 1.5), 0]\n", + "source_size = mp.Vector3(design_region_width, 0, 0)\n", + "src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)\n", + "source = [mp.Source(src, component=mp.Ez, size=source_size, center=source_center)]\n", + "\n", + "Nx = int(design_region_resolution * design_region_width)\n", + "Ny = int(design_region_resolution * design_region_height)\n", + "\n", + "design_variables = mp.MaterialGrid(mp.Vector3(Nx, Ny), Air, Si, grid_type=\"U_MEAN\")\n", + "design_region = mpa.DesignRegion(\n", + " design_variables,\n", + " volume=mp.Volume(\n", + " center=mp.Vector3(),\n", + " size=mp.Vector3(design_region_width, design_region_height, 0),\n", + " ),\n", + ")\n", "\n", - "design_variables = mp.MaterialGrid(mp.Vector3(Nx,Ny),Air,Si,grid_type='U_MEAN')\n", - "design_region = mpa.DesignRegion(design_variables,volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(design_region_width, design_region_height, 0)))\n", "\n", - "def mapping(x,eta,beta):\n", + "def mapping(x, eta, beta):\n", "\n", " # filter\n", - " filtered_field = mpa.conic_filter(x,filter_radius,design_region_width,design_region_height,design_region_resolution)\n", - " \n", + " filtered_field = mpa.conic_filter(\n", + " x,\n", + " filter_radius,\n", + " design_region_width,\n", + " design_region_height,\n", + " design_region_resolution,\n", + " )\n", + "\n", " # projection\n", - " projected_field = mpa.tanh_projection(filtered_field,beta,eta)\n", - " \n", - " projected_field = (npa.flipud(projected_field) + projected_field)/2 # left-right symmetry\n", - " \n", + " projected_field = mpa.tanh_projection(filtered_field, beta, eta)\n", + "\n", + " projected_field = (\n", + " npa.flipud(projected_field) + projected_field\n", + " ) / 2 # left-right symmetry\n", + "\n", " # interpolate to actual materials\n", " return projected_field.flatten()\n", "\n", + "\n", "geometry = [\n", - " mp.Block(center=design_region.center, size=design_region.size, material=design_variables),\n", - " #mp.Block(center=design_region.center, size=design_region.size, material=design_variables, e1=mp.Vector3(x=-1))\n", - " # \n", + " mp.Block(\n", + " center=design_region.center, size=design_region.size, material=design_variables\n", + " ),\n", + " # mp.Block(center=design_region.center, size=design_region.size, material=design_variables, e1=mp.Vector3(x=-1))\n", + " #\n", " # The commented lines above impose symmetry by overlapping design region with the same design variable. However,\n", " # currently there is an issue of doing that; instead, we use an alternative approach to impose symmetry.\n", " # See https://github.com/NanoComp/meep/issues/1984 and https://github.com/NanoComp/meep/issues/2093\n", "]\n", "kpoint = mp.Vector3()\n", - "sim = mp.Simulation(cell_size=cell_size,\n", - " boundary_layers=pml_layers,\n", - " geometry=geometry,\n", - " sources=source,\n", - " default_material=Air,\n", - " symmetries=[mp.Mirror(direction=mp.X)],\n", - " resolution=resolution)" + "sim = mp.Simulation(\n", + " cell_size=cell_size,\n", + " boundary_layers=pml_layers,\n", + " geometry=geometry,\n", + " sources=source,\n", + " default_material=Air,\n", + " symmetries=[mp.Mirror(direction=mp.X)],\n", + " resolution=resolution,\n", + ")" ] }, { @@ -134,44 +146,39 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "far_x = [mp.Vector3(0,15,0)]\n", - "NearRegions = [mp.Near2FarRegion(center=mp.Vector3(0,design_region_height/2+1.5), size=mp.Vector3(design_region_width,0), weight=+1)]\n", - "FarFields = mpa.Near2FarFields(sim, NearRegions ,far_x)\n", + "far_x = [mp.Vector3(0, 15, 0)]\n", + "NearRegions = [\n", + " mp.Near2FarRegion(\n", + " center=mp.Vector3(0, design_region_height / 2 + 1.5),\n", + " size=mp.Vector3(design_region_width, 0),\n", + " weight=+1,\n", + " )\n", + "]\n", + "FarFields = mpa.Near2FarFields(sim, NearRegions, far_x)\n", "ob_list = [FarFields]\n", + "\n", + "\n", "def J1(FF):\n", - " return -npa.abs(FF[0,:,2])**2" + " return -npa.abs(FF[0, :, 2]) ** 2" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "opt = mpa.OptimizationProblem(\n", - " simulation = sim,\n", - " objective_functions = [J1],\n", - " objective_arguments = ob_list,\n", - " design_regions = [design_region],\n", + " simulation=sim,\n", + " objective_functions=[J1],\n", + " objective_arguments=ob_list,\n", + " design_regions=[design_region],\n", " frequencies=frequencies,\n", - " maximum_run_time = 2000\n", + " maximum_run_time=2000,\n", ")\n", "opt.plot2D(True)" ] @@ -185,15 +192,17 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "evaluation_history = []\n", "cur_iter = [0]\n", + "\n", + "\n", "def f(x, grad):\n", - " t = x[0] # \"dummy\" parameter\n", - " v = x[1:] # design parameters\n", + " t = x[0] # \"dummy\" parameter\n", + " v = x[1:] # design parameters\n", " if grad.size > 0:\n", " grad[0] = 1\n", " grad[1:] = 0\n", @@ -219,44 +228,54 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "def c(result,x,gradient,eta,beta):\n", - " print(\"Current iteration: {}; current eta: {}, current beta: {}\".format(cur_iter[0],eta,beta))\n", - " \n", - " t = x[0] # dummy parameter\n", - " v = x[1:] # design parameters\n", + "def c(result, x, gradient, eta, beta):\n", + " print(\n", + " \"Current iteration: {}; current eta: {}, current beta: {}\".format(\n", + " cur_iter[0], eta, beta\n", + " )\n", + " )\n", + "\n", + " t = x[0] # dummy parameter\n", + " v = x[1:] # design parameters\n", "\n", - " f0, dJ_du = opt([mapping(v,eta,beta)])\n", + " f0, dJ_du = opt([mapping(v, eta, beta)])\n", "\n", " # Backprop the gradients through our mapping function\n", " my_grad = np.zeros(dJ_du.shape)\n", - " for k in range(opt.nf): \n", - " my_grad[:,k] = tensor_jacobian_product(mapping,0)(v,eta,beta,dJ_du[:,k]) \n", - " #Note that we now backpropogate the gradients at individual frequencies\n", + " for k in range(opt.nf):\n", + " my_grad[:, k] = tensor_jacobian_product(mapping, 0)(v, eta, beta, dJ_du[:, k])\n", + " # Note that we now backpropogate the gradients at individual frequencies\n", "\n", " # Assign gradients\n", " if gradient.size > 0:\n", - " gradient[:,0] = -1 # gradient w.r.t. \"t\"\n", - " gradient[:,1:] = my_grad.T # gradient w.r.t. each frequency objective\n", - " \n", + " gradient[:, 0] = -1 # gradient w.r.t. \"t\"\n", + " gradient[:, 1:] = my_grad.T # gradient w.r.t. each frequency objective\n", + "\n", " result[:] = np.real(f0) - t\n", - " \n", + "\n", " # store results\n", " evaluation_history.append(np.real(f0))\n", - " \n", + "\n", " # visualize\n", " plt.figure()\n", " ax = plt.gca()\n", - " opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n", - " circ = Circle((2,2),minimum_length/2)\n", + " opt.plot2D(\n", + " False,\n", + " ax=ax,\n", + " plot_sources_flag=False,\n", + " plot_monitors_flag=False,\n", + " plot_boundaries_flag=False,\n", + " )\n", + " circ = Circle((2, 2), minimum_length / 2)\n", " ax.add_patch(circ)\n", - " ax.axis('off')\n", + " ax.axis(\"off\")\n", " plt.show()\n", - " \n", - " cur_iter[0] = cur_iter[0] + 1\n" + "\n", + " cur_iter[0] = cur_iter[0] + 1" ] }, { @@ -268,1455 +287,24 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 0; current eta: 0.5, current beta: 4\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAC/CAYAAABdcw+KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAD1klEQVR4nO3dQU4jRwBA0WrTICQEB5hL5CZBYpFVLhZpDsGGO8xcB4TkgE1nEXlWAWY0nm8rvLctqau8+S6XSu1pWZYBQGN16AUAfCSiCxASXYCQ6AKERBcgJLoAofmdcffJAH7c9NqAnS5ASHQBQqILEBJdgJDoAoREFyAkugAh0QUIiS5ASHQBQqILEBJdgJDoAoREFyAkugAh0QUIiS5ASHQBQqILEBJdgJDoAoREFyAkugAh0QUIiS5ASHQBQqILEBJdgJDoAoREFyAkugAh0QUIiS5ASHQBQqILEBJdgJDoAoREFyAkugAh0QUIiS5ASHQBQqILEBJdgJDoAoREFyAkurBnf2+242nzcuhlcKREF/bsj7++jD8/fz30MjhS86EXAP83v//2acyr6dDL4EhNy7K8Nf7mIAD/6dVvXccLACHRBQiJLkBIdAFCogsQEl2AkOgChEQXICS6ACHRBQiJLkBIdAFCogsQEl2AUPo+3XdeIwlwENPUvf84jW75wQCOURbdp6encX9/L7zAUVmWZVxdXY2zs7Nkvl8e3e12O05OTsbd3d24ubkZ5+fn4+XFn/YBh7darcZ6vR63t7fj+vr6W69+pWynu91uxxhjrNfrakqA77LrUyG7vbA7Vphn/4UJHIddj8pjz/zKmKMF4Fgcokfu6QKERBcgJLoAIdEFCIkuQEh0AUKiCxASXYCQ6AKERBcgJLoAIdEFCIkuQEh0AUKiCxASXYCQ6AKERBcgJLoAIdEFCIkuQEh0AUKiCxASXYCQ6AKERBcgJLoAIdEFCIkuQEh0AUKiCxASXYCQ6AKE8uiuVjoPHIdD9CibcVmWMcYYm82mmhLgTbse7fpUmLOJ5n+nuri4EF7gKMzzPB4fH7/1qTC9U/i95f/5+Xk8PDyMaZr29UiAn7Ysy7i8vBynp6f7fOyrocuiC/CBvBrdbk892nMTgO9V/gJPo+toAfjo3N8CCIkuQEh0AUKiCxASXYCQ6AKERBcgJLoAIdEFCIkuQEh0AUKiCxASXYCQ6AKERBcgJLoAIdEFCIkuQEh0AUKiCxASXYCQ6AKERBcgJLoAIdEFCIkuQEh0AUKiCxASXYCQ6AKERBcgJLoAIdEFCIkuQEh0AUKiCxASXYCQ6AKERBcgJLoAIdEFCIkuQEh0AUKiCxASXYCQ6AKERBcgJLoAIdEFCIkuQEh0AUKiCxASXYCQ6AKERBcgJLoAIdEFCIkuQEh0AUKiCxASXYCQ6AKERBcgJLoAIdEFCM3vjE/JKgA+CDtdgJDoAoREFyAkugAh0QUIiS5A6B+NOmaIgLcIiwAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 1; current eta: 0.5, current beta: 4\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 2; current eta: 0.5, current beta: 4\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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Uj8RcAl+8YWciw14T9R1G1hfS/3EbiRk2q+9bFFsaft6oLSiIee/3+/b8Xi8EQjtC88P67relGvrqf1i407XWcdFb4Dw4sq7lNGzqdtU+1j3ncgP1he6P+g/nUDoOmsfy38bv3K82Hp/f78RailTJyA2M9cx5sVVL9O1ddX+0GVFuiFl6dfir/1+3759++aK9rPYDZT9YbJ/Op3aX3/99fA1lF52lnGgl9lk8DLF6LVn13tvZMejYmQelbUlULf62r72suitdjM80gdbmY2LmTqPYjdjd1TWvTH7aF9fLpf2448/tuPx+EizYSXLRBcA4B9EKLqlX6RVZmUAAFkqZyovuXoBAOCfype7DRgA4O8MogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUMgy+HxXUgsAgH8IZLoAAIUgugAAhSC6AACFILoAAIUgugAAhSC6AACF/C8T8q6hOkFX9wAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 3; current eta: 0.5, current beta: 4\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 4; current eta: 0.5, current beta: 4\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAC/CAYAAABdcw+KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAjC0lEQVR4nO2da44kyXGEPetd3TvcBRb8o0voAjyDfuqXrsFb8AICdB9KZyEW2OWyH/XWD8FyrKwtsmo4M9GjXfuAQr8qIyM8PMw9PLOyh8vlUiGEEPowe+8OhBDC74mIbgghdCSiG0IIHYnohhBCRyK6IYTQkYhuCCF0ZHHj77mfLIQQPp2h9YdkuiGE0JGIbgghdCSiG0IIHYnohhBCRyK6IYTQkYhuCCF0JKIbQggdieiGEEJHIrohhNCRiG4IIXQkohtCCB2J6IYQQkciuiGE0JGIbgghdCSiG0IIHYnohhBCRyK6IYTQkYhuCCF0JKIbQggdieiGEEJHIrohhNCRiG4IIXQkohtCCB2J6IYQQkciuiGE0JGIbgghdCSiG0IIHYnohhBCRyK6IYTQkYhuCCF0JKIbQggdieiGEEJHIrohhNCRiG4IIXQkohtCCB2J6IYQQkciuiGE0JGIbgghdCSiG0IIHYnohhBCRyK6IYTQkYhuCCF0JKIbQggdieiGEEJHIrohhNCRiG4IIXQkohvCF2Z3PNX+eH7vboRvlIhuCF+Yf//P/67/+K//ee9uhG+UxXt3IITfGv/2r/9Si9nw3t0I3yjD5XKZ+vvkH0MIIViaUTflhRBC6EhEN4QQOhLRDSGEjkR0QwihIxHdEELoSEQ3hBA6EtENIYSORHRDCKEjEd0QQuhIRDeEEDoS0Q0hhI5EdEMIoSMR3RBC6EhEN4QQOtL1ebo3HiP5zTMM109r+5Tx6LHfEjyOz+3nLZv8s+1fLpebx97zntZxU3xJm/x/8YNbfM5a+BbpOS95nm4IIXx5mireLdM9Ho/19PRUs1m7ooFoo4GAf9a/tSJu66tro9WP2WxWwzBcvVrnwgs/axvcluvHrbZdH12f9Pzcdqu/U+N3x+v397SpbX9L3NNnZ+spG5/P58m2tc2WjVvze8svtH/atvrh5XKp8/k8ftXzt/rr+qRtTOFs2PrqxtFqQ3+e6sf5fK7Hx8daLPrI4Vc/y/l8rtlsVn/961/rz3/+c/3xj3+s2WxW8/m85vP5KEZV1wa6XC51PB7rfD7X4XCo/X5f+/1+/B23AWOdTqc6Ho+12+3q9fV1/Ho4HMbX+XweX6fTaTwfzj8MQ63X69put/X999/XDz/8UD/88EN9+PChNpvN1bn2+329vLzU09NT/eMf/6iXl5fa7XZ1uVxqNpuNbfz444/1448/1vfff1+bzaZms9mbPiwWi1osFqPQoW20eTqdxn4uFouxj9vttlar1WhrvIZhqPl8XsvlspbLZc1mszoej/X8/Fx///vf6/n5uV5fX2u/3482GIahFotFbTabenx8rA8fPtTj4+PY/uFwqN1uV4fDYezL6XSqw+FQT09P9fz8XC8vL7Xf78dFh4CzWCxqPp+P59AghIWqC19hf+HjWu/VoMf+dT6f63g81uVyGX0H58fxq9WqttttPTw81OPjYy2Xy5rP5+PYlstlrdfrWi6X47w9PT3Vr7/+Wk9PT/X6+jqeA+dfrVa12Wzq4eGh/vCHP9TDw0MtFovR1w+HwzjfGEPLL47H49iX+Xze9Ivj8Ti+F+sOfvj6+lq//PJL/fTTT/XTTz/VL7/8Ui8vL6Mfoc3vvvuuHh8fx7Zhh+PxWK+vr/Xrr7/Wzz//XD///PPYBtYDrzHtw2w2G/10uVzWZrOp9Xo9fsXagCacTqc6nU6jDiwWi1qtVrVarUZfXywWb/yL/YXb+Nvf/lZ/+ctf6k9/+tPY5tekW6Z7uVzqcDjU8XisYRjGgbcyH14Ux+NxFF4YqurjxGExY1Igriqm+prP51cLFiKOyYdToR9ot+qj6KI/WNjL5bLO5/ObYLDf7+v19XVcfFjoLKQ4f9X/La7dble73e7NuFnQzudz7ff78Xte4GhzuVzWMAx1Op1GscWCgIDiGLXJ8XgcBQWCgHNgDIfDYQw+KspYVCq6sBfmmhcD/47nD9+jXc2mWsdwcMfv4B8QWtgO36MNjBd9W61WV20tFovRX2Aj2OL5+fkqYOIYnBu+ezqdaj6fj2sEAYDncTabjX+Hb+z3+zocDqM9YF/0j30VbWJcvGbYx2Cv5XJZp9PpKnDBBgjU8FUOWHw82w1t667P7SThC4fDYTwvfIrF0vnB6XSqxWIx6oyDfQ027VmT7ia6yAo4S6hqlxJYCDhbYtHi9+l5qmo8BoKJCYOxXfRdLpdvspvNZjMKF86NxXC5XGq73Y5ZBmcoi8WiHh4ear1ej4sKzsDbuWEYxt+rXdgh1VnRBmerHGywaOC8EEjO6NxWEO/b7XZVVeNXCBOcnoMRxJaFC0KBc2AMx+NxtAfOC7txtstzyhkr+gg4O3bHcUBh+7IfsD3wM/o6m83GgHk4HEYRxN+xu0JfsLtSgYBfcEKx2+3GII0+qfDDdm5d4Dgtf/C8ckDh9YOv+H69Xtfj42MNw1Db7fZqx4QscrlcjkGT/RMZKs6JHRMCQ2tXiUQDaw9ZLbRCx42+auDjn9nfeH0z7EtY273oKrpVH7M0prU91NqVi4bsQAycUes0vBBV1DHpvEVDSYGzMs2i4YTYIrIoY0Lh+Jrt8BZSFwoLiIqJvofLFfpeBDqIBmdTnF0CCClsyxk7Zy4s4lhcvBvgzANjQ9apQsKlkdYuhbMutgsfo/7CW1gnXhgPBxFtV8UegoBdATJV2E4DkLPvfD6/yuTQr9b8OR+5lcnpzojHw0GRM+Dlclnb7fYq0+ZSns4Z7IIkA8LLorpcLq92n7rueO2xgOI8PCd6vNMEpweASwe37Pi16HrLGA+OhVazVUYnaD6fX2WLOgl8Ls0QOSvg98BhILibzWasJ2lk1wChmZRGYywYl1Vq/YgDgtaVOLhwn/ViF7eN3/M5IbhOpPhYzh5ZNNixdYvOYsd2UNHB+JwAap/YFjwmPofL2rW/LmNUoXfZGL8XYol54/nDsWwb7hf3h+2K8oDaAr6F32tmx8Lm1o5mfjwH2AGxrdEGRFIzaPY7hucEwXW9Xts1zaUsnkcti6iQql3YXi7L5eMYXgvvSVfRBc4J9fcqoHASziickXkxuvZbQlP19m4FJ2jaDv9dF4Bmta0aNosz16gcGoDgsFhUTuB0/G4broKu52K7YkFyMIMAoZyjc6eo7WAHLUu44Mn25uPwvTuuZROdB7Y9hATzouLAcwb7sLCrGLjAqMc4+NoF+q62cOi6cdlv1XV27Wym9na+z9+31pGzfWv9t9Yz95EFV4O4tqc+rn3uybuILmiJIGhlrjyZU+KHl9bJWufQvrGD6oLR/rqFxe+F4KqD3HIAZ5+pq/KcofBxU9mgZv6cfWjmwefkrTtEwdnIiYNrlzNItafLgphbx7V2BGoDDTh8l42O1fWJj9M6vfZbg7Gem4Wdd0za15af6Njc+LlO3xJT97M7T6s0pu3o33in4dbGLR1wPuHE/b3FFryb6KrgshDAuareCii/h4Vsqm2XmfJxro4E4Az8/paDO4fC+7lmqDU6LDwtQzhRuCXMrcWgdlb7OgfWvvH5uF8sAnivZoytvmsf3Jj1XC0bTB137/n5d1yv1LFyaUHnrOVn3AcOhq5NHlfL/7VPfIwrEWkQ1nr2lFBq+wonN/o+2BK7IL6I6sbYSqSYVvbskg13jGuzF+9WXuAFrZPIFyZULNiRptrXuqPLupDNuZoSzqXZFwsDvueaY0sodNytMfCtPJxNgqmLDFyrVTvoQrwl6JgDXK3XWvSUyLcW79R7pvqnW90pEVCx57IDv/+ePrb67XwSf3MXz1qLG22wwMPf4AMc9F3A5ATFlTrgF3wnhc7fVJAArtzAfqY+xu1xv9C3VhlM6+Ut23GdnstbjJ4DduQdGfexF90vpMGgLLi6UGDM1vbJLRgWQ55AdzWYa3K6heSLU9qWmxh2Co7gPJn8taquhGCq5IFtJe6ZxDncrTR8N4ILOHzBiLM6bsdlYfwz21gvQvH73Pd6LMYHNKjipVmiy2ha42tlpjo29hvus+s3XsMwjELm3uPspoLGosv2YNGqqqsPNfC86e2X7MdVH2u1TnBVHOGLHPQ123Sw/V2w5Ns82VYaGNAW3xus69YFaj2n813tExIKl9T0oKvoupqfbm1cJPqUzMltmZz4QgS5tMB1TLTJdSa+EOZqhHwsvtcPcKBdJ7y6neW+spjwhyi4PffVLYjWtld/z8fqwpvKmKbmh8VHt6La/9ZW2wVYxdUH3fmc4Lq+uwx3qhSAczp/cXbWMesOSzM/FlwWEPgzf3BB15muOZcQtMSMv9fgouuM18Dlchn7iXufueTBH57g0odm87fQYKz9wXhV0KcCy5emm+i6rTscAPcEVl1v+QF+5toiR8oqv8Xh+0qnFpcuBG7DiWJVXTmEii23yYLrJtZlnZodq+i6bRf/rNkDv4e3brAp/52v1mtWpv1220iXFbuvTvjdXDjbqvDy3/lik7atQq220a+cCanvTiUD3A93NwdfhHN2Zh/UbFZtxONFX3GLI0SnNY9qH/4EptqNxYz9C39viXprnt2coK8cMDnQ6vpg+3FSA1gHMF6+/ZNt2ZPu5QV1AM3CWMzO5/ObT79wfctFXI7s/DMvUHZmRp0Kk6/CpOKsC0Mdgn/m/nKb7Dy6EPX2OG0PbTrnwXHaNw5g7OQQY3Vil+lwJsY2cGUHl1U6oXOoHd37kU25cg2jWavahRc2vzhw8gW01gJu9Y3nV8sFLRtoAK96W6LBe/Bxa/SP650uSLiSBicaGuA0oPOa0STHlRwYV5biC7FICty8cJDhkopqgO5wOZGaSoa+Ju8iujAY34zOk+62hvzi5zcAbqs14Ties2ld0NwfFhXgLijoGPV8epx7v2ZVfG4VfrTnsq17hNdtt1j4NbPThefadxe7sNB16+iOnXL8W6KsftIC88pjuVyu73lVcW0Fwnv6yLsKLg+oj7jvb/1uyif03LqWWuLr7gZqvb8luFreQhvcLy43uF0QZ8tqT34hyGhWrH3iJEFtdY//fWm6fgzYvarqamHCAIhEmo1g++QeaKFZjBNcfgjMfD5/c7tYS3y5fQ0eUxmYOjGLTqv/+j4HL+bWmJVWaYX76YTBlSq0DbcFZPvpsxKm6mpT/cTfVQw0sOhxmmnr3KLPbk6nRL8V9DTwtBa1BkD3dxUTzkRbtGqzei61gRNcF0i0b/hZxRbHsD+of3H5xY3Z9V8Fl/uLcemOS+dG57cX7/YxYIUNjAliY/M2iDNB/I5rN61Fi23zarUan4sAhwDqhDrxKiytybu3boefkd3jIoNuG1WQOFDx1WmtX7uXbh1dEHHHc/9hK7Yvxt26XYoXJWecmtFMiXuLewKOu7io51Z7uC0oBw22FZIFtacGGbxXd3Q6Vswx3os2NcNt+SCul8A/nEjyMXrdxH2CEmO659513sZzn/i5E/v9fhynzh9+1g8WoW39nSsz4msrGL8H3e/T1axBywC8KGBQrmVphqPbEX2QC4sl13/wTAW9q6CV4bnMCO06Ica5uMbGWR8vKMBPA3MLn4WWHZLH3bKlE0oei/tIq9rW4TI1Ft6WIPD4YZNWzduVLvB9K6DosSyy7jZC99JP5aHfEFdFgyULAycFjAq4K0MhE2QB537rfeZsXwgvrw8VxqmMXAOTW39uDeO9WpphH4YAc1mC/YJ3s63dEddzeb5xLrcWmPcQ32/iE2kchXVStVBe5UsAiOh4mhE/3xPvU3hBOadRZ+MMvLUtUcHV+3510i+Xy/gpHSxOvEfvmVQnZed1WemUGMG2WiPTLEcFV+2oWSLeg0XT2gqrjVtCxm078XZtMtp3tlUrixuGt1vXqfOwMHAbHGwvl+vnH3C/+KJYK1vX4KlB0gk8ixmyXQcnNToHU3Oi/sU7LhZeXS+3bIr1u1gsxgcCqX04y+X1xYkM9w/JDD+/4r34JkSXHRFZD56JW/U2g1DBwUsfAO2yMC5J8CPtOAAAPo6jLtd4W8KLhcsPoGYR14XPHwPmNjTz5LG3FpHamdFtWeuCBESTt2xunGhT+4m+cbmE2+K5nhJTFxBaotvKlPmcLApTtuA7ODAuvrij2R76hbZ4F8WJAeygpQ5u657sC0KpF4N1R+OyexZBzZZxnCstOJvek03r80DYr1igVXgPh8P4WEhNAHj8LvBjDKwrujN6L95NdLXQzffqqlE4a+BPrMCIrqaposYLgs/hivj6s6vJ6e8129CHpPDEa/v6O1fPhdPpeFq0HEtFRh+ogrmZykq0rzwfbEPO7nRnwpk7t6XndYLsMk0OFjzHVe0nrzl7sj209ARuZeTcngYKl+EqLlnQsbbOw8e5UoWznQY1jL9Va2+VE3T9gZb9Efg0aPCxyHjRNv8bHt1RaCDUQMvCPTWHX5vuoquG4cyDt9UcAYEKm2uHDaqZB5yptYhV6N33bjyu9MFidKsNPXaqX+6YW+27Opa+WriMrnU+tVmrfRa8Yfi47ePj3Nim5kmP48wKGbVuuafq89p3NweuH7fmSl8q5u7+cW6/xVTCcg8s1CqESBo4E261AVtrn9ycsrjjjiTO0FnMIb58LtYD9VPOupHwuCz8PTLed33gjfsdZ0KtReYWMYSXM1xMCj+VHreL3RKbW6LB7wPqqCqgrUDCX3X8miXiPCwm/De249Q2qiWEVW8/4svt4ljdxqrj82Llc3D2gfe4fqqA6tj4fSr2LLh6bvYT/r2KgRP6ll303Dpv+j5n/9b7nG01M22Ns1VbdQLVsoHO460xtdaVBke0i9IBdpz6r6QwX/pkMm7LjV3XUUtv3oN3fZ4uM5V96e/uMTTgLYj+SxAc77YbOMaJJ5+X39vKqhl1Al4IU+LC4+ZyhV5IcPZwtmbbuLFxucYJDWeRrbIHvudPFikqapp9TonQVHtMq26o/tbaBangturcXG/UGj2fk2vZrq+uLIB2WxfP1AbOz6a+om98Hjys5nK5XN2R0grqHAjcbW1ahoLf8H9khj9p8JoKuFO+NxUI3ouuoquG0+ipFwdYuDBZKiIus3MOpTVMlyW4C1OcCbksjdvnW8TwVbc1ruYFGzinwle8NDPTWjFnBzw+dnqtWU5lL2oH93s9D9uGa4MsFi1xmcpmbi0cJyiuzxoo1C6uRn3Lv6b6p1l7S9R1XejzR3jecI+5+oULRlP2QJ2U7cDBpbU+uJR3y95qY+6fC8jOzlOJCF9XUe3QUiPbt9Xm16brv2DXidJMsaqubrXCp8b0P4Oq4KF9dmBMhF4l1bpZKyOEcPHEAYg/juVJ5n7rcyPUFvx77QeLl24ndXwu2+Wv3G/uJ2d33Aft7y1cVsFtOhF2D3KZahfHOltWfbza3hq7tskXzNg2bvegQe9em7hrCPAr/tn5ngq0+pj+G3sVPxaYVtDQMXJ/UWdFe/BzZKW8lt3taWonzlh5/nTXwEkJ+7m2x2sCpQc8AhV3PPBzoDFGHo8LHD3oJro8Qa1PyLDja8arWSWjBuMJY6dzIspZqNa2sA3ke/s0Q+MFqXVjvmWotQ1sjYHtoeI4DB8vPrnsQeuoOEbb1No2OyI/KKV18YTPqZmsO7faje3XQkXSZeaw79QnErktPZ+7oKYBThfvrYyOd2iaNaOW2Srv6C6G+8RtO59ozZeKrs4d2tOHx+CrfgJNs2FeYxxIOOjqTlJFWhOnW0LItpnSDhd4YCsEjJ50LS/whGiU0exnakupN2DfwkV6FTznlFMZI080RBYvfMyYH+zBmRU7H7ftonJV+2E5947Z2VAF0p33Hlrz5Bzd7XLQV/7etdk6j8ueWnPn5l771Aquru17UKFHFulESPv7qXPBbbaySe273jLYqhPDTpwE3FPqc+PiuWm938HHueswPG4dAzJtpz0uM/+adK/pasbLmaabAF4EVe1PX1W9zebw/dT2t+ptXYnPrcfof4flGhtKC1zPRd9b525toaYEQLOBWw7rbMvH6rZL50rnQPsCZ+YtOJxZL8Tx33h+Whfj+Dz8VYXVjV8DvDs3257r9c5ufH6eP9hEbebe35q7e+aQx4Tz6VhvJRWaPfMOhb9XzueP/9+Pn9GAT43pjgmwz2upZWpdcsbudjY6t/w3N3eYd+wIeNfbU3CrOouuyyoUNr4u9qrrT5k4g7nsCMDZuJaHNrmPDt7istiy0KrguqxM7QF0UbnFrfU7Z0vndDiGbcrn5y2j1uncHGgQYKfX30+JQFVdfSpQ510Dgo7DjVN/x2LKn1bkNvUY9QEn3M4m6BfOx9kgb9lVJKZ82fmFE1BtU/2I2+ZdpcLiq31EzRTii/bd7VzaFq8ZZWq3pTscFVsOkrqLcsHb2aiVNX8tul9IczUUvsjCUZeNiTY0e2Lh4CiJ9zvhYWdwDngr+vF53EsFhG3gREIXrHuPirgTqNaL+6xixRmmCoATdM06eAyKlks0m3LC6HYDejx+1v4wPBZ325tmeG47zj9PJQvoh/M33tay3V1wde22gqqKEXxZs/RW4Gz5orbd8nF+XwsnuPyMB97laJ8wJj0Pr3togbbDc6sJltr3N13TvVwuV1c+2bC8GLkmqhcgOMvlOoxbjDgG5+N//czH3XPLChfdXVTXfrptuMI2cAuWx6WZ8zAMV880aG0JHa6f7j0t4bs1Ln0fsjG+8q5ZBvrTChi62F2WDXu2SlUqttwfrWfqfLZQodPx42urdvup88Z9H4bhzf3mLhC1RHsq29Xgi/O7C9i8Lnl9tvrv+ob1qYERx/Hxrn/6iUaUPVar1die2gbH4ZNwU/P8pel69wKeBKaLAC9ciHJRkWtvLgOEM+pCY8HVjMXBjuTEA87FD+TBcRoMwK2F5QRQM0O+Us2Zot7H3EL/pufUwOX6oGWF1jbQCRaPQxezHuPsxxd7NMtn4dUx6nn4yj9f4GwJJ/+sQbLq2jdcNu76orZx53Pj537rbZQuAWHu2b2pTfVWMEV3nCqGrbID24O39yy8PG5OwFzZA/3G/Ou1lsvlUofD4Y39sc5/sxfSkOm6Z91WXV9F1X8e56KpTozLopyRp4yrDqQZs/udHgfYQXSbNrUlZnQLzPU7XuBOULWdqrcPgtdsUgWDXzzWVg1Of98qU/B4tK8c3DS74q0i96nq+t818cJvlTic0LPv6Hn1PmDur2sf/dR22V68I+I5AW4e9aVz6u4+aPm8BnSXSbpS3tTa4EyX57JFa13qmtHgyIHBrSfsBNCH+Xw+Xj/gpOp4PL4R5K/Nu34iDbQERCcaRXwuU7CTY7vADtE6j96PiMlpRT11dCd2nJHrcew4+H4qwt4KEM6mai/tNx+jT1er8v9DiseGNvkTebxtw5aV+4M5c7f5tYIF982VdfQiKJ+La32tR3w6H+MSAH+KDmPn/rmgzkLtMlw9h+LmCDZ1gavFrZ0cznXPrWIcaF1fW+tAj9fdaNX1HUN6PL/fPagKY+THrbqsn/uqyQPed69dvyTv8uwFzXJc1oHvtVbntjwspJfL5U30d1FTRddNjjoWt+MWMC86zRj5vLccVUVUxZSFRe/mmLL5FGyrqT4xWDSw+zBcf0CBBVdfrT61hLclJpph3fNMZXw/JYJ6DAt7K6hPBdDPuVjD86s2VHHmvk6JiUsG1Pd5B3NLePkrzqtritdc1fWD2PV4Xa8uE4e/6VpTO/DfwKfU07803f9HGv9TSRhYtzlVHxctLziuv7itjjsff62qqwlk0W1dUGstdo7a7pzu9+qoCouHy17598j4OfvnvzuRaQUL2IUzV4c6sauh43g3htYOAm3zV4yX51/tyOPUAKV9mpobHMPj4TqtEzHXJx0T26nKP1cWf+fMWu3N10Mw35pYcJ80ELXs7urQrflx42ll9C7DZYHlsfOu5Z55YvtjF6RlPJ0bJAXYBfOYp/5DyNei638D1qfpq3PrVgcTok7pIroW/tXwXKxfLBZX2VZLJPhcKpqoF2lW7gr9rq+8EKYis/bPCbDbtjvn0v+IwOfmbR9nT/oJuk+Zb7UXB1vN3LXv3AbfD71arcaPLyMjqqpRjFxGw23zAmPR4cV3S4hasLiwr0MYVKyQSOBnzs41cKrwc7lCyzyaFbo2nc9X+QeUOz9H4D8cDmPQxy4D7+WyEO/EOIHi/zjB7+FAAvuxbqAdN7f84Q2+DqB645K9HnQVXXZK93e9nw+G4YsMmEQ4HISW/0ea3gTPE8mTyQ9FxtYUx3NxHQLLzocro+wsug3jrIDP4zInZyfNPnVBsKC1amTc1nq9Hq96V70VPBYGtjnOp7fW4Py6PeSxwiaot+sCc4EObS8Wi1qv17Ver2uz2dTDw0Ot1+tarVZj3/b7/dWDWbgN7murTKRBnn+n42j9zEFtuVyOfeRApnbGHMHX0E7rPnb+JKTOEQuJq9MyGuCdvbiMwcGeSxyHw6F2u13t9/va7XZX4ouxVH38Z6tcToQv7ff7en19HdvB2mObso05EYBd9C4UV564dYeC06OvSddbxljIOLpo1FGH4TIE2jqdTuNEwQEQbTF5cBi0hwWMRYFPkMHZT6fTVTucSfDx2+32amvIfdUMBY6jmThvF9kenK2wjXA8t69O56I12lmtVm/EgBcW2kMWyQuaBVKdV4WMRZ+zWggPtsYIEFqbZLsisK3X63p8fKzHx8fabrfjYw3P53Pt9/urPmudm+3FdtXAprVJ3Qm0sl9OFnBvKIIb+qj1ab4dEhkZAoir/Wpw5d0U7wD5djgO1loHxrkxJ3p/LScwOP5wOIwC+/LyUk9PT/X09FQvLy/j77kNzB12lfv9fkyYsL5wHF44Xuef/2UPz6mWJnjuXHKgWTLs8Zu9e4FFaxiGq+eBVl1fUeVFwFEWj2vTCM4Rm+9gYPGo+ihceMKTZjjIfnnitQzAE4eFgPuLdQvPW0xegHpRsOqjk242m9psNrXdbmuz2Vw5KosuFh4/rQqOyn1G39brdT08PIxZIo7Ff0+GHZAJQwR4i+Zu19NtnRMnLf+wCLgPzMAeCHAfPnyoDx8+1HfffVfb7fZNpvvy8nL1qMP5fF673e6qLML95DnSq/itLT1fS3C7De4v25l3X0gAMCc4BwQJzzHg/4A7DMNVpr/ZbMZjVYA4gWCxxFxzEsGBGMEY62Y2m70Jjjgf/I2ZCsI8L1pW4OSIbcnzpGsMvswv/L6lG5ywsD9CbKFJvRhuKPwXk//j8VjPz8/NVP6eQasATn2dgoX+1nmmjlWBcVmQtnurn602p/p0z9hbfXTljVa797R/C9fGLVvw9+48Ggxd2Waqn5/Td23D2XnKxvz3f2b+3HvUDrds4eyqx7g2P8cvPme9Olt8qn4w5/O5Hh4ersoZX4Bmh7qJbggh/I5oim73D0c4PiW171l7uYee25LfMreywW+lzfD/ew1+CQ36XJLphhDCl6ep4n3vlQghhN85Ed0QQuhIRDeEEDoS0Q0hhI5EdEMIoSMR3RBC6EhEN4QQOhLRDSGEjkR0QwihIxHdEELoSEQ3hBA6EtENIYSORHRDCKEjEd0QQuhIRDeEEDoS0Q0hhI5EdEMIoSMR3RBC6EhEN4QQOhLRDSGEjkR0QwihIxHdEELoSEQ3hBA6EtENIYSORHRDCKEjEd0QQuhIRDeEEDoS0Q0hhI5EdEMIoSMR3RBC6EhEN4QQOhLRDSGEjkR0QwihIxHdEELoSEQ3hBA6EtENIYSORHRDCKEjEd0QQuhIRDeEEDoS0Q0hhI5EdEMIoSMR3RBC6EhEN4QQOhLRDSGEjkR0QwihIxHdEELoSEQ3hBA6EtENIYSORHRDCKEjEd0QQuhIRDeEEDoS0Q0hhI5EdEMIoSMR3RBC6EhEN4QQOhLRDSGEjkR0QwihIxHdEELoSEQ3hBA6EtENIYSORHRDCKEjEd0QQuhIRDeEEDoS0Q0hhI5EdEMIoSOLG38fuvQihBB+JyTTDSGEjkR0QwihIxHdEELoSEQ3hBA6EtENIYSORHRDCKEj/wvOLPq74CxucwAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 5; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 6; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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ZbNWVu9UY8TvWlkz9izbq+xJmxaj5bTivTq+K2w/Ig61clbnhOSR8e0pq2Sr1Z5X6sYPP/yQXl5euu1VKDoXJroAAN8QRdEN3Ug7YtEaAKDFyllKi1DRjbwxAIBn5OleeAMA8DWD6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABHJpHD+FeAEA8I3ASBcAIBBEFwAgEEQXACAQRBcAIBBEFwAgEEQXACCQ/wKxy1VV3/zy2wAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 7; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 8; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 9; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 10; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 11; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAC/CAYAAABdcw+KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAgvElEQVR4nO2dTXIjyZGFnQATJMiSSb3ojS4xd9ABZjmrWepSYzamu2g3cxYtWrKuIgEkfmYx9rIeXrlHJqpYwbbq95nRCAKZ8ePh8dwjMpG8u1wuYYwxpg+r926AMcb8nrDoGmNMRyy6xhjTEYuuMcZ0xKJrjDEdsegaY0xH7mc+9/1kxhhzO3fVB850jTGmIxZdY4zpiEXXGGM6YtE1xpiOWHSNMaYjFl1jjOmIRdcYYzpi0TXGmI5YdI0xpiMWXWOM6YhF1xhjOmLRNcaYjlh0jTGmIxZdY4zpiEXXGGM6YtE1xpiOWHSNMaYjFl1jjOmIRdcYYzpi0TXGmI5YdI0xpiMWXWOM6YhF1xhjOmLRNcaYjlh0jTGmIxZdY4zpiEXXGGM6YtE1xpiOWHSNMaYjFl1jjOmIRdcYYzpi0TXGmI5YdI0xpiMWXWOM6YhF1xhjOmLRNcaYjlh0jTGmIxZdY4zpiEXXGGM6YtE1xpiOWHSNMaYjFl1jjOmIRdcYYzpi0TXGmI5YdI0xpiMWXWOM6YhF15g3Zn88xeF4fu9mmN8oFl1j3pj/+K//if/87/9972aY3yj3790AY340/v3f/hz3q7v3bob5jXJ3uVxanzc/NMYYk1JGXW8vGGNMRyy6xhjTEYuuMcZ0xKJrjDEdsegaY0xHLLrGGNMRi64xxnTEomuMMR2x6BpjTEcsusYY0xGLrjHGdMSia4wxHbHoGmNMRyy6xhjTka7P0515jOQPz93dsmes3mKnpWV+TdlL6vk9julb2+J7juH38LkfkVvH4Jvq8vN0jTHmzSlVvFumO45jfPz4MVar23Y0WkFhLuOYi96t4+7u7qby+fVcGVwWzlutVtPrqiw+Hz9ZudomLVPLzsrl8vk4PrfqO15n7cvKVbSdXHY1Ht+S2S2pZ0mbMxurLfA6K1ftq+V+yxhmvtFqt5bNP+fz+YtxbI1ZVpa+1nJaZVR1ZnXNnbuU8/kcHz58iGEYbjrva/nuons+n2O1WsXf//73+Otf/xo///xznM/nWK/XV2IU8dmQ5/M5zudznE6n6fXxeJwcd71ex/39fWw2m1iv17Fer+NyucTpdIrD4RDjOE6/z+fzVdlwrOPxGOfzOQ6HQ5xOpxjHcTpmtVrFw8NDbLfbeH5+jqenp3h8fJzqRV2ob7fbxW63i/1+H8fjMU6nUwzDENvtNv74xz/GTz/9FD/99FP86U9/iufn56ms1Wo19XMcx9jtdvH6+hovLy/x6dOneHl5id1uF4fDYWrbMAxT256enuLp6Sn+8Ic/xNPTU2y329hsNnF/fz/Z8XA4xMvLS7y8vMTHjx/j48ePV+WiH2rbh4eHeHx8nH5Q7nq9jru7uzgej3E8HmO/36fthd0xvjh3s9lMPw8PD3F/fx93d3fTmOz3+xjHMcZxvGobxg0/YLVaTT+oCz4xDMNkr/v7+1itVnG5XKZ6DofD9HM6nSYfYz/YbDbx+PgYT09Pky+gPPaF4/F45QvqD2rfYRimcj98+BAfPnyYxnOz2UzJCcqFX/z666/TeL6+vk72gq2z9m6323h8fIxhGK78DvPk06dP8c9//jN++eWX+OWXX+Jf//pXvL6+xjiOqT/wvIMvnE6n2O12ky+gbewHqB/9w5iowK5WqxiGITabzfQbdfG8U9uivNVqNfUTdmSNgS+dTqdYrVbxj3/8I/72t7/FX/7yl0mvvifdMt3z+Rz7/T72+31cLpfSIDgWk4NFEp/DEY7H42RcGBNigImvkRt/c5ka1dEulHc4HKb31+t1RMQUEHjggZ4PMV2v15NzQmwwacdxjP1+P01YOC0E4Xw+l5kKxHW3200Ois/GcYzX19crMYcgjOP4RfshJnBKODgLF+yINqN8FgHOvtbr9eTMbHuMH8o7Ho+TEKDPp9Ppqq/8U60e4BOY4IfD4artPGlRH/eX2452cLsfHh5iGIYrW0DIMWZs3+PxeGWL+/v7L3yGRXAYhqk/HNjZzmxrlLVara58FedjnCB68Dv4NgR8t9tdzTMWH/QfY6tzgW3K52fZ7/F4nOYvtxXjqPP1dDpNn+Fv2BX+gbFiwdWy0QaUiznFwaEH3USXsx1eamVCAsNDpBAVOWpCrHTZCENvNptpgLKBR7atSyrNRhBtedC1TzhnGIarCYBz0Y/D4RCr1WrqE08sjd4oH3VzwOEMYxzH6fNxHCcxQD2cRXNmy31A5sN2ZBFEO4/H49VkxqTVVQWPLU8AtBt18DncVh4j7ntrm4f7w+chC8R4oy4NCvA3TF72UYgNB3iMIT6HPbKMmTM4bj/bkDNbjDGEAZk/Czm3m+3NwZyDAWzBAZmF/nQ6TT683W6n+nne8koH/WYfGobhKuvUTBTHqV/odghnqTz+nKHyXIVts/Iy/8D85FXYrVsS38K7/DdgdsbWfhVnGPjNZbBQ8gTgQWZh5cmYOS0vVeGAPCAaDbkfOA5Le17usIBFfJ5YXC5Hb2x9AM44uJ+ceeA1L9k4i4Ywomz81mySBX+1Wk0T/HQ6lROatwJ0ZcFjpFs7CEboD97XwHALqBfChzFGdoljeOuq8kEeG9hRRZezRu4DBIcFnm0LH2C/YGFUe+E4Hjf1DQb+wKsuiBnbQMuFeGqw04DJv4H6PwcObm8mjCqa7L/ZKlW3mRBsOalprYbYL3vTNdOtUv3M6XkygCojg6G5bD2elzosvBExiQkGHRGdo3HWXu4Xoic7Ki91IuKLicrlZoEF7cYxmbPy0ovtATDxdX+0gj/TYIW2oa0oj8WW7dJydu2nTig+/paJoRkq6ucsneur2qxlsvhiDNnW3Ha1YautLODI/JG9oZ06hmgrfrPAqAirX/E1Dg1w8NdshcG/syyeM1nMJ876dTWZ9YHLYDgAV7qQjVf2Po9ttQL53nT7cgQbNqMluDwZeC+Yz81e49yqPdlv3Q/KljiZcGn7NKJXfUEGkdXJ/VTnbvVRg4MKXMvBVNizOy+y7EqPqY5rtVPrnGtr1f6snKq+jKzPWTsq27TGqgULYtbOypf0s8qXkH1qu7My5/xY5wGLPteJAFLNN6Xy5cweWXbMx7LQV2O+xE/fmu7bCy2j3np+a0JU52q008ibTR4V3Lk+afv0OA0eWGbqBYWsnVW0btmDVwJzqBPzdosGIGREvE2Av1tLu8xO2gesUpYE0eyYpcKp5eJ3dj4HSN5bV+FR+91ie21Ta7wz0cMx3F/2M35fs1U+t1phqK25DF3lsT3Uf6uA0eLWAJxR2fMtyl5KV9HlDqrDZBPnVkFWqnKzOm5xsKy8KhPKPssmCp8zJxBLl6/f4khZwNDMuxK3bGLxOUva1RJc3SZQX0GWw8v0Vh8rUeO/W/1VP7olEajaVbVnabbO7VXmMmneJtPzsnl56zxpzZnWfLyFym7qn29R162864W01uvsHN6bqgRNj9fzquN1omS3aGVbHvxaHVwFlNvDd15k7eTzdS8b52DfSm/H4ow0W2Zl/fiWALfk3GoJxwLAF/ZagWmuLegPZ5hzS8glGem3JgGZGOvYc4bINmHfyG5v4oBQ7V3joqjWm23vKLz1oUmTon7cCmRcfpbpV+XfqgXcb830e/MuohtRf3slcygVj4iYbnHJIqOKG97j47KBz/Zv+bdegQW6bEO5+h76gAtPfBEmc9S7u89L9+wCyd3d3RcXVnhpnwlZNRkyMdAJzwLN9uXjlmTeWcaEMvh2K10yz8F25Lbiinp1LaAVdLhM2BFfitCAoTarbMt24IuSHFx5/LKLoXwc2yjzRb1tC/bWOaXZvPYBwq12Yduqf3DS0BJFtKklvNm85vOyAM2fcfuycenFuz/wJhOcDL2qjfeqpRwGRoWAnW8usupVdMBCx0syFTHNPLJMVutCPZmj6Pn8HiYDyuI90WyCcfuz4JWJDbdFbw/LbKw2YvR4rkPLzLKUVlnaR70vuUIzIM2K2CaVPTT48Pi3AjHGiwMyCzJu6crsolf++XoBj2Hmb+wT2KvOfEUTGBU+vWde7VrdVZGNHQcPpWob2p8xlxH3znjfLdONyAevAiI0ZyCeHJqNRMxfnNCysrIxkbNB1qu12RV0vQUrQ7MOOFpLNLi/KrTaF9hBty5UGDS7yJa92i517uougurvajWSTV4WJ237LZMLZbN4qI+wbTUjzQJFtvppTXwV4Cyg4Vzer1ZfqQJdFrA1QKFuDsQ6PzWh4VVFy744l8vh37rKXJqRZn6RtQWrYy2zd8bb9T5dHlR24Ijbbo/B363bWbiOVtmtzEmFRz/TCaZLu8r5q/f5cwgiRICDjk4UbXtVJ9etmbTapJq8mS35R5d5mYhru/Fa74LQeqpMhn0qW71kS27tSybwKuRzWXZmj8q26rtLA381L7isuT1O/iwrX/eVMS56js6LLFhn9WZziMvgxKSyHbfjlrHhC6w8Dj3pmunykmHphObfugyuIlwmknzOkknY+ruaWNqe1nER1xkgOxo7X5ZB8Gdqp2xS3vp6iTNWduXJ2boTI1tt4Kc1YSvm7h1utZ+P5+U1+52WsyRrRhCY60v1OvtMfaMqV39XvpYFRa2zOpbHqhLxqh84V6+5cP/mVlGtVUUrOdE+9Bbe7t9IU+Mgm2stJ7LJWImmZrlav37LjM9d8jeLEr6Pvlp9+cSk1qT8GrIJrw6ZOelcmS3xy4Ia169lLc1AuJwqUFTC2+qL/q3CgzqXLIN5cleTMrO13p+6pK0tsrZmAe+tRIN9QoP55XKZLiJi/3nJWFVtRD3ZNxqzJAToVmOr/2qrbH/9h/5yxFLnaEXxKspzZMy2ApDF8IUGlJXtz2nZ3IaIz5kDC69muZoBcFDIbgPL6tI9Sz2Gy8Mk4Cxt7s6CTKxYZHj/WTMlfVIW27ois6Vm9NmyVdvKx3O5WpZmh612LOkDsjNtE48t3q/GOCuTRUa3kviOhZa9swCBvmftyPaNK1tHxHQXCL7Iw6LLdS1pH9sK57ItNNut2rTU1yreMmAt5V0vpEVc7+nCSCpeQCcSo0LQGiwVXUTbSmwzh0Smi/a27qnVvqqIVXAk5qWYOiT+xjfbOHq3bmVasiTnehldFrJ9MrJgqJ/zcXqXh2Zdagecm52XCW4myksyU5xX2YTLzW69yvrNy/fsAS8svNxW/smu9rcy0MpmaDsnF3rbVfZ8hiwY6N+8TVOdp3/zcyGUTIS5jCzYZLel9ebdbhnLJkF2v112o7eW2coIWpnxXFvZ+dGWlnBw9ltlJtWFQ7SVBVwdlJ2IhZTthPNZFHGc3qWQ/VYboH6+JY0/1/ZnzI27ZtCZzea+XYbj+Fy2TbZK4D62+lD5TmYT/lyFvMoIOQDrHjCPHfcHP9nDunlOZMG21Ve8zzZjf+K+aD04dq78Khhk2S7XrQmBthdoQpDpir7uSTfR1UGKuM7COJJXz9zVwa8EN4vceqw+V1Tbx47E7eWylgiotkUdi49HHXr1uZqQVduy7YVs33xuadXKlLhu3cvVYzhwsM2ywKrohGqhd8ZkEyurv3ooC7eB27FkklbirYKbZc5cD/tay880cGTZcuZv3D+uvwrCXCbey+5GysZMn7KXrUr1NcriOavtz4Kq6gLsrln2nI9/D7pnutlgqfEvl8sX/6+IJ4juJekjBrMMRx2rumdxzsm1P4pGUl7m4/Mq88uicFV+lgln7Ws5ViUy2r65LKkVYDIn13o40Ki9qrtTKrgdem51U30W4LP+qVhWdpnLnLluLY8FIkOD5VzQzNpbta8K9lWgb9VZLeOzrbdMDHXbEfOen9cbEemWBc7j/2IR8Vn02cY/vOgyOhF5QiCyZVcaWWix3Mb5yOgABh5Lfn7Nx3A7dG83c1TAmZpOTLQNbc7ENytLbbRkW6QlCurArfqy+rWMVtbZyuyzcjOBgr2y7YS5yaGZK97LxD6rX9vB/crawXbR4+bsqyKj/qLHLrnw2npvLrPV4/g91D0n9DxXMJd4vmVlY57z7aCsBby1wLfhRUR6J5LOY55vvBJ8z33dd7+QphM7myTV0k4FtrrYoLd36VI+uyiUOS7vtWa3jPFkh3PwRMm2PfT13FIdx+JHt2Iyu94SzTUYakDUSZDZqOqvBjieQGyD1tL2loydP88CCD7DnrH6TNUG9EXbwpOZM6mlAQ6/q4xUg3srE9UEppV9qwhp+Vwu/gMHPzw/2/bjetgGfM0Cf2M8eJXK85i/IIRy9V/64Hy1AfvZe2S1Ge8uukCXTDygGs2qvU2dUCiL/1FhtuTEcUvbyc7Pgqv/zka/Nlst06olbfY+T2pcRc6yOI34KtjcF7WF2qfKsDApqgwPAYHvqOAAp6Kk2efSzLy1CsmyXK4r4nobqroLgO1RTV68l2Xp2QXhLMHInuvBf7P/Zf9nTO2Jc7U+PYZXhVo224z3ZavsO0PntvoMAl/2/I1svmfBhy+WZXryW+Hdn72QZRd3d5//ZQ5fqY24/i+eXI6+ViNXzvktg8HCmz3UmtuZZZDczizgaParZeJ+SRUCFvls1cDt1v7oYxWrDEz7qfblz3VrhfvL/eKLm9qu6jylyojnVhk6ibn9KC+zc2YTtbcKOcZMt314NcHt0Taqv1WBMwseKrraV66H/Rn9ry6yLSETQ/yeW1no35kfY3yQAOlF6Wxc34OuopsJQSY+/GUDHnwupyq7VTfqywR76UBUx1WTWLcXMtGtJljEl5mXOg2ySJ6wmu1qgGGbZhlhtq+dZXc6+bJJxRNWP9cysoC5NFvhfmZtz+rLgpuOQ+UfLZvw+XPZqGZ2Kg4og8uG4FaPFOWlfxWIubxsJVmNU0sIW1T24sDdOrf6nEUX/eUVKC6mtZKfJRfN35Kut4xhyV3dogWqzIM/W1qnGpc37FvZ4S19ws+SzfmW8+l7Wf9ZwLLJrI7UupNDl3itDHdOdDV7yY7LxKxFNeYtoc6Ed0n5rbZroEY9md9yezhx0PZnqzW9D5c/Yz/QawsqKBrsW3ONy1d0buj8mNta4OPUR9lWmR4soQriWdCoxBZ61JPu2wvoMN/mpdF37lweFB2wbI9WHVAzMK1DUYfP+oIB1G2Qqh+tW6Lm2lN91roTgydklvnpxNNskfuj2wBzQTBz+DlaQtg6n0Vyrh61zZJ2qTjoN6Y4qFd90fr4IjC/Xy3lKx+pBFXbngViRgMC3xnEdfDFqVYmrGXx3qvOZT5Pb7PU+crjMKcbAHM0+wpzL7pnungdcS2YeudCFvm0jOzzzCmYLNvL7l7Qc/S/BGdZRvXTiqSafbNTZtmzBqpMyHCuvq83p2djxOPCt93oA6v1YhFPoiqDy8ZRA5navWpj67isfzwWKmpq+ypD0vJYKFl82c6tu0sqMUNbcE41N/QxmNrHas5VsO9lcxJ16YU09teWX7HNK5HkvnH9/Bm3J8uiqx+dV+8huBHv9OUIXfpmDled2xJaHvRKkCI+OykMr3tgfLwuXbCXhjsVsv1R9KEVQNBGbeucIOo5lW100mWTpDVGfL5OXLzmgFFl7nivymI46+GLaczSjKSynfpZdccK3xmibWXfqvbm+SLvXHuzucDBoPJzfj2XzbfmggYWPZbHAr7Nz1zgf1mkQUXnD8+NbLtF26HtyRKI1vwGWYKG9yvb96B7plvtm/Lg8FXZai+tZajM2bQufJ5F3cwxswwZF/wgxK0rsNmgA52oWu/c8l3rq+5cyGyQ3Vmg5WWTqxJvFg6up9pry0SqsnsmNLp018+rIIRjNXPLbu3SctReWSDl17o1lf1rm0r45u4WaPlHlgFzfZolZrbl8i+Xy/StML4wynVx+dkKpNpq4XZWYq59WaIjulWSlfND7+lm37WO+BzZ+W4FZJJ872smIGxkZFQ8oDCoTiBm6f2GXJdmuXrrSiVIOrmybIWdJhOC7HVWR5bZoM38G/XxsriaTFpXZSetE5kRMmO+J5Ntoa9b5c5RiWFEfGGD7HnIc6uOub6zoKMeHvvMBvjdCprse5V/VMKufWuVz4EC7/PX8FWUMztp0NW24HU2T9l/5urS4AB/g32zC5f4yZ4w+D15l7sXdLDZQYdh+OLLBnOTjM+vhPd8Pk/3tWpGqpnn3LItq1eFqhKIbH+Tj2Fnz77mmGUemTPx8XxeltmprThDqOxfZWCaaXBfsRfMFxzVzrxlkWW8LTKR1cCk+/Esvnx7nj5GU/vI1wJUgLj/bGcWXbV/ZudWMObVVWYn+AG3k8uEfXVLJ/MXbu/SgMdloT6ui8cH/3RTBZcTsTkdYN/WrY9xHL84XgX3hxXdLNMDmjW2Jny2bOMMCqg4Zf+Dq5WtaaTl87hPutRplalXTithyYQ44vPFMIgiZ+lVZsc2atk1CxyZwLTsxTYDvH/LDx1p2RSv1SbZFo4GzSpTzLJQbiuLAo8TfqqsEO+r3y6xNUS0tQpSodbgyULGbdZ+c3sz31a0Pa0tPfbFljhqmXoXU2abbFWG81t2VftkCQ9n2b14l+fpakezia6GrfZe+OIQT6RqEuodAXNRLsvcuI5s4LIytW+Z6GQCvgQ+Vm1UZVCtn7m6kCFlgSNrh65ytH38G+e27uBQkdZ69UItzkFb9XwEAs0Kq/5z2S17qV2rCztZv7g/1Tf1lrZTs8fWfKv6mV0nyO7QqIJT1m/1d03CWDg1QKqNdO5nfeO2ZX7Vi+7/rge/dR81W+Zm2wQtcWhlUFlbdHD0M7xuOSnaBEHBua2NfvQ960M2WdhB+DMIGf9uTUw+D8s6zgJaost2Rx90AvHnGgjwzaDWhQu1X8T1bX/VGGn9aj/tkwaO1WoVx+Nx2tet+q1/o44qm8XxGBu+kFYFh+x8jC+CAmfG3D8W9bm5olmz9pfv8FCfw/uZqOnc4foqAczaxudUF6i5rbri02CjK5dbt0reku7/gp0nrH4OVGyyq8hfi24VaHStlqpVnxi9yLX0ymg2sfn9zDkqIeD3q/M4oFUPhc/6lWV3rWy3apuKcxYkKxvwJIRwVjbJ2pgFhaxdrb7oc5tZxKu+R1x/5Vf3MLmtlQ2qAJfV2To/6xcnEXNiNGcfLbdaqbAYfg1sA35eReWnvPW45OLc96L7N9I4G80ySv0SAs6pHr+4JLqz8+lj4jRi8nvsFBhM3TPOHjE3d+VYs0pMWO4vLiTycygul/+/sDCOYxqpK4HHcbpky8SOl/W4oMaOzJmOjke2HORJPI7jZL+lEw1l4SIrbA7fwdjgYslcUOZ+s6/h4q22XRMEHUfYjO2rF9C4TvZ93hrj7Rol8zu2CergYKoZdCZEfLFUBZxtxOfBJ7R9GAv2b5TNduTx0S2nLLHiTJbHJPM/HgfMFawKdMXEc6I33S+kRVwPqO7H4uojX0nGIOPhLksik4rFev35nzbyowZVaLUMwA9kxiDib22vRm99KA3bBPbgvg/DEJvNJh4eHmIYhiuRwQQcx3H6W6N8Nnkg4PyDOrk9OhG1DvRPl4D8pRG9ZxnnYwxgj5bw8gUUtJfvbGHR5XFluHy1CZeLn6rdsE2WcbO9uMzNZjONpwZIjKH6s/pJFixhB/gG6mF7jON4NXcwF/RiFaPjiL5wcoLzcRcQ+wZn/1m2zNk+CzO2nnSLTANNBmeqevsc39rGK1jVBW5bL7qJ7vl8jv1+P2Uk2QUwFlz8nWVax+NxmmwYLLzHYhRxvYSBWFXPTIXDZN8xx2TCxON/G7Jer6csDO8hwnNEZufkfyUC50LfMam22+00uTCpxnGMYRhit9tdCQ5sk2UanG2peGnGz+KKB1bjM96XhU30K8EslJyBITtHO1kEdP9NM3BkdBAZvnebhYp9RB+sxL6g/oYykTWyGGiWy+PHAZtXcLArBFG/schBTG3ObdbEgH3t8fExHh8fJ7uwf+z3+6ldmG88R1AW3zvN2S5n/vBz2AGBDXNtv9/Hfr+fgqnu+cIW1epP5y77AlYxfAsYkh60iwMDjy2LKtqs25UYh/1+/9VbHF9D1z1dzgD4PkNe4nEWhgmLAR3HcfrNg8RCjOyZI3yWQeuWQMR1NM+Ee7PZTBkonP75+Xlyfq57HMerH/QB7RyG4Sp7xkR6fn6O5+fneHp6iu12G9vt9mpSHY/H2O128fr6+kWGhkfZsejC1po9bzabL0SXL8odDoc4HA5T+SgDDsxZLeyy2WymgMG2xvhgkh4Oh9jtdlcTVScrhBblwt6og0UG5e12uxiGIQ6Hw9UE5uDJARTlwSbwOxaD/X4fm81msgcyKBYwLo/byTbWlRtszDaBX+v4ISA8PT3F09PT5CPb7TYeHx+vgtA4jvH6+hoPDw/x8vJyNcdQPsRLVxKoh39wLuYbi7BevOUlPAd6TXI4wdFtk2zeYm7xN0A5QeFEgseQtUMv5HIClF1A/Z7czaTWb5Z3j+MYnz59SjuXLXWuGpHsqS39u1Xu16DZrGZl2o5W27OytfyqbN3/qurJthqW2CHbZ2u1e0kdt5RZlfee5c6VvaTMW+tQ21Y+kpWXvZ5re6v9lc+9xfL8lnnb+rulHVU95/M5Pnz4MAWUN6Ic/G6ia4wxvyNK0X2XL0f8SNySzbxVed9S/tI6vnWsWpnjW5b5Pcv+nu392jq+t3/08I3fIm+xCl5clzNdY4x5c0oVf79//m6MMb9DLLrGGNMRi64xxnTEomuMMR2x6BpjTEcsusYY0xGLrjHGdMSia4wxHbHoGmNMRyy6xhjTEYuuMcZ0xKJrjDEdsegaY0xHLLrGGNMRi64xxnTEomuMMR2x6BpjTEcsusYY0xGLrjHGdMSia4wxHbHoGmNMRyy6xhjTEYuuMcZ0xKJrjDEdsegaY0xHLLrGGNMRi64xxnTEomuMMR2x6BpjTEcsusYY0xGLrjHGdMSia4wxHbHoGmNMRyy6xhjTEYuuMcZ0xKJrjDEdsegaY0xHLLrGGNMRi64xxnTEomuMMR2x6BpjTEcsusYY0xGLrjHGdMSia4wxHbHoGmNMRyy6xhjTEYuuMcZ0xKJrjDEdsegaY0xHLLrGGNMRi64xxnTEomuMMR2x6BpjTEcsusYY0xGLrjHGdMSia4wxHbHoGmNMRyy6xhjTEYuuMcZ0xKJrjDEdsegaY0xHLLrGGNMRi64xxnTEomuMMR2x6BpjTEfuZz6/69IKY4z5neBM1xhjOmLRNcaYjlh0jTGmIxZdY4zpiEXXGGM6YtE1xpiO/B8cndbf0x5u7AAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 12; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 13; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 14; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 15; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 16; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 17; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 18; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 19; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 20; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 21; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 22; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 23; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 24; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 25; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 26; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 27; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 28; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAC/CAYAAABdcw+KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAt40lEQVR4nO2d2W5kVxJdIydmciyyStWCrEb3J/hP/Ogn/5gBf5D9F41GNwS1VBKnZJI5+kFYlyuDN1mldtWRrI4NJFhF3uEMETt2xDn35mC320WhUCgU2mD4WzegUCgU/pNQpFsoFAoNUaRbKBQKDVGkWygUCg1RpFsoFAoNUaRbKBQKDTH+yN9rP1mhUCj8egwO/aGUbqFQKDREkW6hUCg0RJFuoVAoNESRbqFQKDREkW6hUCg0RJFuoVAoNESRbqFQKDREkW6hUCg0RJFuoVAoNESRbqFQKDREkW6hUCg0RJFuoVAoNESRbqFQKDREkW6hUCg0RJFuoVAoNESRbqFQKDREkW6hUCg0RJFuoVAoNESRbqFQKDREkW6hUCg0RJFuoVAoNESRbqFQKDREkW6hUCg0RJFuoVAoNESRbqFQKDREkW6hUCg0RJFuoVAoNESRbqFQKDREkW6hUCg0RJFuoVAoNESRbqFQKDREkW6hUCg0RJFuoVAoNESRbqFQKDREkW6hUCg0RJFuoVAoNESRbqFQKDREkW6hUCg0RJFuoVAoNESRbqFQKDREkW6hUCg0RJFuoVAoNESRbqFQKDREkW6hUCg0RJFuoVAoNESRbqFQKDREkW6h8JnxtN7Ecr39rZtR+J2iSLdQ+Mz47//zf8f/+F//57duRuF3ivFv3YBC4Y+G//Zf/0uMh4PfuhmF3ykGu93utb+/+sdCoVAo9OJg1K3yQqFQKDREkW6hUCg0RJFuoVAoNESRbqFQKDREkW6hUCg0RJFuoVAoNESRbqFQKDREkW6hUCg0RJFuoVAoNESRbqFQKDREkW6hUCg0RJFuoVAoNESRbqFQKDREkW6hUCg0xO/ifbqHXi85GPy6d5J+5DWV/8/4te0pfBl4nmtOfh/4Pfnea235PdhLvU+3UCgUPj8OsntTpbvZbGK328Vut4vtdrv34fcRz9FoMBjEcDjc+3+OVJzHNX0d8No5fcf3tYF2+NOHfAznZ7x27z74eF83t8dju9lsuvOHw2GMRqODbacdbtNrbcvHfEo/Ds1jnr9Pvbev+bH7eazyff+d9v+ae792PG3YbDax3W732mu787HZ1j9mk31tO3S8r/sxG83H9Pnya/c+5M99x/fZem4H/+6zI18nj+1gMIjRaPQJI/d50Ix05/N5/P3vf4/7+/v4/vvv47vvvot//vOf8d1338UPP/wQNzc3sV6vIyLi6OgoTk5O4vT0NC4uLuL8/DxOTk5iOp3G0dFRTCaTGA6Hsd1u4+npKe7u7uLDhw/x008/xfX1dTw8PHTXmkwmMRqNYjwex263i/V6HY+Pj3FzcxN3d3dxf38fT09PexM1HA5jPB7HbDaLi4uL+NOf/hTv37+Pd+/excXFRZyensbx8XEcHR11RMa5k8kkjo+P4+LiIt69exdXV1dxfn4ex8fHe22ez+fdvdfr9d69TdSbzWbv+OVyGUdHR3F5eRlff/11fPXVV3F2dhaTySQ2m008PDzE999/H3/729/iu+++i4eHhzg5OYlvvvkm/vznP3fHMx6r1SqWy2U8PT3tfR4fH7u2bbfbPeffbDaxWq26Y5fLZaxWq24MMWicgbmYTqdxfHwcp6enMZvNYjgcxmq1ioeHh7i5uenm5PHxce96jMd2u431eh2r1SrW63WMx+OYTCYxHo+7v/v4o6OjmE6ncX5+Hm/evInLy8s4Pj6OyWQS2+02Hh8fYz6fx2KxiKenp4iIGI/HnSNCIlxvMpl015xOp51tRcRe38fjcUyn05jNZt2x/nCP9Xod9/f38eOPP8Y//vGPvfn69ttv4y9/+Ut8/fXXcXJyEqPRKFarVXf8999/Hz///HOsVqs4OjqKs7OzOD09jel0+qJNJnPa5uMZu8ViEXd3d/Hzzz/Hhw8f4vb2NhaLRaxWq+58AgQ2Mp/P4/b2Nj58+BA//PBD/Otf/4rb29t4fHzsbIdzh8Nhd2/m5Pj4uPOh9Xrd2RZzcXJyEldXV3F1dRXv3r2L8/PzvTZjv7SF9tzf38disYjlctld682bN/H+/fv45ptv4ttvv41vvvkmvv766zg7O4u//vWvcXJy8vmJrwfNSHe73cbDw0P3wdBxLkee8XjcEWVExGq16iZ/NBp1x/K3h4eHWK1We8oOEkNd83O9Xsdyudz7HZPHOThFRMRoNOra4nbxMblwzfV63ZEDH9oM6d/f38fDw0NnnBH7hGuigWTcVhzk6OgoNptNTKfTzomvr69jPp93xDkajWKxWMT9/X1Mp9PYbrcxHo87EusjW34yRlbKPo/jHDyyuoe4TO5HR0edoy0Wiy6oQLhcy8pns9nsETzjTPADtBE7oC3r9TqOj4+7gLNcLjvHZP5zu+kPhAuRMA/MP0oV1QTp9hEvdrNer7t+4w9PT08xHA7j7u4urq+vYzabxXq9jtFoFMvlMu7v7+Pu7i4Wi0XXFtuF7caqj/EYj8ednzBO2ILtlbH1nNo2GX/7QxYL+AL3mkwme363XC47f4fQLX4876vVKubzeex2u5hMJt38kNFB2PSRj+2XPj49PcVisei4aDgc7nHHl0Yz0sXATLhMCEaKapnNZnF8fByz2awbYBw2K0KuHfGLypzNZp2D5zKGUzjug0EdHR3tke7R0VGcnp7G+fl5p7aJzig1Tz6Gyv+5NwaBMS6Xy26y5/N5p7Jx1pz6QDyoOq69XC7j7u4uBoNBPD09xWQy6cYYtW9Denp6ivv7+xiNRh0R4zjL5bL7mICXy2V3DZwL47XaWSwWHfkyvjk1pn+TySQeHh5iNBp1Y0TwXS6XnZOb/HBUOzLnDgaD2Gw2XXDM5QNInfaSJXEewRHn5Dxshr5Aoj6G+WIcPVYOYmRofBjHzWbTBUOUdkR0Gcv19XWMx+NYLBYxHo874rm7u+sIazKZdH2ivyYw2z7jSjs55+joKCKiGwfbL/OG/VnsWOmjNgnUw+Gwm0/PP4EIQWXyhoAJyGQVFl/z+Xxvjrg2806mybXwC0QDfGHixRZaoSnpou5QeDg1xJdVJBNh9Uh09/GO2NPpNCKiU1FMPM7FZGGcRF8rbsj79PQ0zs7O9oLAyclJnJycxGw264jDTgtBWDUQAHa7XVcq4AOBjEajjjwO1WnpFwQP2c/n8y6qLxaLLr2jP7Tx/v4+drtdzOfzPfK0UkAJQMJZPfh6T09PewHEx2P0uRbn3+X6s1WO+++yAmSGzdh2nAHla6Nqc0Cj/7k26ZLPaDTaU7kcM5lM9lSfRYSDBBkaNm2yZv6stCl93N7eRkR0aowsyeUQCDMTf86+GAf8wmOMP9lmTcAoWEgMv8EWnp6eOv84OzuL5XK5d579ivPxP9qE4CIo8W9I16UE+ulyjtV25pGcLa1Wq3h8fOzs1iWwFvjipItTrNfrrl5HSmd1EfG80EBUcqpCdMIYnMZhzHbY4XDYpe6QhCeL+/CBfKkFmmhRtSgVlAuqgQnDwDFglGNO5ReLxd4YmJgyAeT6ookE9UYdb7vdduTCda3qHh8fO2Knvfmn7284UDlNQ83xsYqCYK14TYz53j4mL0Dl0g2ODMHh5FnpEqxou+2MfrkUwf9dj2RsIUzX8SEejvW9cWb3Lf+EBLAbVB0BNCLi8fGxszWUJO1xez13DnRZ9XrsaD/1dQdcrom9cA4f/Ip1Fnzl+Pi4EzEmdftbRHTlEK5Pe8hCnRkwz/gQfSV7YkyxOfOHM0aXGClrZR/OC3WfG02V7s3NTWc4rmNCShGHVzdz/cYTb6VjQ7OjcW0mAqPFqEwykDCTDVxzsiFno2ZSISQMGgVjlU+7nBpbeWbi5fdOw12+gIwZ14jofppIPCZWXx53HD2TkuvV2dk9PrSZMbQDel58X5P0v1trg4w8bm6/59Mfxs/Km3aY9FGurkd6DCECZ2sOlH0BzfPEmGRfcTDIpTXXwLPa4//cB+WPbdqOKBE4m8pB3yRmH2DsnalCrJkQ7YvZR1HUCCrUsceO8fR8c37+cB/uzxiQqdHfVmhGusvlMq6vrzsCinhO2zyRrh3mlfyIZ5Jw1OQ4KxBHZJwgRzDUhdMwX9ukayIlsjLZJkdfG1VLTRYlmheouA+G71TKdcWIeOG8JtmIZ2LxeGRCttNzjBVcdhqnyvnjezEuOYAdQp5jOwnz4nnHYUkZc7A1HJCtRkl3c/Bxm5gXrkvtMpOn1anbBlHYHrMidb98b6fDfWsFfXVMrmdbIROLiM72csnl6empI7NMurmNDjqcb4LOGY7tyjV3ssS8RYvxyh+OZe5M1HkLpG2JdrDQPBgMunt75858Pu/GuRWake5qtYqff/65Sz0YBEc2jI2BscG6JOAaEwbvwnxOLVxP434oYZzMijI78m6365SB63j822mOnd2LOPzeW55sIH0E6dVjGxzj0Uf2GdzXao7zsxJ0quexh1xpjxdI6DdtxMn6arNZfXicPWe00aqTuYdMaH9WL9wr13j7guMh4nUAsmr1whFqEbgPDlocy/1yO3KphXk9BAcbK1erUN/bwcNBx+k0/kifsE3vSHA5gZ8sRJG52ab65tc7Orxtzn0ygdonCAoQKeNpH7Vds75j2/OC5mAw6HY+sWOmFZqS7s3NTfd/KyomIy+kROyn2llVUWc1QdvJnPrkFANy8LHejwhMPGznsdNa2bC7wIsZlBGy4nGbuKc/vndWfCZRp/NuM8dC+N4G5/P5e74P/fMClssJJl2XAlhlz+luRlYkVuoOOF5gg0xQ1BHPQZiARtD18dlx+9qUFafFgPd6ux7pMbTKdJnA8+hA4jHmmNzf3C4TWi6N5NQ/21SeVytvkzL3ttr03DAvrM2wAye3m7GA/CkXUPPF/5iTPE4ez6xg6RslO18nZ44QLyVDK2z6cnNz88ckXXYvsLGZ4vuhtM0r/3k/L46XN6hb6ZgscRD+5sK7a29WaPn8yWQSq9UqxuNxt+XKE+zyhQMFpMU1++puTn2BFXBWuhH7ajcbrZ2OFI1+9xGvyQBj944PatN532bEs9Jl94Tb6B0AfaBfEINJzKTbV4bJStzlDvf/UJ36EDjOdUVS3BycHIQOpdfMlcfXitABgywiZwoO9ATPPhLq+322C5c4cjuyzVgxo26xCfulf983B7b1bIO5LS6FuP9W7h7XLJg4py9YEqzwacp37CJqhWa7F1iNpSbqdNxPmHkwkP1OeZgA73u0wVhlZhKPeN4cznlOi028nOM9sCbRvH3tY+lkriPiFKRMLnu4fOLj6acXCE2+XtBiPJxW2vAYo/yzL+jw8UKcMxXmLtfI8/X77sm1/DO3xUTAh3t6j3HftT92/b5jcVQ/fQbZu8zC+d7+ZNJxOYd7mkQtODyGflDHpOUF32wjzFfEczbnwOQtl3kusa9cl3bt1ec4IPt67Czo2wrK+DmoejtnRHRPVTrouFxD3xyorHbxZdrd9wSr1yhov/e0H8rMPieaPpFGVIz4RSGt1+tuQLw4FRFdvczEZXVppWuD5xwbvKOpyQ+SzbU9jIJygvcQ2jHG4/ELNWYiz6rbzsjfOR+jsjO5ZpUJA4JDufUZCuPlUowX/zjP6tFlGMZ5uVx282UlaAKMeA4GecEnL/TwexOQF5CcDaCeIcDj4+MuZdztdt1iJdeivOC6KuTmVDqPF32wImPrYN7Mj23meiTnORhxbas1p+9W3pnYDNuBxYfTZcbP6s79tC9YMGQbs1r2WoRFh1Vt3q3j7WYGx2K/HOd2OEDltQavl1DaM5Ez/9gA88fcEcwcgOjLaxnZ50Yz0nVnI57T0ly74W85RcrIaQfXcRpl5denvPK9mcBMrMvlMqbTaae6bZC8C6EvbcyGm9vgaO6++O+0ycrWx0PYEGg2VEiDfY9WVDhFLrPQJu7nMeXRV0iXPcykn54DjwOLNfn3OEcme/rmmjQPp/DeBpzLffBKuctX9In5c2rvshPnmXB5XwN1RGcWg8Hzk1M88suY9AVd2mvSdWnJNtFnH/7pD+cy7wRaBwsflzONfF2TsVN4P7nIv1GM/DvvZsjtNLHmn1mg2J4ZkxxMjOx32FPmhb4tj63Q9C1jdDgi9mpAJoAMD67TXKdyub6XU6mc0qHQvCILSFfcXl+TPZoQD5HaKtbKh75S6Hdkd+pEGuS0EyfPZQOPTd5twDi67k1/vdsi18lcL7XDT6fTvVILJMF5fgwV1bZcLjsCdPDIi2tWlE6T1+t1p6w5ls33ZDe0w47p2j3j6gVEqyy3hfHyODi7YQy5D4/gMga0j2M5lyDomr/Hjnm2CHBfPJcmxj7C8d/9II9LVl7oNIF5rBz0+tqWiZf/m8BccsNG/JIgZz9sW3MbDy2k8unjgdfgEl8uD+ZyRgv8JuUFpyv8Lte0Mpnxk0myikHp5ZQh1x8hXL94BNLl735xi9O3XMvinn3qNuLlK+UcGFzbc/2QOrNTU+DySF6swPFdjnhNCUXsb4uyuuG4bIh2OsbGBOfAlpHVi9votJz78JNSiFPpfH2PI/egPznNj3gOgG4XY5cdzyUXSBnbwBYIfC6dMH4OiK595/vkOm0m1zy2Hk/6a4WLfVtYRMSeYMhz4LJI3vJmG8cWc50/q2yXjbxVzI8BM6d+UIg5ykoU8UTZj4eM2Dlh/zK5eq2mrwbNcX9I0t1sNjGfz+P8/LwzSKclEc9PLFEXckSyao2IzihQSI5kVsERz0oBYuOVdjg6uxNynZXrZ0PtBu+AQoAwcp03p6UmbUgi1/5yyuVFCCtJty2rftfHnaJa3dlo+3Yu2NCZKztcDgg2bjso52aF6TFyX13L5/8mL+5nIvACVSa0TFwusdBGZyVc38HANUyQXzxDyQUbon+MmdubFZiDam4v/XIdNAcvK27GigBhG2Rs8gJu/uTMwWUwxi5nd/Yfv87TPueMzguh2datZtfr5+1q2CPjzLyhvrFV5oQaMoSOwGIvfSv8Ji+8IQKzSOO65Waz2SvGewK8Gd0LPVlJ9aXhrh96IS7i+ckyr+haLeU6l9NQf/pqYTioX4Ho+itjwL19381m06XpHO93HthQnJ6bjOzQlBj806k9bfWiiF8MwvsicELPTUTsbSXqSzndvtxOSMBkb3Vv0nXmYPLySraPwwZymuqAxXkOXtTzyWyYUwczl0+y2nLZIY9xrol6vCh3WaEzNsAq2oHUtXnXUE1E2CJk5aDibC2TOp8sRNwG+okdW3V7USviF2LmiTGXrRyA7Ufb7bbrg99sFxFd+cc+Rz9cRmScLSZub2//uPt07+7u4uHhIbbbbZdSewXSUfy1NMxFe9fXrFowhByV+9KIvgK+Jz2nq05Zs8KL2CdbXmWJkbhWl9/GhJF6PEz42ehoH6+lxLjoAxGd+uh6vY6Tk5Mu6Dnl43hKOKRxbID3i8Xzgov77P3VrmGDPqXp+qpLS/weJeY5wkmz0vYOC/7Nfa0srYAB5wPqnw6InhPOWa1+eWuVS0mM0dHR0YuFOJcpeCoqr/j7XrSd+afdkD37sD0nDmh+2fjt7W33QEPE82soeW9vXgCjj3ncvEhFdmCfOORTfb4HXMY5FFi9WMcY9l3T5TCCd65HE4Du7u5e7Bb5kmhaXiCyOA2gRhvx8qkgdjf4w+AwARiP03UTZFZZvhbRLafQfhAjlwG8wOD6EmkTbYYcHx4e9l5SzbVJqXJac3p6upemRuzXU3lJB6mTH8G1GsNYvWC52+06dY/S5xswSL82m+e3W5k8vajj9JWgZvXH/ewUrn0SQGjboVq4V/r7yid2OB9vWzJRMYZ5m1IuO0DWuf/OlqbTaefAuf/YgkmXej3qGLt3JoRtezEvExmKnt+NRqPuxfS2c6+X8I7l6+vruL297b5ZBbvhwR//zvV+goq/TcT+gK0yBrxXmcBopQyyuPJag4UN1/W49b1C1Jmbx82lFDJECwP818LgS6P57gWTpz9MPhNEKtJX+Lcqoqbj37sGxeR4Yp0Sb7fbF4V5HAnDI8UHJtxc+wJ2wpxyQxZe7OMau91u79sNIAinRA5e3BcSpVbOuRgtY5QdJi8W2olMjB7XvELvskBWtzmg5mv7a3K8m8KEblI2WXIdzsnXMGGZEBh3lwX84T6uba/X+w+xMN4eZxO6yQtbxKYcuE2O1EFzYMP2KLnYbmjHarXqvj3E9Wm+YQSVywvTHdysXp2hsABFoKc8aOLN9p5fgJNLZsylxRBjmmvHtM3jyvU9vpPJLy8u51WsfjUAbehbH3otq/6SaEa6EINrTRi0V18xaKIk76PNaaKdPWK/psm1nHYdWhjLqYi3sXGs01/uYaNz7Yo0MpOxDS+n03x9j4nMCw75nbUYnrciQYYYotMpjCqnZnmRwmmcFyT4f67vcQ7OlgnNc++xdtAxoTKPzJ/H2yTla1spZTtxOSoHBdd9vaADaCvjz15iKzLbMtfqW3XPY+z2WE1TSsF2eVG+20ow4HqQLtmWM6TVatX7VUgm2b6FsxywmF9KZflRZWyZdtF/BIDr/y6b4Y/MK/bs7x60vTBunm8EGt+piB/CH66Tu26OjeSMogWake54PN5bwcQ47Mx+Os3pOmmpV8CZCC9+mOBcsHeaA6mbOLLxgb40NuI5ejtacx+TumtQRGaTGqrNRuv0NOL5a4qslA+RmsfQyoxxoj2uC3u7EyRgMjDxcl2XhnAmSh5++UmGA5dVBg7H391uHJI+MPaei1yScJ/5u+uSORXvUzkcz2PgLhn0BS6uCdH4468x4uXZLBYztoyvlXRW+4eCAjbiBTvm04RuZW9btbL297qRKebx9gJnnt9sm/Yrq34WiWkTY+fFQGc33NdlBfpAmYxvdWEMHPzyWEREV/I5PT19sfbzJdGMdCeTSVxeXsbZ2VlEPK8oQqJE9IjYU20YO9GW+iOEFbH/yGAuxLs27NVXK+O8A4HJtlLNiySOkn57EuqEyZ7NZi9I1/t8GRuThReRrL6djnnF2rAxslhpY7V6g3RNqL5XLgOhPKxcGVsTrhcl+oIY89S344M2ejysWl+D5ygfb3vA9vKikZ0cmxsOh90LjiD8QzVOqz1IwtkG9eVc3/d45O9R87jYvj0+Lp94oS0vLDuYcx1sz0/gYc/YKOsx1EutvFGdHt/sP3mXj7ee4SsuQ+QSTC4B+D7+1gpKDChrC7O8+IY4mU6ncXl5uTc2XxrNSff09HSv1uj6l9Vfn2KkdpUVb1YrTDqOkgv1dkwbtSfTNU+XRfKEO7XhvQDc33uJMQTuY2WTVQ3HWVVwPRbCrNxdJ3V5ZTab7a3cmqSz+utbyMhqw2qJtvcFBztHrpV6brKic0rr+cxqr0/p+vhsE7me6Loi17WTc42IfYflWASAFw3dP/qVHzDweDvF9+PH1CRzbZ1xxwaY//yV6/iGywxebKOPDnp5D64DtoMF6pz/cz3XVjmfMclB1fbgfjNGeX69JtM3p34YxA+E5BKks0SXMtmh8ockXcoLx8fHXbqMkmIS7LQmt81m0w2qlUWuRXpCvAjmCY94nkCngHmHAmmu9/XaOMfj8R7hnpycvHhc1IrHjpaVQCYdp8QYCYsFkD0kAJk4bcaQnREQpKykvNfZCz2k1fm73HIwoBSCYbuvXMuOx7jyO7/e046WA6Ftoa8eb2Vux8z1V39c6841Z/roOeyzUy/iMY+2CeyCtQVUsMfdL9rGpvzgjuc1160JWF5LcKDO/kA6bbLEH3K5h/MQCycnJy++8dl1aD82bXFh4vMWRtprn3Rb8G/XwA0HbROux41reKsY7aWtCDmXZb40mt1pOBx29VwG0KvXEfHiRdkoLYrrs9msS2H7aqM5VfNuCICzuLbJx6v0Lup7td6Oy3YgHMWvi6R9ufbn8eBnTm1Rpe4PioaHKbxCbGejPoqD4tRecMQ4+dhYTbpeOCFI9SmRHFicQVgJ0b+srnItnfP6CNclICt0kGvsfdfMbee4vEhHX+hf7jv9IF3tI1zSXY6nlsm4c3/mK+9dZ07plzMD5i1nJShd1649hnnM8iKgRQwB3/Ver1Nst9s98ss7F7Cbx8fHF/PH4uQh/yTYeeHO2Z3r0PkVji63+AtUQc4uGLs8Nl8CTbeM5Yiat1BNp9N4eHjo3iSFsTLxDDJ7HCEoJtkLY16Uc4oX8ayMmQzUM0ZCFM0LC16Ay8rXqoEJ79vE3VfDdF+4f06FMTZIdTgc7i0MmPi8+OHUOuK55JFr1SY+v7eWD8qaazr1pb+5rJDVKX9jnPwx+fWVJSL2305lxzbRZqfxwl1OUV1W8PEOePwOpetjfK73ifolOS4t5X55axR26+Br5en2WKX5nbceV2eDFiaeZ4+9VWHe+sZ5VrTOpEy43i7IvyFPdiI5E3N5AdvC1kya9nFnTla4Fh/5yTVKI5zn8W2Npi+88SRgSFaXTmlRdqjHXIehLup9pC4p5JpZxP77XiFrbyPJBpaVrLd0WaHiNDZelK2Vs6O8Dd7lBHYdeNGBfwMbXsTLp7tMVjnVsxJn7LxNy87GeT6f++fruDZsp8j3dVutlHLpIRNh3rVi5PKRzzPZuq1cLwcfOyXtccoN4TIOuT0ed+YzYr82nPcJOxA4Y6HfuTzl7MH27VQ8Z4K+n/ucicfjlGvDfXaP0qeveUeHg0DeSufSTt51YZXrR+dR+g5atkfOgUdYtMTPOc8lKQs/Z2lfCk1Jl8cNs+pwJOSRRVQlZJqVQsT+t0NkB7EayQsvdvg+9QPhQrZWuThlVgx2ZNf8uF5edc6pk0sJqFm//xbSzXVf/m3SpR+0zcbN71H6DkKMs999YSehPx6/XHPMY5SzAI+5yYc+ZicHVm65Ty6nAB9rIsvB0Om9gwSlAI8x13V5w4RussLxOZ4A3/dEVQ7avlfekuZxtD3YDmxXLmuR+Tk7o+32rxzAsRcHGGzZapWHM3Kb7V/OxnIGiP273GPbZl4sJJg7Cyk4hMfXvY0xCx54x6W/L42mpJs3VfcRKBu62ScYEXupA+cZ2ZlBVlm0w5OeDcMqIhton+rjmhjobrfbq7nidDmd9DhYrXsPY0TsOTj3clR2ZHba7Taa/EyCEC/jDumypcz1PRu+x9uEaxXkbT+eDwjIY8d1PL5ZcZg4c9qL43uxJQf1TGggl3tweko0Oc3PKbnbYuJlfy/XsdKl/8wFdujU3GRum7aN53Ez4eZFYlQiAsCvffRDB/ZDavmDweAFeXvMPPeUHnKphDGgjbapPn/N/bXw8PG2DfzI7zs5tKPG/uKtey3Q9Jsj3HlPUsSzo2Gw7CGNiK7UYMPIpJJTxDyBTm/tAH7bU0TsfYkj6b3TMP5tw0fF8Pv8tSWQgknJJOqUk/JCVjKQtxXPawaag4frf+4P98cxImLP+fvm0UHKCt0LZFa7fcGQn31ZQw6uDpqMSR8pZ0LyGDGmWcHmBSbGhrZBSB4v21tOvd0Hp605A8tK0yo4C4E+IZGvyf38Fq389jrbt8soOXtaLpd7dgLpZrvPgZd+YXMofQdD/mYy9Fwe8mEHcI89PhPxLCIg3b73ROSFWwuVVmi6kGaQ6ngymSDUro2LTfg5apGOc81cs8rH5FKGN7hbNVkN+DynpYB28dPXZlGAhb2+koQfSrCB+0O7MillAsiEPBw+v3TFK+koIm/1skMxbtTQXDJhLK2qvXBn4+Z6Hi8HXNqf0/QcXDmnbz9lVrM+zzU/7mPFHLH/RKIDgY8xyVD+cV+8hSnXvLERE25+3SMEldW8lTT3zMoWle2FYT/thu1k8nQ5Ahvkuh6vbHe2+VzPx2/YreDyBf1gnCg1glxGPOTLWanSBnZJ8BrSvkVsL7JzjRzYvjSavnvBq/I2Vjs9g8cLXTA0jNcqrC8d4ff+d1YhvodfhEwZA4NgK4pVuJWBr49R+s1FpOjc1313vcoGzLHZGNw+Kw47txWHicY7MVA6fvOW1TNGbtXKJ6egrh9zH67hNvTVA/1gBP1D5THfzHleUMxbjHLa6nNol3cJ5BV6+uA6JW3KNuPfuX6dHyxwOSqXYLyvlLnAdphf9yvPN/e3EEDl+vHivE3RtuZg4H2s/M4BHR/I93dq7gDPXCKcuAf2gn+5tp5LFsah7NUql3nN7yfxPfJidrbTVmhKul6ltjLoS9Xt+BALkdqRk2t/yv05DqM79HjtdDrtnuOmLofR0A9Uiw3GysGOTbshLlLdvjpTROwtyEXsf/26jT6TLWBsI14qLD8swlj7Og5Oed78Ny9IZVXoNBP0lStyuYV6ttvD/fICm1P7TEDAO01ofw6atg8TurOZTIKMX1b3Hts+lesdKWwto+0uNZCJ9e3tdmbgrMAlBdfi3b8sEOxPnk/Gzqo4B3Lsh0CU97Gv1798tXlfJpPbZ/vOc5Lb7/n2/SH6rPat9L3lzQvbzspaoOnDEfmFHLkOxyTYmUh9GPRsILnUkNOPrLCseq08I57fFZvfo+Aone/n18jllLCPVHOq5H2c+foeJ8ofXgTr26JDP1CQvHshK1lvO7PxZofqK2XQN6eMXDvXdjmX0onn3QowB6G+WnCfAvVP4Dnm776P7+/jc5vX6/WLYGNVl1Ua7eXhFtuM59PjRNtNIn6vs4nJwbTPPjwOzjzI3kyKWTWakHO5xn30tslsry6vrFarTtEvFou9AGV7yYLjkE97rh1k+Zu5ItuFg2J+oIQA+IcmXdSAU8XRaLQX2fMjeU4jnEa6psgAMrB5Aczt8OZypyevvWjERJUfPXRtri9dt8p0lN3tdnvPxFsBW6H1Ob5XyvteNL7dbjvF0XfNiNirbbn+5YyDazMGVlsOVh5TSjP+u8fRJQSTq9tox87EZgXnc/L+bJ9jEvE4cS/mk7Yypzizx6FvLJh/nrCEECAV5p92YgsEo6ze8tayTLgmMSvRLAA8597+aFWeSw78znbsRe18Hav/7C/YBfOSHxzJ829f4Pp5DcGCA1unzQbjRTv8zdjezePySQs0LS/k+gkEuVr98v1droG6CO/olbczcR2/3s1fygd5RDyTIhGbrxePeJ6w1eqXN+2TXvEY7W73/C6G09PTODs7694lYXKjfWzFct3Izmb1g5HZqSNefmULzuTtMV4E8SIE53vPMV8QyMIiaoxaGIsxJhmngu4HYzYYDLqFOh59hXRd0+WJJQcICC1iv47t4GbbAVnZEpisljnPpRDGJddg7Yi2u7yQMx6Pu3IM7fOiG3OwXC73Fsv8HWHYzsnJSTcPu92ue4uX/cNrHQ7i9C3bCXPj44GDot/V4Jow/TDR+1Flxoe+ur85vb+/v4/5fL73jpDhcPjiW4G9GBjxHIh5cRTky24EBybzCOe6nMB9LZLydrYcOFuQb/PdC7nGhlMul8/fJ8ZkuubIIKG+cF6M6ezsLN68edORbsTzS4/9ch3vJoB0IRlvt5nP551zQK7Hx8dxfn4el5eXcXl5GW/evInZbLYXHBaLRff1PNS6ci3Pj0AyFhg3ZNyX7rl+68WjnOZzr9lsFmdnZ3F5eRlv376Nq6urPWeHGBkr9jj6nQt5UYVghorgPtTAedNazhpoqxca84JHtg9v77ECtyLL6bLr6nkRClLKj3dn1cX5VmWc56/V8b232+3et5gQiM7OzmI8Hnd28+7du85umAcToGuSBHMrYcpMDoLZn2w3OXtwgOH3ZEUQKIRG1nlychKDwaATILnuf3d3170sfT6fd98ywXexuaaaX0xDwKdfzNHx8XFERLcF7ObmpgtOeUHTmZMDOoSLGPPeZHyopcIFTb8jbbFY7Ckgr16TaqG0MGCOMzn4K3VQWOfn5/Hu3bu4uLjoyhWQHxHXiwZZJfL0iu95cnISb968iXfv3sVXX30V5+fnHYldXV3F2dlZ9wIaXuJ9c3MTP/74Y/dyjdlsFoPBoDMiO6qVrBdpsqrLJQTvx+x7+s2E+/bt23j//n28f/8+zs/Pu/Zst9vu/RY42NPTL9+Mulgs4ubmJhaLRWy3z8/W57eTESwcmFAxfqkLhEYm8PDwELe3t3F9fd3Npb+2hxqba4RWxXlF2grRi56e54jolM5sNovLy8u4uLjonJEx8UMFrgE6S3Haj03SBx4yOT4+jsFg0AXuy8vL+Oqrr+Lt27dxdnbW9ZESE4HYL2FyP+j/oXplXl8AeSHML8xxqQWfu7m5eWG7p6enHekyJp4TbP/Dhw/x4cOHuLm5iYeHh711Aq7ljJD7LhaLbq75ooOzs7NOFN3e3sZ2u+2+Kp3v8Ht6etp7iCqvTfiJUr/tzePK9bye9KWJuKnSJQq7LgoJo6r8NiCIxKmEV1gxotPT086o37x5E8PhMObzeWw2m3h4eNgrsnth4ujoKJbL5Z5C8AIdx5B6QcJXV1dxeXnZqUa+gDLi+W397FOkngUhop5wcn6XlZ5Xs3lcNy8goESscAkWVlZv376Ny8vLvW+lhUy5D4Hj5uamUz3e0eD2O2gS9PytICZcv6Ut4hcnm8/nXWkDgnG6R/0RNUo5xlsJaVdfukzwpA+uLU+n0y4YXV1dxenpaee0Lg2ZfK3OxuPxntpi3vwNENybdPri4iKurq7i6uoqLi4uuv3SjD0BjLY7lcb+cx06Z0+MF3Vpq377CzbihUB2C9Fu7seCmOearV6ek/l8Hj/99FP3UBPb1lCS2KgXjpkTBxLGgSB1enoa2+2280FUtHcleF3Aj5XTV+b7/Py88zO+iDLvRmmFQa6PJXy2HcNEFNcc/W+nQ17B/BhM5K7NOC3P6sB47Z5O87l+rvPle/Xtqsh1WU/yp/Qzr9x+7Ly+Nuf75v574STvvvA1+fdrv89/90+umXd6HOpD37m5XYeOOXTdvBD42vXz7/J1D/3+U+zG6JuHj/lBnx99CoFk+8u+km03ly4Otdfnv+ZLfW10+/vu9alj8to9c9vBdrvt1mY+Iw5ORDPSLRQKhf8gHCTd5u/T/ZRI/KmRDPya9IA2fMl7+D7/P8OKp/Bp+CPM+7+LL+1Tre7xpVFKt1AoFD4/DrJ9u8cwCoVCoVCkWygUCi1RpFsoFAoNUaRbKBQKDVGkWygUCg1RpFsoFAoNUaRbKBQKDVGkWygUCg1RpFsoFAoNUaRbKBQKDVGkWygUCg1RpFsoFAoNUaRbKBQKDVGkWygUCg1RpFsoFAoNUaRbKBQKDVGkWygUCg1RpFsoFAoNUaRbKBQKDVGkWygUCg1RpFsoFAoNUaRbKBQKDVGkWygUCg1RpFsoFAoNUaRbKBQKDVGkWygUCg1RpFsoFAoNUaRbKBQKDVGkWygUCg1RpFsoFAoNUaRbKBQKDVGkWygUCg1RpFsoFAoNUaRbKBQKDVGkWygUCg1RpFsoFAoNUaRbKBQKDVGkWygUCg1RpFsoFAoNUaRbKBQKDVGkWygUCg1RpFsoFAoNUaRbKBQKDVGkWygUCg1RpFsoFAoNUaRbKBQKDVGkWygUCg1RpFsoFAoNUaRbKBQKDVGkWygUCg1RpFsoFAoNUaRbKBQKDVGkWygUCg1RpFsoFAoNUaRbKBQKDVGkWygUCg1RpFsoFAoNUaRbKBQKDVGkWygUCg1RpFsoFAoNUaRbKBQKDVGkWygUCg1RpFsoFAoNUaRbKBQKDVGkWygUCg0x/sjfB01aUSgUCv8hKKVbKBQKDVGkWygUCg1RpFsoFAoNUaRbKBQKDVGkWygUCg1RpFsoFAoN8X8BTGk/N2cNQcsAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 29; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 30; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAC/CAYAAABdcw+KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA0o0lEQVR4nO2dyY6jx/XlD2cyB+ZYkwwbsAWvZOC/8XP0slf9Yg30A3VvvDCglSEbsGC7KkfO89CLwi94vhCrJLmrQmr5HiBRQ5L8Yrj33DGCtf1+r0AgEAiUQf2nHkAgEAj8JyFINxAIBAoiSDcQCAQKIkg3EAgECiJINxAIBAoiSDcQCAQKovk9v49+skAgEPjxqH3oF+HpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCnxjLzVarze6nHkbgZ4og3UDgE+O//8//rf/xv/7PTz2MwM8UzZ96AIHALw3/7b++ULNe+6mHEfiZorbf7z/2+4/+MhAIBAJH8UGrG+mFQCAQKIgg3UAgECiIIN1AIBAoiCDdQCAQKIgg3UAgECiIIN1AIBAoiCDdQCAQKIgg3UAgECiIIN1AIBAoiCDdQCAQKIgg3UAgECiIIN1AIBAoiCDdQCAQKIgg3UAgECiIn819uh+6YrJW+3H3kn7PVZX/T/ixY/lU8Dn9VGMohc+xf/9Ja/ZzkNFPjU/FAT8XOYj7dAOBQODT44MMX9TT3e3ef2/Ufr9PP9vtNv3we+m9VarVaqrX68lC+Z/+dz5rt9tpt9tVPv8Yvu/3DsbQaDTUaDQq1pL3Mx5ey5h9nD9kHPk8js2FsTSbTTUaDdXrxzNE/jm8j/F9bDz5OPj7sXl8bB39/3j/sfVxOcjn7chlwMfk487fw/NYt/y5+Tr7PI/N+WP7ms8zl9MPgef7XrncH3v9drvVer2u7PExOTw2jh8jlx+Sw1wPXId/qF59bBwf06lcTvk7f/p4geuwywHP/5hefGoUI93FYqF3795ps9loPp9rNpvp7u5Of/vb3/T111/rm2++0cPDg9brtRqNhk5OTnR1daXr62udn5+r0+moXq+r1Wqp0+no9PRUp6enajab2mw2GgwGuru709u3b/X4+KjZbKblcllZ+O12q+Vyqel0qul0qsVi8VHyrdfr6na7evPmjb766iv9/ve/19XVlSRpvV5rvV5rv9+r3W7r7OxM19fXevnypV6+fKnr62v1+311Oh01m820qQjFcrnUbDbTbDbTdDpN/x4Oh7q/v9fbt2/17t07PT8/azKZpHXp9/v68ssv9cc//lF/+MMf9OLFC7Xb7crnr9drjUYj/eMf/9Dbt2+13+91e3ur169f6+LiIq2lpKRUm81G6/Va8/lck8lEg8FAj4+PGo1GWi6XajQaarVaarVa6RmMnbXebDYVEliv19put2mNrq+v9erVK718+VL9fl/tdlur1UpPT0/6+9//rr/+9a/65z//qcFgoNlslta31Wqp2+2mcfMMlJH1XCwWWq/XqtVqarVaSYa++OIL/fa3v9VvfvMbXV9fp+cOBgPd39/r7u5OT09PWq1WqtVqaa7IQL1eV7PZVKfT0cnJiU5PT3VycqJWq6VarZZkYbfbqd1uq9/v6+bmRldXVzo7O1O321Wr1Upy4Gu/XC41HA719u1bPTw8qFar6c2bN/riiy/U7/fTM3j9arXS/f29/vznP+tPf/qTvvnmG41GI223W7VaLZ2dnenq6kqvXr3S69ev9eLFC11cXOjk5KSiN71eL62nf/5ms9FyudRoNNLT05Pu7u7S+kwmk7RGyIIkPT8/6y9/+Yu+/vpr/etf/9Jisag4UA6IrtvtprF0Oh01Go3Ka1jrm5sbvX79Wi9fvtTl5aWazWZF9pbLZVr75XKp8Xisp6cnPT8/azababvdqt1u6/b2Vl9++aW++uor/e53v9Pt7a1OTk7U6/XUbDb16tUrdbvdH0tr/xaKke52u9V0OtVms9FsNtNkMtF4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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 31; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAC/CAYAAABdcw+KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA0sklEQVR4nO2dy45jx9WlF+9MJsm8Vqkk2b9hw/DEAv6B36OHPeoXa6AfqHvgoTwwLAiQILkumWQmb8k7e1D9Ra4TxayS/KtCankvgKisTPKcOBF7r32NYO1wOCgQCAQCZVD/uQcQCAQC/04I0g0EAoGCCNINBAKBggjSDQQCgYII0g0EAoGCCNINBAKBgmh+4O/RTxYIBAI/HrWn/hCebiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4g8BNjtd1pvd3/3MMI/EIRpBsI/MT47//zf+t//K//83MPI/ALRfPnHkAg8GvDf/vPz9Ss137uYQR+oagdDof3/f29fwwEAoHAUTxpdSO9EAgEAgURpBsIBAIFEaQbCAQCBRGkGwgEAgURpBsIBAIFEaQbCAQCBRGkGwgEAgURpBsIBAIFEaQbCAQCBRGkGwgEAgURpBsIBAIFEaQbCAQCBRGkGwgEAgURpBsIBAIF8Ys5T/d9R0zWaj/8bNIPHFX5X8KPGcdPCX+mn2sMJfFTruG/23z9EmT0p8ZPpf+/FFmI83QDgUDgp8eTDF/U093v335v1OFwSK/dbqftdqv9fp/+Lr21Svnr2N/A4XBI1/DrH8OH/u6o1Wqq1+tqNBpqNBqq1+vpGvn7eG+9Xj86xg+Ng595jvxZuF6j0VCz2ayM59i1fU4Z01Pv92fycbxvjvz973s+4GPgWfxeu92u8tyOHzqX+WdYD+bq2H3z+73vXvz+fWPJn/FD7+f+vlZ8/qn3oze73e4d+fDnPjaOHyOXuRwemwvGw/r9UL360Dwf06ljYzz2u2OyV6/Xk97k93+fXvzUKEa6i8VC33//vXa7nZbLpebzud68eaOvvvpKX375pb7++muNRiOt12u1Wi31ej1dXFzo/PxcJycnarVaiXA6nY6Gw6EGg4Ha7bb2+70mk4levXqlV69e6ebmRovFQuv1ujLx+/1eq9VKs9lM8/lcy+XyveRbr9fV7Xb1+eef64svvtCf/vQnXVxcqFarabPZaLVa6XA4pPGen5/rk08+0bNnz3R1daXhcKhut6tms1kha8bx8PCg+Xyuh4cHLZdLLRYLTSYT3dzc6NWrV3r58qXG47Hm87nW67Xq9brOzs70xz/+UX/5y1/05z//WVdXV2q325XrbzYbTadTff/993r58qUOh4Our6/1ySef6OzsrPJ+lGq73Wqz2Wi5XGo2m2k8Huv29laTySTdu9vtqtVqSVJ6L2NH+RkD67xarbTZbNRoNHRxcaFnz57p+fPnGg6HarVa2mw2Go1G+uabb/T111/rn//8p8bjcVo/SWq1Wjo5OVG73Vaj0UhziCLudjut12s9PDxos9lIktrttk5PT3V+fq7PP/9cv/vd7/Qf//Efury8TPe9u7vTzc2N3rx5o/F4rN1up1arpU6no263m5RTUpK9brerk5OTo3Ox3+/Vbrc1HA51dXWli4sL9fv99F7kwOd+vV7r/v5eL1++1O3trWq1ml68eKHPPvtMg8Egyb2//+bmRn/729/017/+Vf/4xz90d3enw+GQnvni4kIvXrxIsjgYDNTr9dLYT09PdXJyok6nUyEz5GC5XGoymej29lavX7/W69evdXd3p/l8ru12q1qtpk6no1arpcPhoNFopL///e/68ssv9d1336W5OAaIrtvt6vT0VP1+P43D39Nut9Xr9XR9fa0XL14kmanX61qv15pOp5pMJlqtVkn2NpuNHh4edHd3l2Ros9mo0+no4uJCv//97/XFF1/oD3/4g549e6bT09O0zp999pl6vd4PJ7T/AoqR7m6302w2026308PDg2azmSaT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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 32; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 33; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAC/CAYAAABdcw+KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA1YUlEQVR4nO2d2Y5jx9WlF2cyk2QyM2uSLEsyIBu+sX8/SV/2Vb9YA/1A3ZeGDV/INiBZpaGqcuDMTI59UfiCi1FMlWxXhfTLewEJlTLJc+JE7L32GHEqu91OgUAgECiD6o89gEAgEPhPQpBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBRE/S1/j36yQCAQ+OdReegP4ekGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgLvGPfrjZbr7Y89jMBPFEG6gcA7xv/83/9X/+v//L8fexiBnyjqP/YAAoGfG/7Hf32oerXyYw8j8BNFZbfbfd/fv/ePgUAgEDiKB61upBcCgUCgIIJ0A4FAoCCCdAOBQKAggnQDgUCgIIJ0A4FAoCCCdAOBQKAggnQDgUCgIIJ0A4FAoCCCdAOBQKAggnQDgUCgIIJ0A4FAoCCCdAOBQKAggnQDgUCgIIJ0A4FAoCB+Mufp5kdMVir/+nmkbzmu8l/CvzOed4Hdbvejj6EU3uX6/SfN2Y/9rD81vXuXnPIuEefpBgKBwLvHgwxf1NPdbDbp37vdTtvtVpvNJv1gAKrVqqrVqmq1mmq12oGFOmYkdrtduh4//rn8+3z2h1jmSqWiarWqer3+xlj8M/xUq9X07/zeD43b/50/i/+O69Zqte8dT/6c/hxvG8+xOXrbXP6Q5/Mx+Bz5vTabzRvPnM/xDxm7f5571mq1B+97TF6+7175349995+VAx9D/t1jn99sNlqv10lvXD6OzXM+ln9VDh7SP8bzz+pVtXqY4XxIXr5vTvK1gE9YWz4Dn7gsgFqt9tYxvysUI93JZKIvvvhClUpFq9VKs9lMr1690ueff64//elP+uKLLzSdTlWpVPTo0SN9+umn+uyzz/SLX/xC/X5f1WpVm81Gq9UqCRi/WywWurm50Xfffadvv/1W19fXmk6nWi6XqtfrqtfrajabkqT5fK6rqytdX19rNptpvV4/KCTValXtdlu//OUv9fvf/16//e1vdXl5qWq1qtVqpc1mkz7T7/d1fn6ui4sLnZ2dqdfr6eTkRM1mU/V6PS0wQrxcLrVYLDSfz3V3d6flcqm7uzuNx2NdX1/ru+++03fffafhcKjZbKbVaqVGo6HBYKDPPvtMf/jDH/TrX/9ag8FAjUYjCe9ut9N6vdZsNtOLFy/08uVLbbdbDQYDPX78WL1eT81m8+DzEN5qtdL9/b2m06lubm708uVL3dzcaLFYqFqtqtVqqdVqqVqtar1e6+7uTnd3dwdrwnOuVquDZ6tWq2kMT548SeNer9caDod6/vy5vvzyS33zzTcaDoeaz+daLpfa7Xaq1Wpqt9tqNpuq1WpvkMxms0nzt9lsVKlU1Gw2dXJyovPzc33wwQf65JNP9NFHH2kwGKher2u1Wun29lYvX77U1dWVhsOhttutms2m2u22Tk9PVa/X0xxxv0ajoXa7rXa7rXq9ru12q/v7e93f32u73arT6eji4kJPnjzRxcWFut2uWq2WGo3GG8qOHEwmE7169Uq3t7eq1Wp68uSJnj59msbgn2fcf/3rX/XHP/5Rf/vb3zQcDpN8nJ6e6uLiQk+fPtXTp091eXmpfr+vdrud1u/k5ESdTifJgcvmer3WcrnUfD7XZDLRaDTSzc2Nbm9vNR6PdXd3p+12q1qtpkajoe12q+vra/3lL3/Rn//8Z3311VfpM8dQqVRUr9d1enqqx48f6/LyUp1OR5K0XC6TXjWbTXW7XT169EjPnj3Ts2fPdHFxoU6no1qtlsidNeF34/FYX3/9tT7//HP94x//0NXVlXa7nbrdrj799FP97ne/029+8xs9fvxYp6enajQa2u12+vTTT9Xr9f49kvuBKEa66/Vao9FItVrtYFEXi0VSFBYERVosFhqPx1qv16pUKgeLwmel14sFyTqB7na7pBDz+Vy73U53d3daLBZaLpfpeg8BokHAGo1GUnwIY7vdJhK+u7vTfD5Xs9lUs9l8Q9EqlUpSnLu7O81mM02nU93f3yfCWy6XicxPTk602WzUaDS02WxUq9XU6/VUq9XS9zudTrLikhIJTCYTDYdD3d7eJgWAMFEa5gjCZV2Gw6FevHihb7/9Vjc3N7q/v1ej0VC3202Cyn3m87nm87nu7++T54WXsV6vk1HDMKAc0+k0zRv3u7m50Xw+P1hjfvJrM+9c0w2xpPRMs9lMNzc3ab0ge8YwHA41Ho81nU61Wq2SXNXr9YNoq16vq9Vq6fT0NI1ptVqle/D9Vqulu7u7JIfb7TYZX+QBkkPGR6ORhsOhhsOharVaMhjItz8Tc35/f5/kgb9hnNrt9oExms/n6d/L5VLS3ttlXY4ZX3cKmBs+z/wgn+jJbrfTcrl8kHSZk0ajodlspnq9rru7uxR9+POiL+h3tVrVfD5PfIJBRi93u12SR+ShXq8n/mC+J5OJOp1OIne89FIoRrool5MulrNSqajdbqdJbLVakl57pTc3N5pMJgcE6pMNeSBMWHsWfbFYHJAZiuKk7akNwDh6vZ7Oz891fn6us7MznZ2dpQXmWqRN7u7uNJ1Ok2eNh+NhlCvCZDLRZDLR/f19IhTG1ul0tNvt1Ol0klWvVqvJ07q/v9doNFKz2UxCLCl5udfX17q6ukqkC5FvNht1u101Go0k1NyX8V9dXenbb79NXudyuUxCKunAM1ksFrq9vdVoNEpkwNxDWowZwWeOIO7ZbKbJZKLZbJbWsd1upzljjPf397q7u0syUKlU1Gq1khfnHj9jWC6XyRMcjUY6PT19w1ufzWYH5AKx8wx4h2dnZweeFfIFaS4WCzWbzSTTEMlyuVS73T4wwsgPUcXV1ZXG43GSFUjMPW4+PxqNdH9/r3a7rcePH2swGGi73Saj02w2kzFmXVerVSJl5g4D4AYbWVgsFppOp5pOp7q7u0tr4g6IO0LoyNXVldbrdZJph6fGGNt4PE4eNzrDfJ+cnCS5Xi6XGo/HSYfcMPMdrrlYLLTb7dJ1NptNkj+iyUajofv7+0S63+d8vWu8d9JlgZfLpa6vr9VoNA48KkJnhEbaewDD4VD39/eJLNxSe5iHhZWUwkPCTQ9zWSi8JmmfN/JcFIJBiEO64PT0VL1eLxkFSAdihzQ8TM1DefdyR6NRen5CWCw4Qohwu/XH4l9fXyfvHaFaLpcajUZ6+fKlrq+vNRqNktcJAXS73YPQ0sNKPGQ8wPF4nOYGD551wnBCGqPR6CD8hBAhbAwC3i73xEvG2/AcOt4wUdFkMkmeZG6sO51O8mK5H4YReWq1Winlg1x5qmSxWCRix3tstVo6OzvTZrNJXjDAG5zP5+m71WpVp6enaTybzUZ3d3eJbDzFNJ1OdXt7q9vbW81ms7QmkI0beQiDiID7uFftHj/ritwgHzyHGykMInOBMcBgYQg6nU5KTUhKHjF60u12NZvNkn7leuY6TgrJDTPPhOxwn9VqlfTW01roPBHodrtN6+D3JsKczWYaDoeqVquJdInynK/eJ4p6uqPRSK1WK5EuZEiYjseJkiAkkpKCEiq0Wq1E1BCIhxqe//PQPS8OeeEBcB1IttvtJm8KEsFTRgggeRbs5ORE3W435aCkfU4OQcVzx2LzGQ+jpb3HiPCs12tNp9N0vfl8rk6no2q1mjwClNg9T8L02WyWiAfyYY4hQDdAfNfnEo91PB5rOBymiAQvlLwpBoR7syYQIs/KPTyUh2yQC+bNSVd6nTbhPng8yA0kA/ksFou0vp7K4tkXi4Vms1mSS2QNokIOGGteY/C15prMhf/ec6fT6TStVbVa1Ww20+3trSqVSiIGyGQymWg8Hms+nyf59zw38n2smMTfCelJG3l9BN1jXYfDoXa7XXJwSH0w58xPp9NJ+jKZTI7WSjzn7+P0lBcGNE/R8VnmjPlC1pBn1hz98jlgPUgBkl6AV0qhGOkSSiJIWC4nBD7nSuAThpJCFiijE6dXJ8Gxqqt7A15I4PcsJN6K55xykoaI5vN5IuPpdKr5fK6Tk5MDpUDhPGUgKY0FIUFwPJWSh86uvHj86/U6eV2QuYez/J4QkR/Pi5K7HAwG6ZrMCR6X5zJJK+BV+vN4R0me73VCIKwmxESJIGRfQ67r9/B8YF6Jxti6YfeUC3PqnQyMkWs6IWPgKMLU63V1Oh21Wi3V6/UUFZHG4Jk9vcUP8+bGyXOPyDu/IxWCUfHxe3GXyMTTCD5n6BiG0EnJUwuz2SzJvKcLIErWQ9pHmcwDqbJjnRW5N5k7Qrkue7rGU3GMf71eJwcCz5V1dH7huxR3JX1v4e99oBjpugIyuXg07XY7eS+QjJMwhOvWKA9BfRHd6ks68AZcUBCGnPxRKA+nSQvgKdVqtYM2GScUvF48efKXkpJiuEVnHH695XKZUg8+Hid7vzeFFYwb5AcB4dV5qsHb9TBkkG6v10sFMEjLv+/ehoewXMMLUKynkyZrmLcHunfj5JwbV1diD9nxTjFU7sV59OAy4DLCePm+G2VPDVHoZN663W4yGt1u9yAN5d6t1wHcafCUBWtLAYzxe/rDdQF5IU2HnECyXixzXUDePNJBbvEUkT9Py0FaGAIfDwbT5cb1yuWMefVILl8X4ETs0RmODN9lHl2eSENhEDyvnnNSCRTfkcait9vtg9/XarXUwuWLwwIgoO6FukfkXiKWLi9Aeags7cNp/u0VcRQIAaUjgBwiuTpvUeJ+KCueJdeSlJQO0vV5wWtlPOSuuD7W3D0XJxtPp6AUTkB5SO0/kL+kg2IMc4JSMy5y2XgzPL/fE48n795gvVEkXx+UATLPW8EgMvfK3TvEw2OePHcLKbmS5dEGjoDLnCsva8pc0zqGUST9BPGxHqyJF16PkS3rQejslXfSUTyHEyfpM/SFYidzgI7wO08VedGRzh5JKZXgKTzWn2caj8cprcS1+Sw/yBDzhFww/8y9kz/1G9bb6w+tVivNBXqL/Et74uXetKj1+30NBoM3ahql8aNsA0YQSJ6TE6J9ykM9z8vwXaqSFCsQBvcg3KPw0M2FAevsuSXpMPfE3wj3ICevrqP4GBIIju9JrwXaiRVv01MVjMvvL70Z+nqYl4dLnsKAMNzqu2B7iLlerw/aftzyey7a86ooOblOvH/WiXnwEPiYZwlBHrsXc4XBIa+Yp4LwDJfL5UEV3LtHWPN8U4FX/jGYELU/C8RFXpHvsv4ou4fBHol4xZ01Yd3xVhkbabg8QnHSRj5dPvhsHs7nawBRs37H0k+9Xu9Apr14tt1uU2HPWz99fd2TZX6IbIn+fNyMK48GnDOYY/QoN0B8xtedvut+v59aHj3yKo2i6YXVanWQZ/IOhNPTU81mM81ms1QRXiwWB7kqvnNycqJ+v69+v5+8Eq9meuXaLSFwYfR+TA9T3BPAs5vP54mYJCWPqtPpJA8YeCXVrbATnRdC3HPld3iP3Cv36lEcD7k9bYCBwouEBLlPHuZKSqTjZEyHAZ63k2Glsu/dxND4M3gY6CTnhMN6eCGH1AzE5TLjz+q5WqIklJa58/7Y3Jh6uobxHAvH+cFwer7SDQDVcB+ne7mQnBtBj368uOr39Nx1nrbhmfjvsRCadfFiNZuHXDY9RZFHYk6MdOuQ9/WuD56F7zFm1zd/JogV4+lpDHSp0Wgk7x0ZRS499chnfRPI6enpwSYVSQfc4OMtgWKkS4uIFzp8cmi8pw8RLxGlJ2xvt9vq9Xo6OztTv99PVUhp701KhzutCLU9PZEXAXKF9B5O0gp45Xn46mE7z+p5PLxdt+zc3z09FNjDexSLe7iS+k4onsGfycfF9SjKuDHLPdtjBQ8nep9L6c2iGf/26MLXJJ/3PIefF9x4Fu99xqv2zhRvPeTvXqjj+n5/DICPA4OZR0c+L070fp885wx8jp0YIFZPI7gDka9ptVpNBTpyp75xh/QKzg2yzJzmrXn+4yCFh65yHXTJ6xbk9+m1Jsf7kG7lY3EPHX32dSPCoShNyiGPukglSEptfrSxoUtEHRgOeMmjh/eNojvSJpOJJKWH98IJYSOEOJ/PD3K60t4LYQFoHMdq5x6jF6a8tcdzjznheI6UfkVvFTs9PU1tPCgPY3PidKHyMNM9S57fw2AIljYlQiH3XLxg56kKJ0n3Phk3zeYonYd1niNnDK5wbkTwKHNikfYGx5Umz6HmuXPu5aGjKyO5W9aA8JQ18oIqniTEw/eQObxbD329kMN487853LOF7DqdjrrdbvphjG6c/Fk6nU4qxGEs6E5gDJ7+Yi4woqS3+H8nXeTHN8CgA96vnnvxXqjyHYQYA9YXY0/0w0YfdvZ5GyhzxXMgH64jfIYoAv3wlKI/E2vPhpM8moKke72eBoNBSim4kfYOn8lk8vPaHAFWq1Xq+XPL7kUIhJvdNl5JPmaJPG+Vhyue63FizQnWF9wVDiFFEabTaQpXIAnP9eGFOum6Rc9THtK+syDfWsn9K5VKsuCei/Vnyivynr+lb5IWJjwFb9dizDlBbbfbgzYoab+bzj0j9/jxhnKP1o0enqUbUJTH0w7IBiRJUefk5OSARO/u7pKnR+92nveHoLxX1tMgjMUNn/QmIfs68vd6vZ52qw0GA52dnaVtv+SFndDcgHgRzsNl5tB7jH29PdXguWTWk7li/Ri7E29eZPU0A+P24htGgDF6f/F0OtVkMtF0Ok3F1Yc8/2P65/92efHIKc9R57rssg/pnp6epvWHVzx6xcPlqIFSKLYjjc0RLLS3NOXJbxTIq98IH7ug8HLZ7YS3y8TiBebhZW7J3eP1z3mqwHs0fUwUBpz0+K57vvwOImVeuJ/vXpOUiA0hcwH01iMPpT1qgMxoXaJn1OeSefCcsRefJKXvkGtkd5rnHKvV6sEOJcboHm9e/Mmfm7V048JnuE+uRBhIjHWtVktkkn+ecDzfaONeOuvpBRjvfmBd2JTA8xG2djqdVGcgjSPpYLch8HysE/HJyYl6vV6KJLxLwLtRmFOPOnz8eN2QP2P39jCXS77rHq8bH+COCH284/E4pRQYo1+X67h8YtQ9l+/3QHe9fuB5eoraEGfOJRg1z80zbg7xGY/HydNl153z1ftEMU93uVzq5uYmLQSVU2lPdFgklM+VgMl2otntdur1eqpUKim3QyuTW1y8ARSdMBpvabFYqF6vHxyAkxeCyAFxbW+nYpzupfFfNxgQEn/HIyNdwlbe1WqVns9zh3n3ANbZW+ggb0JYCIdn4L+el+UZ3Gt1wucZ/JyCzWaTSBOSx4uGlJ1w3PN3QnNDwXM73LiR+3dPF6Xyjg3gxo9QGw/OIyN+74Uz1hPD48VGiIDP9Xq9NBbP8XN95tY9N+YCQ+DycHJykv4fz5Sox2XBn4NxsrEFY4sXjUHKd0HmY86doDzyQBfzLfDu/XtOXNrn471OwbP7TlE3KFzbt2ejE5zKxtZzisle+/BrMYfssBuNRgdb1m9ubn6+6QXOXvBQj8nabrcp/EVA3Op4z6aHAuQ93Rp6TylWlAIEuTTPb2K5/TAVaV/kypUUgYVs2I/urTdUt3Mv1f8m7fsaCTfdQ+ZZeOa7u7tk3TEqHlJhTPKzBRDivPMBxXCS8aIY9ydnh8COx+OksF74Q8k8b+3PDDEeSxcxpvwMBIeTEnk9CIX54juksTz1A3JDgHy6t+frz9x47ywtY9LrA4AGg4Hm8/lBS5KTPsQt7b05L+J5O5gbGuQOkuIz/He9XqeT5zCyyDfzRDTDBhrmG/0itZOn+zCGnp7wMyTy/L0bF3c8cAYoaJHHns/n6fmZW0/Dec2CcyrgkRcvXqTjWUmPcT+ugyxQLHPSRY+229dHU7rxe98o6une3t4e9FnmlVN6MZlkzwtipSEDad9gz6lief4LeAjearVSp4Tvqec+KBXfcUXMPQM/AMTP+fSQxgtynvPinuz8cs+aCq4X2Nbr12cmcAgNROMtbJ4XRin8DAL3YPmsF/I8L4035UdEsuefdfLreDiaV6fdy3XiYZ3z8J08oadZSBsw58gJhoe0BxskPGfJ/HEPCITxcH3GnNcRjj2nk+9oNNLt7W3qa+VzPqfMtZ9457swnWhyLxR5x3ji2dHdg0PhBTXvsPF8qjsZ6/Vajcbr07a63e6BAcWhcONNtEl0w988PZFHBRgPUl3dbjcZMK6LMXBDjOFHTmgN4wS96+vrlBZwQ4ls4Ym740BPMa2pHFB1e3v78/V0x+NxOq2JxW02m5rP54lcIGT3VLzPEuUhP+M7VriuFy28aIfCkGjn8B33ZJ0YpMOTmxiL7+5yb8q7FxgPh5fc3NykPBK5yPV6rU6nk0JB78N1QCic/DQej5PQkrfL87vSfpcdJO8FJ0I9Di/x8JsKL8o5HA7TxhVJaf7c2HA/jzjytiE3sChb7onh4XIN5sPDfvfkXTa8y4KcqHtqkpL35BGQjwti4ncQP/PKMxOBMG7myQ9HctnFCHvl3LfaemTmVXueHSIhvbPdvt6UgQHsdrsHeVKexUkLncGI8mzkoy8uLiTtN/t4Wgb5d+/f9SCPBN1guUfNvFQqlZQ2Yf14Zp9vl5Xt9vUh5aPRKBGqG8lj841M0vvtfffM/8+ykMZ/sfIe9iJkLmyQb6fTSR6Ab3+U9nvTJ5NJWlDPcaKcedvKsWoqQkl6get4GsFJzXNG7s25VwFRkn96+fJlOqqyUtmfl0vBh9wrRSzfiUUjOsoyGo2SsFUqlZTXxkPJ0wiuBMwLeT9I1wUVw0FIR7EC0nFF9VAfQsnfJuFFu7x9SdIbm1o8XeF5VV83/u1G1kmIzzMuJ10fX15EcoLzVjfGcHJykow4BtTD5el0qn6/r91ufxCOGzRO9nIvD/n2PLvLkhsOTgAjQoN8e73eAYF7oXC12p/DiwPA8ZA8G8cxsvnIOwZ8bbyV79ic+fZcvletvt4Vhr57G6TrpReEMayk6Fg7jvZkDbzXn8Jpvg3b+cX1FQPM3DtfvU8U3QbsLSFOxsBDMkkHVtFDRq9Cc7YBZIUSeAuRW1Gvznruh+qrt3TxXZSZa7gC4Zn5LiBADszPqKUwtV6v1Ww2k+Umn+tHE2Kd/QhFziBer9cp1Jb2YZwXKjxcZTxu0PjxYmVu1HxnGGRGSxJ72Mmresjm800xxzsZEPzVanWwzhC7p6DIVZJG8IIgeVFyhl4Zz/OlHqbmKSQMlrRvjZP2R0OSymk2m8nIUUvgO75ZwOXF59fTN5y9695hXpjl9+iEV/Uxrozp7OxM8/n8oNDonSfk46n8e9Qlvc5N8zvXTzeSfmQi88da+NZtJzHqNPl5KO7Ruqx4asT1k/RKXkDmRQMXFxfpbAXWEk/3IS7KU5ElUIx0EdJj4Zx7o75RguKa5y1rtVqqnqPskg4smxMlgu4JfcI/Fl063AnlOSk8B98q6DlmSNfJi3F6KO0eZ57HQ1nJ5UK6OeFy6Dk73FBEvANvsyO0z3OqebjvoainFvy+vrceZXAicU8KpSAF4eGiRxb+g+JjODxkhRTpbGG+/N7SvvOFNwX4/PrhOfybZ8k3n3g4znO49+891R7+Ul2H/Dn4nrwo8yzpYN5d7tzz9nVcrVZvFCqRSUlpnfyeGHZI99ibMY55f4wvl1/I3kkXECHlBT48ZS+4eUoIXaSwzPwix3jQdBkwBqIIPNzz83M9efJEjx490tnZWXp+Pu+pj2PpLtdbX6f3hfdOuu5lspvICdKr2x6KMHHHugIkpfyih8TuxULehCeQLv2LnJ6EQHuoA4555q4sThz+92N5Lw/7j+Um80KgCzmFJU6AQqC5n3tHxzoXSMtAPHj0tD3l3i2HoFOw4OWUKIVHDwg3jfIYRM8L+nyifCiih7GsASEuhOikTaTgpEtqhWdBJvA4vRPEc81cg7VjXH7aFtfk/jgDeLSkXjCUyKy/T461YI59/hmPd5LkHSjHOjAgacbq8099APlgrnM5Qef8d56iyo2DRwzIjP+ducw9R9YWMqXdkrkmNeek6/OW6wbRGvp8fn6uy8tLXV5eqtfrJRlFNl0PuAbjqVQqqWuqFIp5us1mU+fn5+r3+4mYpH1FFkXzaizhg7SvbPvh3J4LBE5CvruKSSaPiWfkZym4F45QOSAHJzzp+Cvj/XdOwvzOw3s/5zMvSLhBcmL34oELjBOUe1EQr7eh+a4piAmSp0uCH+bdQ0VSJHlomRcfWWufKwjE87TMm2/w8Nyme1/MBWvNvOGxS3ojD5zn830cXin33D7PTDjP/LEDCyNDwZaUESSIQnte1jfwsC7MFfKYk7W0T1Xk3RXHZMVJEdmn+HlycvLG83le22XX5dpJ2PXBdSHXQ3485Ufxm3FLSt6zpxg9BchYvcBHEZpNKRSkWQtk1M8IhjPIt7fb7cQ/pVCMdFutlp4+farBYJAOsKHYhFVCGJhcBGG73aaTgujVk5RCKG/9cUVnsSWlRSLhTvrBFdAJk+s7cXooLh16td6eIx1/7Y5X3F0B8gjAn8W9HxTHFTRPj7jH5J4RaRjI2D+fGxju68pM2gDiYA5OT08l7T0viIsQ0LcNY0T5G8+Rtzm5d5d7u762/qzuOXvPLddgPfl/xsA9mUPvvsALdMWndY9Uj4e7tEsxh05EbhB83l2G2CRDXt6/43lqZJe8vm/28QKjk+VmszmQNzx5IgfkIu+g8BQPc/qQ4XPC5vduLN14Mud4rk6Ifg1PjUmH7y9El4kqqAUgo6QAfcuyky5yJyn9twSKku6TJ0/U6XRSXtJP+5Fe5+P8dd6QECRF8SY/vNir4unBLPfoRSbfGgmZkOvylhsExVMDLmwIXE4E0j7n5kchuufnu9AoEnnrE2RCGMX2UNrEmC8vOOGBefHPUy4Qgj+PF8YYGyHrYDDQYDA42NACqXHgT7vdPkh1MDesQ04W0t5Q5eGuj8W39roy+1zj2TJPeZ4SQ8V9IKk8nPfWv7zlyVMPPI+nuZBD99A5dpRzGNi2zPWRO1d65geZ4Hfel04KDXlgzlutVvLy/MyH3LP3vnLXM0+hucxidPK5Zx1dB/zvefoJefZCHNu+8Xj5ruu15/79/BE+y7OQLvRtv6yhEy6RSZ4PZs7ylyq8TxTL6TYaDZ2dnaUQDc+JRHelUkkbCBAIwiwvsBGSU0xiclnozWZzYL3cw/UDQAg5qOb6e5IgT5TCX8rn3qMLAcJ9rAWNseFVsdiQpnurCKnnnfr9fmoR63Q6KVfpYabv3pEO38zA/6NEkLx7mIRyCO1i8frV4jc3NwcFMsbo3p97Zb7mngbhfv55jAp/81w3/+9wT/pYcQRwHe7RaOxPmMqNk3fLMOd5yOzE5EUvN86eX3z06JEuLi7SsYKQKPK1Wq0SCeJceAogz7N7WxPk7C1s9NhyvrQbEJ8fDBH64J0Xx1If6/X6oNDoBtAJ17th8g1MyLUXZ53o8tSGe+B+7oIbWGmfHiBKhHC9MwTC9VfJ73a7xCMYSe9c+VkU0hweZuBR4bVJOsglkgtjH7qHol4oIj/pebw8N4RF9J1MEAtetxcH8MDYx07OiE4K96KdMPLQHQJsNl+/N0vSwd54kv7S4elhXv2FdFHKTqdzcNAH85ArC6Ex8yDteyY9T8rcuqGhd5h8Geccew4QciZ94G1YXujwrckeUoM8fM2b7fOOj4fgz+NRhRsCCNs/z1rz/ITsyBaG3FNieRUeY0jXAh6uywrj8nu7N448eY4Z4sF4e6EZwvCzpbmnEyhrgn40Gq/PikAuec8d/893XR7dufBCm3uM/X7/jbNLuAbP4q+q7/f7b0Ra0v4lrx6FuiOB0cmjJJ5xs9kcdP24U0WKzVN4rg+lUPTNEcvlMr1hIbfEbPHjFCCq15JSYvyYAuXN2CyAe7vu6Ur7ool7h17VRBl4I+75+XkqAhLKHPNWc88IAWH7I4ri4RBeiRsfD9Hr9XoKxzxv7ASN94aCsj8eweJabvTc83PPxT0j94b5txelvI3OvWC8GPdEIGbPE+ekz1zkqYK8zSwvLnmqxPPRzBHf9+b9vBPDCze+CYdxeM7Re3xd+T1V4evofcWeL+YaXgdgTiEfL1AyLhyJfr+v8/PzA5Ln3r4eDids+nq9AyP3lFkf95LRJ7++G0hHvn5ebMU4eyRAl4ynOly3iZbye/OZzWaTCJczFvLeYpcLeOlY4fx9odjRjrQjSfvcmH8GgaRI4WcZECoikO5JooQezuQkStiGB+MeqVdQpT0BYMHPzs50fn6uwWCQeiCdSDEOKKyTRaWyP2y60WgcHE3Is+VEgGch7QnFQzo8hpx8vSd1sVgk8vOiWt7ZANET7kLGfjRmXlTJSe1Yu5xvnsjzzvwXJTkmB14lh7T8+fLuiDxP7bl3N865Ekt7786LO2548pYjV3TmIS+eYgQhEEjMc8Ge3nAjAwHQreP5VdbaC2pu/D1CIHXgdQqPPPD2fFOL9wPnhdm8vuAFKWTKnz33lhmLO1qsnzsebjR83ZEvZCc3yKQpV6vVG33tzLcXRjESpCFcHt+311v8zREImfTwK3KwVCiBn4fqk+0es5NPXsBBKfOCiwsGwuAFHD+RDI8NS++H5nhri3ucLCThOs3reOEIAy9URLgYs7TveMgryF7gYB49n4zi4E177pa/eU+wpwx8h54XNkCeK/Qx4w15Hhylyot6Lvzu/QBXVryo3NP1ljivrLvieFXec5HMrc8jG1TciyfczY1zDveoITNSAk5i/I5+VUg2Pz/Xd8PlBV6X09ww+5x4WoHPkiaTXhsVvNvZbHZQ9KKuwrPijPD2lHwdXFdwDPJCt5Npns7zaMU/n9c68hx73g3FzjvyuHzPC4yMGUfPDfH7RtF3pBFaoOweqko6WHBeAklYClnnSncM7pm51+QK7r17KJUvjHtQTgT533LLzBkJ/JAjxKsh18lY+C5CLu3z0niIeMXuUaJ40v7Fi16QQ/FIDfhbLzwt4SEv8Dn2e3mngBs7L9p58THvKfWKNQZV2rcWoWDeUuUtUMxh3lPpZMe4nEz9u16cI3+Novt8ttvtJG++Y8pzgV4o5H55kfGh4ym9DkD+Eh3x7gm+48XBvD3RUwHcNy+s4uEy906mRDlevOJzPA/r5WvsUYX/Lc/Le37ad8dhVDwtlEcp3weelfQi3EEx/tjB6tzHuYCtz6VQPKd7rHk7D8+8+gjhQEB5OOvfBzlJuiL4Dh52efkBGigsBOGemlvoPKfKgg+HQ11dXenq6iq9aYGUgntP/ryeFiBnxzW9jxSy8zwixMK/fS5QAn+LAorLHKPsHvJ5CJt3EyDAXijknpBDnhZx4qa45GEcnh5GwD1s6fCllN7RQshOdOHRAnOUf8+VOidNH6dHFJ7j9Pyik8WxoqobJv+cv6oHssO5YIuzy68X7dyQ5eQh6YBwmUeul+se8wDpc+whY0FWd7vdwQsG3NPMU3l0ZUDIHhVxcJPvsOTApLfptP8+j445RMp3cfp72nKu8bHzvZ8l6QL3wvKEtntdhOieZ5P2ObY81POijFvN3MtFsFl8FodWJgS82+2q3++nlh9p75E2m/tzUfGuyFkPh8O0fXY6nUrah15YXoTMjQzjYhzL5TIRBp6DRwh5646H0IRjOfFwLWn/Ghnm2sPYh8I+jIErmxMua+JkdcwQ+DxXq9U0rxyW454i34UEfYPIbrd/IwLeFHPk3iCePkTHZ/MUiZOuRw55uO4pCo988pwy8+ikizH3tWAOcsPg8uFr4ukQz5V73js/YwL5Ya6YW4w9nUPILIbAO4VY/7xo6106vV5Py+UyEaunViS9oXueAnFSdf113QasiR9mg0NF1Jg7eV4D4fse+ZRC0QNv8nCE3wPPy7CweDVM2rGtpiyQ5w3zNhAndq7tjfKMhTa1i4uL1G9JlftYUYaWH1IL3ojNK+ebzebBmQcIqSt9XjA6lkbJvQFpvwEBA0Xu9lgKx1MSnkphzvGK+H9XCA+dGZsXHzwCcLJ2L9FTBuSZSaVI+8Ns8nU79uyQiBtV/6+vJ+mOk5OTRHCexmD+vYPB/53nIrk2RHksT0iqiPn0rgbmx0k99+A8KnPPLU/n+Px7xT8/o8MNgJMg30M+vV893yHnTosT7m63O+hYqVRe98HTrpV7ph6ZHOuyyA2f67l7qn4ADpG0d3t4TtxlwuGGpRSKkS79gb7zwz0GhMDJMRd0SUlAfAeZ5wchnrzFisWSDt9/xsK6gtK1cHl5qbOzM1Wr1QOy9yIcY/MCivfK+n3c63PPxzcpHDMmLnx53pAx5fNBmOd5W/dmARVcig6A4wCp7D5UvOQaTs6sgb8q3fPxjN2fx+cgL1ody1c7kUNEzBFy4NfMw37Pm/o6+HhdGT06Yxz5fBDtjMdjSUr5a0mpi4Vt064DnqJyb5Vr+TogD6473pGSp0ow+scOssnljN97rpQfWj0Zp8uTR1PI4HQ61atXr1JUyFo/5BSho14c9B5m1tQ7QZbL5UF+P+cM13fvrSe9ww89w6VQbEdas9nUkydP1G63U2jRarUOtsp6CJATG7/33TmVyr4tisWp1/evX/adVlhvwjs6E/wFlp7HcyHwQpYT6UMW3AtzOaHkFVrafnh+Ug+E0v5ySe4h7Y/bwxgwRr7Hz0OtX+714qVPJpOkTISB7EbLSdXzwF5Y9I0V9Bd7Z4ErEITmyuZtfRg0lIU5y3c7kapgXnydfYMC68UzAAwtxT/IjfY8301HUc3zvtx3sVhoOBxKer3Rh9ZAHA5/4WTutUG8rKnXHfxgHcjT1wMy9RZBPlOpVNKa+FtCkDM30HmunIgOY+Aedt45wTXda/f8PmPNt7/nbXoYidPTU+12uzTvdHx4fcMjYeSFHzfq6I8f7UqHDbUOUoi5J/w+UIzeO52OPvroIzUajbQLDMLlDRCu3FhaJhmPwnNV1er+9d9YWoQAYeI7CAGhEDvN2HYI6d3f3+vm5iZ5KYvFIm1sQIB9swUFPpSO0/nxdvAc3Jsib4dBQDja7XbKaUKeHoITarpnBOm6x+gHB0mHbwumMAgBd7tdTSYT1Wqv3zxLbyM/+XGSGDWUgyKn78jiQGk/Zo8ogPXzoh3XRkl9jLknhmw48GLxtNyrcg+X8fv5BZCzb/OmjcqNPETMXPs4vRhDsQhlplWQtBW93RCBd5nkhOKHonvrU6PRSMYRMiEFQE41d0wwhLxOiNx23k7J+CUlp4CzHXhutvvmxTvSay9fvtRXX32lm5ubgwOtfPcaRAfBc2+KdrVaTf1+PzkXngJhjrgva+u79zDMfhQAhgfip/1ttVqljVMlUIx0T05O9Mknn6hSqaQ2LXJWk8nk4D1i/N5zbxCIF68QJj9LE/LgbNHVapVecghxQtbdbjeFbggp35nP57q5udHTp0/1wQcf6PHjxxoMBunNr4PBQP1+P+Vr1+u1RqORvvvuO3399dcHVWBe0e3VXUgFb4FjJxEWr4SjzFhvz6s5IRAaezEJpWfXknv/eNyeYuCFfxQC3QgwdlIHKD2FR84d4AfvzkNCFIIqc74jysNFJ1sP4T1NgoH1/LRXrJ1wIVvvu869PGSA3CT3qtVqaQNBHsZvt9vkiXKfbrery8vLRIiPHj3SkydPdHFxkSr2fJfnWy5fn0uMF+qemxf+Go3GQTRFAcuJ3NsAeUZ3FPxzyCnv87u9vdV2u0352LOzMz169OigVczBZoRXr17p22+/1YsXL9LrgLz33I0zr33ydCGGizWi22az2WgymaQCNf3PGEDWGiPFOrEWnE1xfn6uXq+X5oC12e12Py/SxV1vtVr64IMPtN1uD14qRzNztVpNTcqTySRV+fEaut1uWiQ8nV6vp8ePH+uzzz7Txx9/rLOzM0nSdDrVN998o+fPnycPulLZ78jJq/6efIfc/SDv0WiUrCE5IF4LAqEsl0u9evVKX375pb755hvNZjPV6/X0Rohnz56lEM17TT0s95QESi29zmNPJpMD5aBY5+fc4olBCpyqf3l5eXAYCnDiwDi9ePFCs9lMV1dXGg6HSbD9RCeKRxAi3hAerv8Xz8K9VFIXt7e3urq6OugAYf49ZIacvHOFefLcrZOXFyMxQo1GQ/1+X48ePdL5+Xlq5fMQF8VF2fMNBnhuEKD3hvrrbwaDQSL1R48e6cMPP9Tjx49T1OSFG9bBUxT+zHhwrDMGs9vtJtJklyRy5bnvYyku5IoC2WQy0YsXL/T8+XPd3t5qvV7r9PRUm81Gg8FAH330UXJyWE90+f7+Xt98843+/ve/6/nz5xqNRgdb8yFcIiMiHObad2RyRu6HH36oDz/8ML0tezQa6csvv0z1FSIwnKntdpuOb6TA12w2dXZ2plarpcvLSz179iz9P3ID+VNr+lmlF5rNpi4vL7Ver9MLJxFqku2vXr06SCcQPlBcIV0AKXW7XT19+lSffvqpfvWrX6UFoj8W68uCYhF9s4L/SPucIIJBymA+n6tSqaTw6OzsLHlDhMd47Vh4PCC2InJP96xQ0rwy7jk/BNi/kxcF89Ywxol19wPBAR4gXtlwOEzRgrfvEYqSUsBTQ3B5RQ1nVHCsYX60oRPJbDZLUQlzxH3wUPxV35A1YDyEil60azabqaDpectOp5O8tsvLyzc8//V6/UZbGaSL0fYcJ4UzQn9vc8PA4hhcXFyk9kOvB/g69Pt9zefzg/Dbc7B8Fv1grjx8RrbzYqe3/fG8RCmkRzydhMfPYTE8Py+tREbG47EqlUp6FT1r5E6DOxq+cQKHhx2ZlUolGfdnz57p448/Ti89wOmYTqe6vb1NzgbP6Tv5PH1FtHd+fp6iVSJIUmXIRylUvJ3iCN7ZG9vIe/r/+7+9hSdvVEYoc3hlPy9s5f3A+bXyKjw/+X3577HeU7+fF/64Fp/xwoPnJvP5edv85XPkY+ZeeQ7Uhf9t12e+SOv4Ovj1c8Lwv3vl/KF14355B0L+PP5fn6NjLUDf97ljc/NDx5bLSH5/H7f/nvvkxdm3wdcY2T02N/4sufw/hGN/91ZIT+O5/OadQPkc8T3XtWO6lMuI66F/7ofodM4RPibH982R//uHrs8/gQcvVox0A4FA4D8ID5Ju8R1pb8PbPD7HD7VMuff0r9zrh97voWu+61zR+77P981NibzXfxeUmKf/DjL17+rSQzr6Lu73U5PX8HQDgUDg3eNBpi+39y0QCAQCQbqBQCBQEkG6gUAgUBBBuoFAIFAQQbqBQCBQEEG6gUAgUBBBuoFAIFAQQbqBQCBQEEG6gUAgUBBBuoFAIFAQQbqBQCBQEEG6gUAgUBBBuoFAIFAQQbqBQCBQEEG6gUAgUBBBuoFAIFAQQbqBQCBQEEG6gUAgUBBBuoFAIFAQQbqBQCBQEEG6gUAgUBBBuoFAIFAQQbqBQCBQEEG6gUAgUBBBuoFAIFAQQbqBQCBQEEG6gUAgUBBBuoFAIFAQQbqBQCBQEEG6gUAgUBBBuoFAIFAQQbqBQCBQEEG6gUAgUBBBuoFAIFAQQbqBQCBQEEG6gUAgUBBBuoFAIFAQQbqBQCBQEEG6gUAgUBBBuoFAIFAQQbqBQCBQEEG6gUAgUBBBuoFAIFAQQbqBQCBQEEG6gUAgUBBBuoFAIFAQQbqBQCBQEEG6gUAgUBBBuoFAIFAQQbqBQCBQEEG6gUAgUBBBuoFAIFAQQbqBQCBQEEG6gUAgUBBBuoFAIFAQQbqBQCBQEEG6gUAgUBBBuoFAIFAQQbqBQCBQEEG6gUAgUBBBuoFAIFAQQbqBQCBQEEG6gUAgUBBBuoFAIFAQQbqBQCBQEPW3/L1SZBSBQCDwH4LwdAOBQKAggnQDgUCgIIJ0A4FAoCCCdAOBQKAggnQDgUCgIIJ0A4FAoCD+P0aBDmBq2tc6AAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 34; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 35; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 36; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 37; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 38; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAC/CAYAAABdcw+KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA1zUlEQVR4nO2dW49kx3WlV97vt6rqIpuSKdqwDAiQYf+SeZyn+WMDzA+aeTTsBxuyANEmm2pWdVblPSuv89D4otaJziIpmX0oS3sBhb5U5jlxIvZe+xpxKufzWYFAIBAoB9WfegCBQCDwl4Qg3UAgECgRQbqBQCBQIoJ0A4FAoEQE6QYCgUCJCNINBAKBElH/nt9HP1kgEAj84ai89IvwdAOBQKBEBOkGAoFAiQjSDQQCgRIRpBsIBAIlIkg3EAgESkSQbiAQCJSIIN1AIBAoEUG6gUAgUCKCdAOBQKBEBOkGAoFAiQjSDQQCgRIRpBsIBAIlIkg3EAgESkSQbiAQCJSIIN1AIBAoEUG6gUAgUCKCdAOBQKBEBOkGAoFAiQjSDQQCgRIRpBsIBAIlIkg3EAgESkSQbiAQCJSIIN1AIBAoEUG6gUAgUCKCdAOBQKBEBOkGAoFAiQjSDQQCgRIRpBsIBAIlIkg3EAgESkSQbiAQCJSIIN1AIBAoEUG6gUAgUCKCdAOBQKBEBOkGAoFAiQjSDQQCgRIRpBsIBAIlIkg3EAgESkSQbiAQCJSIIN1AIBAoEUG6gUAgUCKCdAOBQKBEBOkGAoFAiQjSDQQCgRIRpBsIBAIlIkg3EAgESkSQbiAQCJSIIN1A4EfG0+Go3eH0Uw8j8CeKIN1A4EfG//zf/1f/6//8v596GIE/UdR/6gEEAn9u+B//8Jnq1cpPPYzAnygq5/P5u37/nb8MBAKBwEW8aHUjvRAIBAIlIkg3EAgESkSQbiAQCJSIIN1AIBAoEUG6gUAgUCKCdAOBQKBEBOkGAoFAiQjSDQQCgRIRpBsIBAIlIkg3EAgESkSQbiAQCJSIIN1AIBAoEUG6gUAgUCKCdAOBQKBE/Mmcp5sfMVmp/PHnkX7PcZV/FP4r4/kxcD6ff/IxlIUfc/3+kubsp3zWj6Fz0o/LA38qshDn6QYCgcCPjxcZvlRP93g8pr+fz2edTicdj8f0gwGoVquqVquq1WqqVquqVCqqVCovWtPz+Zyux49/Nrdwlz7zEiqVShpLvV4vXMu9C8bp471070vj9r9feha/V6VSSWOp1WovXt+v48/xfePhT+aH7/t85J/9vmv5d1lbX1OXBe7rc8N3f+jY/fO+fi/d9yV5eel++e/zOchl4buuxfd9DLkMXfr88XjU4XBIepPLYj7PuUz+0Lm8JAu5V30+n9NY/lC9qlaLGc6X5OX75uQlWXL5r9Vq6SfXhVqt9r1j/rFQGukul0v97ne/kyQdDget12t9++23+rd/+zf98z//s373u99puVyqUqno6upKv/jFL/TLX/5SP/vZzzQYDFSr1XQ4HHQ4HHQ6ndIknk4nbTYbPTw86O3bt/rmm2/07t07LZdL7fd7VatV1et1NZtNSdJms9Hd3Z3evXun1Wqlw+HwopBUq1W122391V/9lX7961/rV7/6lSaTiarVahKySqWibrer0Wikq6srXV1daTQaaTAYqNPpqNlsFsgaodjtdtpsNlqv13p6etLT05O2263m87nu7+/19u1b/f73v9fj46NWq5X2+70ajYbG47H+9m//Vv/4j/+oX/7ylxqPx2o0Gkl4UYDVaqW3b9/q7u5Ox+NRk8lENzc3GgwGajabhc+fTicdDgft93s9PT1psVhoOp3q7du3mk6n2mw2aS5arZaq1Wr67Gaz0X6/Lygb19tsNnp6etLhcFC9XtdkMtGrV6/0ySefaDKZqNFoaL/f6/HxUV9//bW+/PJLvXnzRg8PD1qv19rtdjqfz6rVamq322o2m6rVagWSqVQqOh6P2u122m63aU2azaa63a4mk4k+++wz/eIXv9DPfvazNF+73U6Pj496+/atvv32Wz08POh4PKper6vVaqnT6aher6d5ggAajYY6nY5arZYajYZOp1Nau9PppE6no+vra93e3ur6+lr9fj99lushC8jBYrHQ3d2dHh8fVavVdHt7q9vbW/V6vYLsnE4n7fd7PTw86De/+Y3+6Z/+Sf/+7/+ux8fHJB+9Xk/j8ViffvqpPvnkE93c3Gg4HKa1a7Va6na7STZ9PMgOsrlYLDSbzTSdTjWdTjWbzbRer9Oa1Ot1nU4nTadT/eu//qv+5V/+Rf/5n/+Z5uISKpWK6vW6er2eXr16pevra3U6HUnSbrdL+t1oNNTv93V9fa3Xr18nmel0OqpWq8nYoN/1el3H41GLxUJff/21fvOb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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 39; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 40; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 41; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 42; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAC/CAYAAABdcw+KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA9QElEQVR4nO29yW+kV3btu6JvGH2wZ3ZSqYRUGbBRQMEzAx544oHf8I3eP3aB+1944oEn9uheoMqAm5IESalkZjLJIIPBYPQtI94g8Tu548tgZqokfSrYewGEUmTE15xz9jp7r73POYn1ei2Hw+FwxIPkL/0ADofD8T8JTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDEi/YG/ez2Zw+Fw/HAk7vuDe7oOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDHCSdfhcDhihJOuw+FwxAgnXYfD4YgRTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDHCSdfhcDhihJOuw+FwxAgnXYfD4YgRTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDHCSdfhcDhihJOuw+FwxAgnXYfD4YgRTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDHCSdfhcDhihJOuw+FwxAgnXYfD4YgRTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDHCSdfhcDhihJOuw+FwxAgnXYfD4YgRTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDHCSdfhcDhihJOuw/ETY7a803y5+qUfw/FnCiddh+Mnxv/7v/6P/r///X9/6cdw/Jki/Us/gMPx3w3/z18dK51M/NKP4fgzRWK9Xr/v7+/9o8PhcDi24t5Z1+UFh8PhiBFOug6HwxEjnHQdDocjRjjpOhwOR4xw0nU4HI4Y4aTrcDgcMcJJ1+FwOGKEk67D4XDECCddh8PhiBFOug6HwxEjnHQdDocjRjjpOhwOR4xw0nU4HI4Y4aTrcDgcMeIX30/3A1tLvoNE4v59Sn/otX4o3nfvnxPR9/qlniMO/Bx9+D+pvf5cxuhPjZ/S7n/p8eD76TocDsdPj3uZPXZPd71eh5/lcqn5fK7lchl+J72diRKJhJLJpBKJxDu/4yeRSGi9Xuvu7k7L5VJ3d3dard5/PtWfMjOmUillMhmlUqlwz9VqtXGtVCoVfv6U2ZRrrVYr3d3dhR97n0QioUwmo1wup2Tyw+oQ7Wrb8GOfhXcE9vu2H/lb9B72GjyD7TuwWq20XC61WCw2+m/btbe9g32W6BhKJpOh79Lp9Dv35cc+333v8aF3Bduu8bHt/bHfW61Wms1mWiwWG8/F+/LD+/6p49GOQ2Dbic/Qdz+118n7pNPpd2zP9h3PG7XLaJ+l02lls1ml0+n3jqmfE7GR7t3dnSaTiRaLhcbjsa6urvRv//Zv+qd/+if9/ve/V7fb1XK51Gq1UjqdVqFQUK1W097eniqVinK5nBKJhPL5vPb29vTo0SMdHx9rZ2dHk8lEz5490x/+8Ad98803ur6+1nQ61Wq12iBrS84fImaLfD6vL774Qn/3d3+np0+fKpfLaTweq9PpqNvtaj6fq1Ao6OTkRF988YV+9atfqV6vh2e+D5ANk8VisdBkMtHNzY1OT0/15Zdf6ptvvtHFxYX6/b5Wq5X29vb0t3/7t/qHf/gHPXnyROn09i5cr9caj8e6vb3VarVStVrVzs6OUqnUvc/DgJ3P5xoOh7q+vlan09F0OlUmk1GhUFAmk9FqtdJkMtFwONRkMtFqtVI2m1WhUFA+n1c2m9VqtdJwONTt7a3a7bbG47EqlYqOjo704MEDNZtNZbNZLRYLtVot/f73v9e//uu/6uuvv1a329VsNgv9l8vlVCqVVCqVlM/nlUgktFqtlEwmtV6vNZ1ONRwONRgMNJ/PtV6vlUwmlcvlVK/X9Zvf/EZ/8zd/o9/97nc6ODhQJpPRfD5Xp9PR2dlZaN9isai9vT3VajWVSiUlk0nN53NNp1NNJhPN53Mlk0kVCgWVSiUVCgUlk8nQb4vFQvl8Xs1mU7u7uyqVSspms4Gg7sPd3Z1Go5F6vZ6SyaRqtZqKxeK931kul3r+/Ln+8R//Uf/yL/+idrutZDKpSqWik5MT/frXv9YXX3yhJ0+eqNlsqlAoBNJKp9PvTD7bxuV8Ple329WzZ8/05Zdf6vz8XJPJRNlsVo1GQ41GQ8ViUbPZTF9//bX++Z//WV999ZWm0+m9140imUy+Q6aMw2QyqXw+r93dXT19+lS//e1v9atf/UqFQkGj0UivX7/Wq1ev1G63NZ1OtV6vNZvN1O/31W63dXt7q8lkouVyGe5Tr9f1u9/9Tn//93+v3/72t9rf31exWAxj+3228VMiNtJdrVaaTqfBoPv9vobDoZbLpSQFMuSz0huivLu703Q61Ww203q9VjqdDtcZDAaqVCpaLpe6uroKjYynaL0AZsGP8YSjyOfz2tnZUb1eV61WUzabVS6XC9cbDAbvEFGlUtFqtbq3IyHc2Wym+Xwe3p93SyQSKpfLOjg4UDqd1mAwkCRVq1UVi8XwuW1e9Xq91mKxUL/f1+XlZWiDdDodPGS+Y9tntVppsVhoOBzq8vJSp6enarVams/n4f0h7tlspuFwqF6vp+FwuEGSqVQqGMF0OtVoNNJqtVKlUtFkMtF4PFaj0VAqldJkMtGrV6/0xz/+Ua1WS+PxWIvFYsP7xKu7u7tTr9cLnhfenKQQLUXfZTwe6/z8XP/1X/8lSXr48KEKhYLu7u50c3OjVquldrutfr+vVCql169fK5/PhwkT7w0SL5VKqlarSiQSYbJkchmNRspmszo8PAyeYalUUiaT2Whz2/a82+3tra6urjY880wms7Vv5/O5ZrOZisWijo+PA0GXy2U1m02VSiUlEgnN53NNJpPQ96lUStlsNvz/fcTLuB6PxxoMBmFizeVyKpfLqtfrqtfrKhQKms1mYZLg2X4IeN9oNMvkvlwuNRqNdHV1FSYMxvXl5WXgEOtUcR3rDfO75XIZ+Id2u7u7Uy6X++9HusvlUoPBIAywTqejfr+v9XqtXC6nfD4fBgFeEwMECQIvptfrqdfr6fr6WpVKRel0WqPRSHd3d8rn8yoWi5LedJ41YBtqfGwYlE6nVavV9Pjx4+Bd46HhyVxeXmowGGg8Hqvb7arf7wdPF+KwQFqZTCYajUaBUDBAPKparaZMJqPj4+PwHul0WuVyWaPRSMPh8B3PhWv3+32dnZ3p+fPnWq/XmkwmSiQSqtfrwfuyzwPpj8djtdvt4OG0Wi0tFgvVajUdHR0Fz2m5XOr29laXl5c6Pz9Xu91Wr9cLkyPky08mk9HOzo5arZaeP3+ufD4fCOv6+lpXV1fqdrtaLBYb78R/IQHah3swAWazWRWLxWCoTKyLxUKdTkf/+Z//qcvLy+CBplKpDQ95NBqFEJkf7pHL5VStVrW3t6fj4+MwntLptCaTiTqdji4uLnR7e6tMJqPr62vd3d2FNi4WixseHbAe5cuXL/X69etAAul0WtVqNYTBfB7SGI1GqlQqevr0afDmkJ2YGOfzucbjcXiWVCqlXC6n1WoVopZtYxPy7Pf76na7mkwmSqfTqlQq2t/f1+Hhoer1eogYxuOxHj9+rO+++y44Ph+D6MSPbJHJZIId5/N5rVYrXV9fh2v3+33d3NxoOBwGBwXJQFLwXGlfSRuOEt/n/2mzTCbzUc/9YxEb6c7nc7Xbbc1mM93c3AQjm0wm72hZeKoYsKRAusxag8FAw+FQlUpFhUIheA0QuCVpa0Q/BGhAjUZDJycn2t/fD6R1d3enTCYTiKrf74cZeHd3V3t7eyoWi++EltEQvtfrbYRkNlRNJpPBs4J4IN+rq6tw/3K5HCYoiOzs7EzffvutXrx4IUkhBJvP5+Hzdmbn2v1+X9fX1zo/P9f5+bkuLy/DBAGhF4tFLRYL3dzc6MWLFzo9PQ0hug3vIQH6hH8nk8nQBrPZLBApkQlEx2eJCMbjcTA8PkeUQDiaTqd1d3cXrn13d6d+v6/JZKLr6+twXSYeJjq8cv5NO/Ms5XJZR0dHwaOfzWbKZDJBKmu1Wur1ekqn01qtVqrVaqrX60EOIR9g2xtiOz8/17Nnz3RxcRHGOtdhgsCGBoOBWq2Wrq6utFqt1Gw2w7WxG+vlIn+AfD6v9Xq9oflGxycTXLvd1uXlpfr9vvL5vEqlkvb29rS/v69KpRKIfX9/XycnJ2o0Gmq32x9ta1aDZZKGeLPZbBgzRDj0Y7/f12AwCGOaz0O6jIlt8iLy3eXlpVKplBaLhXK5nBqNhgqFwkcyw49DbKQ7nU51fn6u5XKpbrer6+tr3d7eajqdbiTSMKbFYrHxt6hcYMVyCBDDY0BbEv9TSlpSqZTy+bxqtZoajUbQ8bLZbHjWcrkcvIfRaKTr62u1220Nh0PVajWl0+kNb5d3wUPAw8IrglwYVGiIGMl8PtdoNNJgMNBgMFC/39fBwYEqlUrQIDudjk5PT/X69Wvd3NxIepsMXC6Xajab2tnZUTabDe0GoS4Wi+Cp2GTJbDbTYDAIUcV0OlW73dbr1691cXGhTqej8XgcvgvRQKZMJpYcIDYrJ9GHSDqJRELD4TDIBTyjhY0CSqWS1uu1RqNRaE+kLdqTCQHSwcu3xGvHGnqupGDc8/lc+Xw+tIv18GnPKPkjlSwWi9CPnU4ntCF9lU6nAzmifSNjEVn0ej0lEong1eIhIwUsl8swZqIJWjzBbDa74ezYBLfV9EejUZhAy+WyyuVy6JtUKqVSqaRGo6FarRYcno/1doFN2kKiaPiM68ViodFoFMh3NpuFccP78m87thjD9DFRMqSbSqX05MmTH/S8PwY/O+kyEKfTqc7OzpRKpYKXiucqvSVGq71iXDSY1df4vG1YOmu5XL7jyf0pQMfL5XLhGaW3mVDCZowJQ0KvXiwWYWDb9mDwkwwi9OSdJpOJut2ubm9vtV6vVSgUAvGiG0N6t7e3ur29VbPZVC6XC+EqyUTeA3mn0+kE/blYLKpQKGzoWRDX3t5ekH8Gg0Ewan43HA7V6XR0c3Oj8XgcJCBrOLwnBmGrErZVNaTT6UAIhHv8fVtWmt/byZr+sFUSkLXNdm+Lrmz1iyUBoiaSp1Zeol3wysrlso6Pj7W3t6ednZ3gfdEOeKDj8VjD4VDdbleDwSB460wQ19fXymazGo/Hymazms1m6nQ6Oj8/D32L94lGPZlMgndbrVaDBg0Z2eSjfc+oFm6jMJwCbGybnGUjApLMPwZoz0QkjB3bf/a/dtLAYYMros4WEfRwOAxcQdvZa/yciM3TnUwmarVaIeOJbpnJZJTNZkPG2xJoVHeU3iU8CAvNClLms+CH6Lh8HiIgE9/r9dRsNsPf6FgGCSEr4fhsNtvQqnkPjJnEFsDgFouFer2eLi4uNJ1Og16Zy+XCtUmijcdjTadT9fv9YHzolHg1tDEEhFFYoyOUT6fTKhaL2t3dDeFbu90OkgceI8kjmwylXfi31XRtH/JfPGkM2Yb+RAi2pJC+h5xsaRYT83w+D9+H9PA28cCizwHs81pN1iZhxuOxbm5uwsSFpJHP51UoFLS3t6eTkxPt7u4GLReSm81mQccfj8chaWjDaQgDr3Y0GimZTAZ55OrqKiQTs9lsiD6IkPDAJanZbAYd145B+mMb6drnpA0YP7wL7bharYK0NhwOg+19TCnjNnuLwpa/8dxMzNHkm+1LW07KvykVI7LDa6ZPf0jVxY9FbKQ7m810eXmpZrMp6U0DFotF1Wq10MGEv9YQJYVMMI3MAN3Z2QneGoRrvWK+h5Fuw8cQ8XQ61dXVlV69eqVisbhR7rRerwNJMRgqlYokhZDIkpGtvcUgeC+SSNwTnRiJgfdk0OO1rNdvysNIOlDihIdJCR4EAZlZL3G9XodEAiSys7OjnZ0d9Xq9EJ1AFqPR6B3DtH3F7+4rUaKP7YRl+5yJBTKxpT+QrNUBCYnR9TEwvHikDlspYr0ansfqkYwZvo+xDofDUFVTLBZVLBZVqVSUzWa1s7MTwmLa2sorEC7tT1ujJc9ms5BcHY1GYdKeTqcaDAbq9XpBQlgsFkG6wMulSgQ7s2RDP1uJhzHC+yJ9SFKlUgmVGNVqNeROkGyQsl69eqWrq6sg39Ce99nWNoK1NoJjYvuI9ufvkD7tCKKESxvv7OyoVquFSotkMhna++bmJkgVcSA2eYEOoo4zk8kEApPeZBz7/X7oUJsAs94JOmulUlG9Xle5XN5IniBLEBJZ0Nl0ng137wPGTNYd4yW5RSiXSqW0u7sbdLZsNhtqPBno0tsECs9nBwlEzP/jufHstuTHanh4RlyfSAKpAOJBK+W70R8MnHDcJrAGg0Eoi0L3ZMBzbTvxRUNRKwnRj0w6jAnemfAbrx8DwyO0/cWERfJnPp9vZL/RLq13hP5qjdpWztioievzfUs6tuRPepOkwjO32jMTIYTL79GvyQeQmSd6IMSmfApCtF4444kIhN/ZNrbaLtGkTTTbsYmenc1mQzIYiatcLgevm7ris7Mzff/992q1WhtRz32w0Yq1wajNYSM4Y8gMxWIxjAE7cdCfTPZWZsrlcqpUKtrd3VWz2VSxWAz5kfl8ruvr69CH/63khdlspm63q0qlEl4abwAtjAFHrStGZGdkGr7ZbOrg4EClUkmSQi2opI3wx+pAwJKdXWkTBVlqQj06HE+BGsxqtapyubyh00LOaNe2ntQmV6S3hm49K7x5QkV0TspcMLLpdBrKgvB8IAUK9ZmYuIakjYQR3h3JKLwyPFqSdni6NtkWNWhbB2090W3Ac8V7JWSHnGwi1Wq+1tu1yT9IKeqxkmziXtFEnH1Wm2jjGaNZfrxXHAOIq1AohDZCc7WleNQzW/2T61HCdnNzExak2JyCTfzZzD6TiB3jTGLWg7WeIfY4m802sv4QOBNXs9lUvV7faAO+iyNyenqqly9fhrJJnuV9sIQbtUt+bN0+nipjl5JQEp9wBP2OHMcillKppEqlonK5HCQfauIp8/yh9cU/BrHW6Xa7XdVqtTDIdnZ2Qhi7u7uryWSiXq+nq6urEK5gTHyH7+3u7uro6EjFYjEQMhUL0UTNNkH9QwOD77PKhQRPuVwOZWp4IjYRhUeC1zCbzTY8WYiBd8rlcmHFEN9HV61UKmHmZeCg6w4Gg+DRU0plPVDpDdkUCgUlEgkVi0VVq1WVSqUwMWCEdlUcBnEf2fDD723pkTWYqG7KBGOjFjyRbd+PLivFK+adMpnMRshu+3vb9y2p2jGyTXu2koMlYp7NJmmiSbnoPez78O42Wcj79/t9SQqrCKm+YIyhGUMmxWIxTKaUr+EBQi5MhowTNHmIH/mFaMTmG5LJZFitZb1qxhcrv1qt1sYCk+gEsA3RhOo2u7PPgadKNVC5XNZqtQpyC99BH08m35Ra7u/va39/P0gjREQkM8l9UB8eF2IlXRY12MLzTCajUqkUZq/hcKhcLqfpdKrb21tJm8aO8VWr1aDP4JVZzSdqGBb2/983OCjzoTbw5uZG19fXajQawWPH47DeGh6Y9SSZufFOqcWkxIkZGI+UQWYHEbohXjKGiXeCBw2pMkE1Gg3t7++HhQ2r1SoYE4smbLZYUogCrBQSjRrwPIlY6Gf7ObvoA6nFVm3gtZFJ5jt4OYyTfD6vcrmsWq2marUaSJfaWDxF+3mIrVQqhYQa70S0ggds64JtvSjPybtZyYP7ELo+ePBAJycnOjg4UK1WC3WfSDaMSfoX0mW829DXTvo2qSspeHLVajWMB9pytXqz5BvHwEZYk8lkI/mJnkz/MfFYMrYlhUweo9EoLHBqt9u6ubkJK9eYvO/D+2zP2qutrqCN0Mqz2az6/X54xui1WMjx8OFDPXjwIETDTGjj8Vi9Xi+0Ra/X+8Elbj8GsZIuOpANGdERy+VyMKy7uzt1Op1QwLwN1pOyGhUzsZ0t7/v+h7QbOp9SMLzwSqUSSnXsfgM2m26/b0uFRqNR0O/y+XzQ6zB8EmWEqFRPkLCB3PkuhrFYLEJIjAfdaDR0fHysR48eBSKg5tOGquv1OmigPAMelU3AWQ9yuVwqk8kEzx+t2JIukw3VDjZBxfuS4GAy4L0ymUxIDOH512o1NZvNsFKPsq18Ph+MCV2vUCiEidlqkZKC18cYjCbArPcO2ZGsxDviuYi6PvnkE3322Wd6+PBhIE/ajO9D5sViMYwfnIi7uzt1u92wGAHtGMeECZmf6GIT3iWZTKper2t3d1e1Wm2jbM1GboytnZ0dLZfLjRWgfJ6xjDNhiZsFIZQtjkajMKm9z5GJ2u82MH6sPW/bUMd65gCZp9Fo6OjoSEdHR8rn8xtyHCvtKIljNWtciHXvBUjHJkby+bzq9XoIu1KpVJipqdVEgyG8IbRBC8YrZqUKme/7iNcSow01t8GSOvrP1dVV8LqazeZGmRsJJAYwJEopmaQNb4DlsRg8xsw9qXG2yQ77fQyQtsQ7L5VKOj4+1ieffKLDw8MgTRBKcn36Bi/Xeg/8e7VahZVTNmO8Xq+VzWZVqVSC12WfD8/w9vY2EIj0VsvFS2ThCR4/iS+0au7RbDbVaDTC8lhWx+GtsSKOSYM9AqinpboB47NVMSR2KfDH8+O/8/lcvV5vY5Uj46tYLIZVWQcHByqXy2ECtN47YwTCtMm9crmsw8NDPXnyROPxWJlMJkxUPEdUf8VbRYNmDB0cHOjw8DCUrfH3xWIRokdLMkQrvLctEbM1vrRdr9fT5eXlxqpSbPp9ZPoxdmcJdzKZaDAYhCqlbDYbftdut4PERtvy7EhzyGmJRCJIcMgJ1EdTHvchufGnRCzVC5JCdpn18+iH2Ww2rHJB/Gdg4vVYvYlVX6wmQSOmrMkuFbUJnffpblani8J6rRTIcy9qjS1ZWe2ZkJlVL7Y8h5C+VCqpXC6HfRykt4k1ngmhnxmfGlk8O2Z3rguR7+/vBy/SSi+8pw1Zbc2zTX5BxrQ9CTW+LylIGHY1IBl1QngM0k5QhMlokHjSkJFNnFarVTUaDe3t7YUEJll2Se+sVCNMRmbgnVhsYI2e56LPyDVQyoZ0wfWpRKDd0JRt0ouxsF6vAxlYfTraF/RhvV7X/v6+5vM3O9fZlXG8J2Gy9HZDnaiHh5ZpvdflchnGGbXaJLStVo43bZOWqdSbTY6YgNBTbfmbtbVtdmTHltW7rS4uvU38IRsOBoOwQi+RSOj29jYsEsFLZUwhjeCIkK/Au2VBD9457WnlrJ8bsXq6GC5GiNETykpvsvTRTTroJGY1VmpB5LlcbiORZJMWdjDY2RAyR4C337GwJV3S28oIvDzCfsJSSSGkJGnGc1B+NRqNgveAx4eBSwqang2r2OADLY2t65AKrLEz8KIlWLw/mrOtf4zuN0t/sWyy1Wrp/Pxc3W5Xw+Ew3BNSYZLEA+TZqRm2fcP7Aat/s7SZCZQJEo+XjLSNfvCwaV8mUeuxsU+FvS+fo2aTBS0kXXgv+hXiJIGHt3h+fq6Liwt98sknYQ1/dGKD6G2FDeMSw8dZoLrBRki2JheJYzgcBrmlUqlslEVFNV1pM3JB/6ZGmH5kHGIjfN9GFrYdogtjtnmvH2N3gO/bd6ZmmT5GS+71emEihCcgdrghnX6zKRHJ+U6nE5wm+vBDHvpPjVhJV9JGhYENM5mZSqVS8CqipEtn2LBQksrl8lZ9x8ImRvCAMNbxeLyR+IkStf2x1yCLbEt0eC+r51Jyxk5St7e3gSTtmn0bfuEFV6vVUCM7GAyCgff7/dBGeIs8H2SHDIPeShbXhqTRMNp6/0gDr1690unpafAsIAauYcuTkBRYDt3v9zdK/+hDiJZ1/RgH3gg7ljEJQBJMKHi6tDm6MfsO253I0IohN7s6TdIGYbOngfXGbYLJkgZ5ik6noxcvXujRo0fB47flcHzXyi60r9VJLy4uQhUANmC9PsrRSIRaOQX9lpAabZ6xSL+yGOD8/Dzs+Gc3jsHztaRL1t/WPtsStm12Ym2I98dJwVum7aM13FFA8EzK19fXYaMo3s1Ke4lEIiT8mKQuLy/VbreDrMA4sHmGuBAb6fJyDPRkMhm8IAyUekrrveGp2DCf6zAQrd5liYSwww4A/mu9OluDeN9z2wwy97EkbAcf32EfhNPTU33zzTf6/vvvdXl5qel0qp2dHa3Xax0cHOjk5CSEicAOVkI7dv+6uLgIIS1eB1UAPHO0+gOSazQaYcMSm4yzZW2E+XgIZ2dnur6+DiRIAqZaraparYbQD83M6us2/LSJSxsm09/Uf/IdVuhZD9X2AZIAE7JN8iElkJSym8bYBQq0tZWPbOJotVqpXC6H8J13pv0Zx+12W69evdLx8XGY3GxCzuYGmBSRa9h17/z8XK1Wa4MI6T+bzGWyZWVcoVDQwcFBGC9IRnyX/h+NRmGf5OfPn4cVb61WS91uV59//rmePHkS5DLGNe1uf6KrDaP2uQ22Pe6r37YSoK2eQLaiht9GstEo1iakqTxiDQB6PiQetfM4EDvpMqPYMJQf9D7r5THASXxYjRix3e76ZbXAaO2hHcQYul19ZQv7o89M5zLQ8FQwYAjeeopssfjv//7v+vLLL/Xq1auwiIMJhpMU2JgEEuGZ7tuNCk+BsihKzSBApA1LvJJChQgkbb0Z21ar1Sps8MLeC1QFpNNpNZvNsN1lLpcLCU4rfUCc0qZMQ3jLfSh54m9oyBierQ7hGa1nhBbL3hOs5uI6JKSWy2UwWrwcSySSwgQBAWOgJCL39vbCWOS0Eyoj2u222u122HOX57f5AxwCpDa2hnz9+rUuLy91e3u7sS8JEzsRBlKNpPBfEnnHx8cbkhSTD+WF7XZbL1680IsXL3R2dhb2dcADpB9IXEXthTZhHw7ez46daPLaOknYGP28TYagL6wd46Gz1NkuLIKg8aIpKUS7jspd8Mx9th4HfpHTgKMJDFuPh/FApHa7vWiGFIMlK43h2NDHNqadWRlIeHX3VTpEBxLXZF/Om5ubsGG5NS6qNdizgW0W7RrvbrerVquly8tL1ev1MHh4b0js/Pxcp6enOj8/D7t6UbKFLlytVnVwcKCdnZ0QhuExQrz5fD4ko6ykQLtZL51Md6vVUqfTCQX4FKofHBzo6OgolPghoVxdXYU6UFt2xQo9KxExqZA0smVQnAhCIo2aVr6D1wjp7ezshJ290NQxbsaQXeXItRkr1qOi/dLpdFhRuF6vQ6300dHRRojPPTqdjlqtlh4/fqzd3d3QprZ9GVMQL1soWsIlz0EVBHsxtNvtjQmZqJEKIPRddGh0fSIuTlsgiURClDFZLpd1cnKix48fBztjLBOu39zcqNvtBsK373SfDUW9/GiyzbaRJV0iP2rPo5IATg6J40ajESo32HWPOvQo10STd3EidtK1IT6wXialL+xTi9dhl4TaUic0YjwkS94Yg9WQ0ZbsrlvSx9UNRsM9MqLs4h/d/Ygkid0UG2+c9ycTTIaWvXmHw6Gurq708uVLffvtt0FTtaExkQGE8+DBA5XL5aDb2RpKEkucgFCv1zcGoNXNIeoXL16EzbW5Bp4nuh7eF/u8soTVep/Ww6XPIE+7eCSVerOYgyQQhogXT39xkgFGTJ03v6NtCC1ZWm4916jXSX/c3d0Fb4p+oL339/fDe7MlJs80Go3UarX07NmzUK7FM0Xbl0hkMBjo6upKFxcXQb6h9nl3d1eNRkO5XC6UNl1cXGxch7a4vr7W6elpqIKBrDjnjWQoFTfYH5MMpIruzt8tWVE1w8koVjKyhLYNUZLD+6ff7Vgm0kVLJ6KM1uDbsQHhHh8f6/Hjxzo5OQl5HssZVqaK5lDiRGyka8nWzmxRrQZyIEElKSRcbNkOnWTrTSFWq+/YkDmZTIZlt1RLYOwfanyrKTLQII5tnYmnQagGoVpNFG3VLjzgupxC8fLlS52dnW1sEm7vhVfEqrNKpRK2N0Q3hWzW63UYoHhE1guDEAeDgc7OzvTVV1/pu+++0+XlZfAYKOnCm8rn80ErJMFBcoR3g9gwXpsMtYkQJpxsNhu0Yp4LD4jxQr9zL0uCaNo2YWWXSNsaVRvl2FpwZCDaDZ2U8+kgH3RC7plKpYLHVavVwuRjk6tEMa1WSy9fvtTFxYV6vV6YdOr1evDWaOtutxuqNux4hPCvr691dnYW9tqwY40xw/XL5XJY4EHERJLMLpCxpBQd73as2+d5n/3TFti15QRro1aXJrrlvrbkkNJSzhJ89OiRTk5OtLe3F8rimERZvGHvY/M4cZJvbKTLC+K98v8Mmn6/H7wyDI8SKvZksBlLK4KjE0Xr9bgvRksyxC5EQHuNJsG2gY6xxerRzUi4P+ER98NYGeScdEx5j93z1CYAqFqwiRU7cbGyC++TGZ6SNXRDkgmUftnjhNAObYnY69ev9fLly42zzyQFr4Nk0M7OTiiYh9yRPNAIKX+yHg+wv7Per/RWJuKd7ZaNyAfot1yL8UCyJVo++L57JxKJjS0WGTeZTEa3t7ehTznKptvtBrlCUpjsXr58qfPzcz148CB46JAufYJs1Gq1QiUKCzrYM6BSqYSJzi43xwO0kRcbM5HEnEwmgaSZ0Fhgsru7q/F4HJ6HiZtxet94tkvFbbXLhwjLOiJsvG4rQ3A6bHtHq0SsV2xlRE4NPzw8DJvHs+yXCIcJkg3ZuQbjxm5JGQdiI106n2SHtHlAI0dokLmVFHZh2tvb0+3trW5ubjaW7FljonMwUjtj4hHmcrkwm5N1tlUH74MtS0FHIonFSh7rBfNMNqRiIFHsX6/XQzUBYSv3on14F7tIgcnFyiTM4FY+oY1oL0J5EhJ4fVb/tqRkaykxCrRYns8SDl4jhICXhXHSJ7Y+FmO2K+XQeZEz+LEbvkA8Vgu0yRqbNGFyok14F6vlQuAQtU20cC0WRPR6vWDIvDMyA/e3hGjHg60MsYtbOPTx0aNHG0fU2xVwEAWVG3iv9HfUC4bocDZY/ddoNMLqOmqhrQZux4Gd3O0iCku4tnrhffZjK3IoE+WkCXI2NvLhXaK1tNgTKxr39/d1dHQUDh1lLwsqeChBtIdmYmupVCpUQMWFn/1OdEYul9PBwYGq1epGsbyVBzhmptfrqV6vB6IqlUra3d3V/v5+SDZYrcbqvJBRNEmCpMCA4RpkQt/n4dqkky15gcRtOCZtTiYktOxiBFY9ocHZukfCJ66Pvod2TZi0Xq+D10etMZMVoaKtMc3n8xqPx2GrO+ut2IRXLpdTrVbT8fGxjo6O9Pz5c93e3m6E4YlEIiSmLOljrFang9ysxIBx0zdEC3Z5LO1oDZXr2HFlS4u4N33JtZlkqbKAVAlPbc22TQjxGQjTbhhO1GJLINFjj4+PdXJysrGk2JIOEwBHpvOMDx480JMnT7S/vx9ONkbLpGIA6Y1rMpZYFIG0ECVFG3UxyWez2Q1JixK2bTIW4xEZh0mSscME+z5d19Ym8x784AhYjR8pybaz7XMig4ODg42Vityn1+uFFWhEi0yQNjokirLj6udEbPQO6aLbQbhWJuj1emq327q6ugqbhDOAOPyuXq+H4nEGRtTI1+t1KIdiQFer1UBEzPAcZf2+PUBtNtUWu0flBTvb28QD291Jb0ub7NJfq0Pa508kEioUCmo2m5rNZoGAWRFmr4lGSBSAZ2OXVRcKBfX7fWWz2ZDkiYaJkgIZPHz4UJ9//rmeP38eNnmOJt2YtJAy7LNbY2dyoG34PpOB9XqoVIjKLdH72WfYFn5yLTxJKhjsvgsYG/eH1GxEY5NWEEtUW7Ta+vHxsT7//POQ1IxKJIwbHAl0Zk5pYJ+MVCoVchzIbyQNcR7Yeater2tvby8QL1q4zWcg6ZFnqFaroc7X7rFrj6NnYox6u3YyZ8KzE/d9VUBo5XafW0q9WKlqk520jSVznseWiDUajVCCyfeofb66ugp8gc2wOpDdChl7cSFWTXfbXgo0Jh1C+RS78KNrrVarYEjR0w/sLGi9KbQhTplgE2QGsK352+bt2vCXTWns7IyXahdaWI0QL4LEEImzRqOxUdaCUdMmkEImkwkeP4bFsdj2+HqMBS2P98e49/f3Q/lTIpEIa/LtrM6/IcpKpaKTkxMdHR3p5cuX4V42WcnqM7RQS3o2aYKuiefIvTBYwlbbtra6hPA+upKMayAdQe6E4fQ35CC93SjGkqZdLmzHBeMBsmdSoUwNIrIGfHR0pJOTk7D9pH1f6zkyJrgmTgXeGmPBHjkOaeBxknDb3d0Np6hA9Hh7vCMTVy6XU7PZDCvZkOxsxY+NJG24b/sKW4BA6X/s2RIvjhHjBI82nU4H/ZXKo8ViEeSGaDRhr0ebM1ZWq1UogyN3wTFCUccKW+edrZwRB2JdBswgsOGb7Ry77JQQlhpYtDBCTWbyqN4D8H5szWOxWAyetfWQtkkLNhTk+/V6XbVaLWixEDnPE9VzE4k32/iRyc7n3x7nXq1Wgx6MPMBEwoCTFAYV5zuxrh8NFUJgsFHlQXUB3g1EyyRAe+I98c6WWK18QnmY9X7I2Nv2tgkTPDJLItGJEq+c71nvlh97eoU1IOu52aPBrT7HBGCrM/ix2qhNtOJpEY7asFh6a/QkgCAkG37btrSyC21OsrhWq4WohmoSe0/6legGrZwNjR4+fKjDw8Owao53x9bsUum7uzsVi0UdHR0Fz5rNXxgzSDFRDRUnhsmh0WiEGma8ZbuPQjQ/wO/oe+Q2GykSsdnP2JyEdbR4nlQqFap9GBvdblevX7/W2dlZeDfr4FkZyU6ocSE20l0s3mw4zb9tp9hEWHQXMbZ2y2QyG2vErfdgr2WTbBAfISQalu1QG34Bm4CAeCBbtGU8VauvWeNiYFBwnsvlAlmTVYY8Wfdv9Ss8Dbw46a2UwDHgNoTEQ0AysRuSs8AAjwACskRvy5psaMekZCUDS4zRCc9qfzY5aJNUkA7Eh86KJ4dB8hmIB9K1CTL6h4MyOZ/OvguEwH3sezHO0BnRPpmcITpLFDZ5Z9uGvqf6gWvQxhA5+ydEywiJBiAx9nq1E4318pAW2HeBtuN92fAFSYO66Wq1GiKV4XAYFjzMZrOwh4eN/uwkw1FZh4eHISKz2rOVoaIJRentDmKMBUlhXNpNge5zivi3Tf7agzqpDLm6ugp7hTBerDTG2CCJb2XOnxuxku5gMAheK8ZvYWt2MdbFYhH0WGDDOmA1H2kz8w+B2sFvNchts5xNHuABsDSZsptqtbqhPTLQ7BJSwnlCQTxevESK1q1Wy/NAXjYMt5umE0Zyf3QzkhKSNkJnSwwMaor/SY7gHW2rabXtHTUqK+fw3NFtF7eV/Ng6Xqvf2SoEdFjCUj4TrTxBR7fXxWvDQ7dJN77PfayuHT31wToK0Qk6Og4hILt03UokSEe2CsBWhkAGJOx4VluKaMeDPb7I7paGPSAzsbew3XR+Op2G/+92u5IUKiuQKqz0RNS0u7sbkm7j8XhjRaHtawtrb7bSw0aV1pbus+3o5M/4YMMiNk2yqwmjtm2jCfbljQuxnxzBslEQNWQ7Y1nDwailt+Vn2xY1RA3DJjuiBmFnwCiimWbuSTLB6o5W5mCnrFarpYuLCw2Hw6DT2e/Z0i+WFLMAYrV6eyoBJw1j3LYuFw8YrzY6qZDosxtU8xlW+UFqeLsQoKSgi0KgdgDbdrPtEj1JA4+d6gue2y4e4dmo+IA07MQI8fB962HitVGTvC3cp90LhUKQYJj4E4nEOyu1iGAymUzQs3kePmfHFtdGjpHeaoc2/Ka/ojvToY/bQ0a5H9e3/W3rdrEvdpaLnqKBdwrR2g1tIN5MJhPyKkQg9CGyh9VB7YkitiQvmpiN2iY2CFHaPVfeF8FG7ZJ78u44dXZnOzt+on1G/9htI+NCbJuYS5unHtynodjQglnbbv0o6V7CteBveLnMksxuGLYtjbHftQPJhj1WQ7ayCIZ7e3ur169f69mzZ3r16pWWy2VY0hk1WGnz7Cp2w18u356fhiZnZ3fIpFgsBiOyJWdWB7MkbQvOMRC77SJesy0d29vbU6PR2NhInc9aQrBSjM2eR3U5iJmd/ck6s4AD4rTr7CE/3iNavRDdR5nwG4+Sk0jYKJ3dukg88j4sw8WbjNYO24UWNoIik86+FjYCispNfDbaHxAEHmo04cf7o/9C7kgSyHfX19e6vr7eOAcNvbder2+UVvKD1NTpdNTpdJROp0OiLZlMhmOeGO9RGY2ow9YLQ6BRaQCCjJ7eEbXTD9m21f+tE2Ht+n0lbDay+FDJ6E+N2PdeuC+ct39jEFo9DvKxoep9DWXDIVt8z4Cxu5ptu4atuWw2mxvbF7IlH6SAB7der8PAPTs706tXr9RqtSS9LcBmMPAsvCcDhs2p2UKRgW9PHsYA8ZS4PyEpz1YqlTZqSNH2GLC0kTUcm6mmdIxSpKurq3cIGkKwui/kQFjO50hqkkw8Pj4OCaC7uzebtK9WK/V6vXcy6NLbI2XI0rM4AmnGGhpkAkGXy2UdHR2p0WgolUqFJdbn5+eh3+gX6W1VBUZJ/9pxZ7VF21Z7e3uhHC+akLJylV3MADnTLzgc9th25A/uRwLKfp5tItmjg4ofvFlbA2srMQixu92u2u12GBtUlCDH4FjgDNnl5fl8XtVq9R35IGrr3BPb4f2xOUum9xGvTUrSP9v4gnEXtXFbYREn2YLYFkfYQmoQHZTS5u5fGBEdLWmjdGhbg3I/QnFmX/YiYCaF9LY1eir1Zo062y6SpKBz7X4GZP9tPaVdikmG2/5EQ2bbNniqkjaWpJLoib4ng2+9Xuv6+npjqSZanh340QjAJpx4Hrtah5IgewqBrUKAXBnseKZ2orPeIcmYWq0WDk/EcKgjjoaY0tuz4EqlUvC8kDtYVcV37LvSBs1mU3t7e8HzZwPvXq+34bWiteLtSW9XpNn+sxOXbSdkCdqJ7y6Xy4361uhiGht6c9ru9fV1SAhR3M97WjuyWXi7haH0dil19H52wsQWbJTEZk79fj9s3IMjYB0PapupruGYdFtja2HflffgGe0SY2vH0e/DDZA/UQr3s3rxtjER5aAoL/3ciHUZMCthokQXlRuYDRnkDCI8TTwu+x07O0K4aLL8F0/MLhqIhkB8plar6eHDh2FTZ0iWEN4uj7XeHB2PwbMhR3Q3fwyXRQ+1Wi1sUUkCimXGtgrAehK25tGe82Q1LxYbQCT2PXl/ElDck9CczVys9skzWL3SZrulN1pwpVIJHhCEISkkgfAmMThkByYLPE3Gjl2MYhdbWK+PihDuYzP2dkMcPgsBM47sBMMkwPi0P/zOhsKE6XZjfapNSGqWy+UwVrclJanJvbm5CZ74+fl5OCF4tVqFSMJWCdBGjJfpdBr6mlVbnIpsV6vZSJAFO+xvggdtJ5ttXiwTDvkKIi+ON48msmgr7mtlHDsh2VV8UUJkciKBZ+1xmzcfdfwYG3a/EvoyDsS+Io3NZmx2lvDJlpdE9UBbBsO+ATaRY0PjXC63NbkkacPAbQgJonquPdiQgYABQ95WX8QzxSg5YtyuiIMUSVQ1Gg3N5282rq5UKuHQQEK2Wq0WloUy4dj9Ydm+EgK0+me5XA4LM2xCgXYjkUO7QkaLxUI3Nzd6/fp1WEzCd2kjm3yw8kK1WtX+/n4o0WPjEbz1er0ejm2xXhd9UywWg8TC2OF0aHuUjPR2YkL/tQsIomfX2fugwTLpoKGzSoo2vb29fWdiZhxFtXk2CspmsxoMBqG2eblcBkK3kz3XZexAuuzL22q1wom7bFBDv9oklJV0cG5snTcbwjSbzVBSZ5cRs2KzVqup2+0G4kKGI1Kx0pOt6lmv1xt1xjaZFm07G01gV9bL5pm4h92a1U768/k8THBWKolKCla7tnbB/bHJ/5Yr0nZ2dvTZZ59t1FSiYdribwiQTiCzCuxmLdYDo6Ojy0rn87k6nU6QFiaTSTA6ln5G6wlns5kuLy/15ZdfajKZhM3B0XnR7uz2g0wIHG9zcXGh9XrzOB1mdt7HThYUytudkOwS2tVqFTwHVt6wHaYtd8Hg+SzX2aaX4R2xJHQwGIQKCjYwb7Vaod5R0oZnaENdvMZSqaS9vT09fvxY9Xo9EI/tW6tJY0D8DQlBUsi+k3jjAEZWuNnIAUOmZhMShQiYvGnnYrGow8PD0HY8PxNOt9sNkg2/tyVNVluVpNFopLOzs3B0D+WBdgl69Iw6+sGWgUkKei79aPfVYBxQj02lAbLL3t7eOzu12aOVaBMb9eBArNfrsFE5BMfm+MhGqdSbzXn29vZC1p/SsXa7rVarpdPTU11dXW31cu3Emky+OXGj0+no7u4u1MsS/SFTkHCz3ADpYhtwA4tYbNIaO6Jczu55srOzo/F4HCTEOBCbplsul/UXf/EXymazIcNIedXFxUU4pyl6fDogkYC8wOxrGxSjtEtrJ5NJOK7ZrtYhvLWaK17HfD4Pz9Jut8NGJJ988kk4pgajIhSnKPurr77Sf/zHf4Qs8Hg8VrPZ1NOnT7cmtGz2u9lshknASh+U0GF8NvNu5QwbGSQSiXBNVrJFKz4wACor5vN52BD72bNnOj8/f6dwHIOlHpMEEJ4cm0l/+umnOjw8fGcPWCvDUFdplxDTlySAWHZaqVQ2NgeyWX8I2a7Is2ODeyaTyVBrHY06rMc6HA51cXGh2WwWTpBlsrbRhE2G2a0zX716pZOTE3366af69a9/rXq9HhJ5tq7b9gPLehuNRqhJtwtlGO/r9Xpj208iAojEVnYQ/lsPj0ncetnJ5JvVYK1WS8+fP9fFxYWWy2VYpMTmR1aTlhQ8YfZffv78eTh4NXq8FuPd2t10OtXl5WV4V0iaSTaRSIRValauwCFjcQ/jEG6wC1PIBdAHh4eHqtfrIVotFAqaz+dB+nlf1cRPhdg83WKxqE8//TR4Eng/t7e3QW5gNysan1B9Op0GI7TLMyUF7+rzzz/X06dPtbe3p7u7O11cXOj7779Xq9UKZ2QRGqG1oQFtE/sxPrzK5XKpw8PDEDpjHKlUKhDl6emp/vCHP+jbb78NZ4r1ej0Vi0U9ffpUn3322cbCDggLErOGBfD2mRgoC+p0OuEYaTw7ElfSm7CblXN4DduAxwjhc1bXN998o4uLi41tNu1mNJCu9UaZ+HZ3d8MAZ1nutgUkg8FAiURCvV4vEIv0tqyM5dcQLkQZLRmzGxjZAzFpR66dTqdDqE2FgZ2IIHE87U6nE7xDNG/aGuKw9cFIG/l8XsPhUOVyWX/1V3+l4+PjsM/GtoQNUUe5XNbh4WE4gQLJyCaHiI7S6bQqlUqo9oCool5sNBK0k4xNiLZaLf3xj3/U119/veHl393d6bPPPtMXX3yxocdDiEgf3333nb777jv1er2tyWn6isQri3IYC0SttMEnn3yio6MjpVIptdttff311/rmm2/U6XRCBIdHTzRpE4lEkOv1OkgsT5480aeffhqcJfpxuVxuLL76uRGbp5vP53VwcBBCPUnBS5nN3hxFcnV1tZGskrbv8E4ohDd3cHCgv/zLv9Rf//Vfq9lsajwe68svv9TV1dVG+Io3iPfDLLhtFYyd8UgqrVarUF9KKQ1GICmcmcYsi1fCBjXUM1rPCl0Vbc7CLqDgOW0m3VYa8C6EbmyGzcYr7wPEy4kSPHdUx7XJGtoVbwb9uVqtvrO3xLbEEd7WeDwORGHrY9kQhiQQWiulWNabw+MaDoehfpX9Yq2Hxf6r1OxGPX/ILJFIhPdAj59MJmHiJzpJJBJhiS7tZCOs1WoVvNf7CNfC6uHo3oVCIZR/WTnH5jkSicTG0utt2Xg77mxlABEDu3KR9JMUdP2bm5vwfEygyCUkTNmxDLnlvqoiW9UCSeJkQZ6lUkmffvqpfvOb36hYLIZl7zbJh/3b/sOhsfX8jNl6va6TkxM9evQoHK0lKSRfee44PN3EB+rUfrIiNjwc/h39fTTE33jIDzQExmpLoEieIdJvu5bVcd8HK8Rj9NsyqtG155ZYLWH8UHA9W0bHO92XGcbz/aFZWTxHm9iMXn9bG9psuPWoPgS74GTb6qHoz32gjaI/9tl+SHmQ9QJtJpzrbbtvtK2iEsTHwvbzNpuw48r284fa6H3vamvXo+9hV7BFv2cXjmxrhygs4QP7HfrIvhN9cd/yYov7xizXjDoA/Ds6Af8EuPdisZGuw+Fw/A/CvaT7ixzBvg0fmiE/hPtmqR973Y+5x8fc76ecRT/Wm/g57/Fz3ffPFb9Ue8TR1x+6148Z938Kfi5b/nMZn+7pOhwOx0+Pexk+vrVvDofD4XDSdTgcjjjhpOtwOBwxwknX4XA4YoSTrsPhcMQIJ12Hw+GIEU66DofDESOcdB0OhyNGOOk6HA5HjHDSdTgcjhjhpOtwOBwxwknX4XA4YoSTrsPhcMQIJ12Hw+GIEU66DofDESOcdB0OhyNGOOk6HA5HjHDSdTgcjhjhpOtwOBwxwknX4XA4YoSTrsPhcMQIJ12Hw+GIEU66DofDESOcdB0OhyNGOOk6HA5HjHDSdTgcjhjhpOtwOBwxwknX4XA4YoSTrsPhcMQIJ12Hw+GIEU66DofDESOcdB0OhyNGOOk6HA5HjHDSdTgcjhjhpOtwOBwxwknX4XA4YoSTrsPhcMQIJ12Hw+GIEU66DofDESOcdB0OhyNGOOk6HA5HjHDSdTgcjhjhpOtwOBwxwknX4XA4YoSTrsPhcMQIJ12Hw+GIEU66DofDESOcdB0OhyNGOOk6HA5HjHDSdTgcjhjhpOtwOBwxwknX4XA4YoSTrsPhcMQIJ12Hw+GIEU66DofDESOcdB0OhyNGOOk6HA5HjHDSdTgcjhjhpOtwOBwxwknX4XA4YoSTrsPhcMQIJ12Hw+GIEU66DofDESOcdB0OhyNGOOk6HA5HjEh/4O+JWJ7C4XA4/ofAPV2Hw+GIEU66DofDESOcdB0OhyNGOOk6HA5HjHDSdTgcjhjhpOtwOBwx4v8H/SKPiYUcxD4AAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 43; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 44; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 45; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 46; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 47; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 48; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 49; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 50; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 51; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 52; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 53; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 54; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 55; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 56; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 57; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 58; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 59; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 60; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 61; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 62; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 63; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 64; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "algorithm = nlopt.LD_MMA\n", - "n = Nx * Ny # number of parameters\n", + "n = Nx * Ny # number of parameters\n", "\n", "# Initial guess\n", "x = np.ones((n,)) * 0.5\n", "\n", "# lower and upper bounds\n", - "lb = np.zeros((Nx*Ny,))\n", - "ub = np.ones((Nx*Ny,))\n", + "lb = np.zeros((Nx * Ny,))\n", + "ub = np.ones((Nx * Ny,))\n", "\n", "# insert dummy parameter bounds and variable\n", - "x = np.insert(x,0,-1) # our initial guess for the worst error\n", - "lb = np.insert(lb,0,-np.inf)\n", - "ub = np.insert(ub,0,0)\n", + "x = np.insert(x, 0, -1) # our initial guess for the worst error\n", + "lb = np.insert(lb, 0, -np.inf)\n", + "ub = np.insert(ub, 0, 0)\n", "\n", "cur_beta = 4\n", "beta_scale = 2\n", @@ -1724,50 +312,37 @@ "update_factor = 12\n", "ftol = 1e-5\n", "for iters in range(num_betas):\n", - " solver = nlopt.opt(algorithm, n+1)\n", + " solver = nlopt.opt(algorithm, n + 1)\n", " solver.set_lower_bounds(lb)\n", " solver.set_upper_bounds(ub)\n", " solver.set_min_objective(f)\n", " solver.set_maxeval(update_factor)\n", " solver.set_ftol_rel(ftol)\n", - " solver.add_inequality_mconstraint(lambda r,x,g: c(r,x,g,eta_i,cur_beta), np.array([1e-3]*nf))\n", + " solver.add_inequality_mconstraint(\n", + " lambda r, x, g: c(r, x, g, eta_i, cur_beta), np.array([1e-3] * nf)\n", + " )\n", " x[:] = solver.optimize(x)\n", - " cur_beta = cur_beta*beta_scale" + " cur_beta = cur_beta * beta_scale" ] }, { "cell_type": "code", - "execution_count": 8, - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ - "lb = -np.min(evaluation_history,axis=1)\n", - "ub = -np.max(evaluation_history,axis=1)\n", - "mean = -np.mean(evaluation_history,axis=1)\n", + "lb = -np.min(evaluation_history, axis=1)\n", + "ub = -np.max(evaluation_history, axis=1)\n", + "mean = -np.mean(evaluation_history, axis=1)\n", "\n", "num_iters = lb.size\n", "\n", "plt.figure()\n", - "plt.fill_between(np.arange(num_iters),ub,lb,alpha=0.3)\n", - "plt.plot(mean,'o-')\n", + "plt.fill_between(np.arange(num_iters), ub, lb, alpha=0.3)\n", + "plt.plot(mean, \"o-\")\n", "plt.grid(True)\n", - "plt.xlabel('Iteration')\n", - "plt.ylabel('FOM')\n", + "plt.xlabel(\"Iteration\")\n", + "plt.ylabel(\"FOM\")\n", "plt.show()" ] }, @@ -1780,30 +355,23 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "opt.update_design([mapping(x[1:],eta_i,cur_beta)])\n", + "opt.update_design([mapping(x[1:], eta_i, cur_beta)])\n", "plt.figure()\n", "ax = plt.gca()\n", - "opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n", - "circ = Circle((2,2),minimum_length/2)\n", + "opt.plot2D(\n", + " False,\n", + " ax=ax,\n", + " plot_sources_flag=False,\n", + " plot_monitors_flag=False,\n", + " plot_boundaries_flag=False,\n", + ")\n", + "circ = Circle((2, 2), minimum_length / 2)\n", "ax.add_patch(circ)\n", - "ax.axis('off')\n", + "ax.axis(\"off\")\n", "plt.show()" ] }, @@ -1816,49 +384,27 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Starting forward run...\n" - ] - } - ], + "outputs": [], "source": [ - "f0, dJ_du = opt([mapping(x[1:],eta_i,cur_beta//2)],need_gradient = False)\n", + "f0, dJ_du = opt([mapping(x[1:], eta_i, cur_beta // 2)], need_gradient=False)\n", "frequencies = opt.frequencies" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "\n", - "intensities = np.abs(opt.get_objective_arguments()[0][0,:,2])**2\n", + "intensities = np.abs(opt.get_objective_arguments()[0][0, :, 2]) ** 2\n", "\n", "plt.figure()\n", - "plt.plot(1/frequencies,intensities,'-o')\n", + "plt.plot(1 / frequencies, intensities, \"-o\")\n", "plt.grid(True)\n", - "plt.xlabel('Wavelength (microns)')\n", - "plt.ylabel('|Ez|^2 Intensities')\n", + "plt.xlabel(\"Wavelength (microns)\")\n", + "plt.ylabel(\"|Ez|^2 Intensities\")\n", "plt.show()" ] }, @@ -1871,142 +417,73 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "opt.sim = mp.Simulation(cell_size=mp.Vector3(Sx,40),\n", - " boundary_layers=pml_layers,\n", - " k_point=kpoint,\n", - " geometry=geometry,\n", - " sources=source,\n", - " default_material=Air,\n", - " resolution=resolution)\n", - "src = mp.ContinuousSource(frequency=1/1.5,fwidth=fwidth)\n", - "source = [mp.Source(src, component = mp.Ez,\n", - " size = source_size,\n", - " center=source_center)]\n", + "opt.sim = mp.Simulation(\n", + " cell_size=mp.Vector3(Sx, 40),\n", + " boundary_layers=pml_layers,\n", + " k_point=kpoint,\n", + " geometry=geometry,\n", + " sources=source,\n", + " default_material=Air,\n", + " resolution=resolution,\n", + ")\n", + "src = mp.ContinuousSource(frequency=1 / 1.5, fwidth=fwidth)\n", + "source = [mp.Source(src, component=mp.Ez, size=source_size, center=source_center)]\n", "opt.sim.change_sources(source)\n", "\n", "opt.sim.run(until=200)\n", - "plt.figure(figsize=(10,20))\n", + "plt.figure(figsize=(10, 20))\n", "opt.sim.plot2D(fields=mp.Ez)" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "opt.sim = mp.Simulation(cell_size=mp.Vector3(Sx,40),\n", - " boundary_layers=pml_layers,\n", - " k_point=kpoint,\n", - " geometry=geometry,\n", - " sources=source,\n", - " default_material=Air,\n", - " resolution=resolution)\n", - "src = mp.ContinuousSource(frequency=1/1.55,fwidth=fwidth)\n", - "source = [mp.Source(src, component = mp.Ez,\n", - " size = source_size,\n", - " center=source_center)]\n", + "opt.sim = mp.Simulation(\n", + " cell_size=mp.Vector3(Sx, 40),\n", + " boundary_layers=pml_layers,\n", + " k_point=kpoint,\n", + " geometry=geometry,\n", + " sources=source,\n", + " default_material=Air,\n", + " resolution=resolution,\n", + ")\n", + "src = mp.ContinuousSource(frequency=1 / 1.55, fwidth=fwidth)\n", + "source = [mp.Source(src, component=mp.Ez, size=source_size, center=source_center)]\n", "opt.sim.change_sources(source)\n", "\n", "opt.sim.run(until=200)\n", - "plt.figure(figsize=(10,20))\n", + "plt.figure(figsize=(10, 20))\n", "opt.sim.plot2D(fields=mp.Ez)" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "opt.sim = mp.Simulation(cell_size=mp.Vector3(Sx,40),\n", - " boundary_layers=pml_layers,\n", - " k_point=kpoint,\n", - " geometry=geometry,\n", - " sources=source,\n", - " default_material=Air,\n", - " resolution=resolution)\n", - "src = mp.ContinuousSource(frequency=1/1.6,fwidth=fwidth)\n", - "source = [mp.Source(src, component = mp.Ez,\n", - " size = source_size,\n", - " center=source_center)]\n", + "opt.sim = mp.Simulation(\n", + " cell_size=mp.Vector3(Sx, 40),\n", + " boundary_layers=pml_layers,\n", + " k_point=kpoint,\n", + " geometry=geometry,\n", + " sources=source,\n", + " default_material=Air,\n", + " resolution=resolution,\n", + ")\n", + "src = mp.ContinuousSource(frequency=1 / 1.6, fwidth=fwidth)\n", + "source = [mp.Source(src, component=mp.Ez, size=source_size, center=source_center)]\n", "opt.sim.change_sources(source)\n", "\n", "opt.sim.run(until=200)\n", - "plt.figure(figsize=(10,20))\n", + "plt.figure(figsize=(10, 20))\n", "opt.sim.plot2D(fields=mp.Ez)" ] }, diff --git a/python/examples/adjoint_optimization/.ipynb_checkpoints/Bend Minimax-checkpoint.ipynb b/python/examples/adjoint_optimization/.ipynb_checkpoints/Bend Minimax-checkpoint.ipynb index 15f9cbf0a..a15e36dea 100644 --- a/python/examples/adjoint_optimization/.ipynb_checkpoints/Bend Minimax-checkpoint.ipynb +++ b/python/examples/adjoint_optimization/.ipynb_checkpoints/Bend Minimax-checkpoint.ipynb @@ -17,17 +17,9 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Using MPI version 3.1, 1 processes\n" - ] - } - ], + "outputs": [], "source": [ "import meep as mp\n", "import meep.adjoint as mpa\n", @@ -38,6 +30,7 @@ "from matplotlib import pyplot as plt\n", "from matplotlib.patches import Circle\n", "from scipy import special, signal\n", + "\n", "mp.quiet(quietval=True)\n", "Si = mp.Medium(index=3.4)\n", "SiO2 = mp.Medium(index=1.44)" @@ -52,17 +45,9 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.20124611797498096\n" - ] - } - ], + "outputs": [], "source": [ "waveguide_width = 0.5\n", "design_region_width = 2.5\n", @@ -75,82 +60,117 @@ "resolution = 30\n", "\n", "nf = 10\n", - "frequencies = 1/np.linspace(1.5,1.6,nf)\n", - "\n", - "minimum_length = 0.09 # minimum length scale (microns)\n", - "eta_i = 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n", - "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n", - "eta_d = 1-eta_e # dilation design field thresholding point (between 0 and 1)\n", - "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length,eta_e)\n", + "frequencies = 1 / np.linspace(1.5, 1.6, nf)\n", + "\n", + "minimum_length = 0.09 # minimum length scale (microns)\n", + "eta_i = (\n", + " 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n", + ")\n", + "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n", + "eta_d = 1 - eta_e # dilation design field thresholding point (between 0 and 1)\n", + "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length, eta_e)\n", "print(filter_radius)\n", - "design_region_resolution = int(1*resolution)\n", + "design_region_resolution = int(1 * resolution)\n", "\n", - "Sx = 2*pml_size + 2*waveguide_length + design_region_width\n", - "Sy = 2*pml_size + design_region_height + 0.5\n", - "cell_size = mp.Vector3(Sx,Sy)\n", + "Sx = 2 * pml_size + 2 * waveguide_length + design_region_width\n", + "Sy = 2 * pml_size + design_region_height + 0.5\n", + "cell_size = mp.Vector3(Sx, Sy)\n", "\n", "pml_layers = [mp.PML(pml_size)]\n", "\n", - "fcen = 1/1.55\n", + "fcen = 1 / 1.55\n", "width = 0.2\n", "fwidth = width * fcen\n", - "source_center = [-Sx/2 + pml_size + waveguide_length/3,0,0]\n", - "source_size = mp.Vector3(0,Sy,0)\n", - "kpoint = mp.Vector3(1,0,0)\n", - "src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)\n", - "source = [mp.EigenModeSource(src,\n", - " eig_band = 1,\n", - " direction=mp.NO_DIRECTION,\n", - " eig_kpoint=kpoint,\n", - " size = source_size,\n", - " center=source_center)]\n", + "source_center = [-Sx / 2 + pml_size + waveguide_length / 3, 0, 0]\n", + "source_size = mp.Vector3(0, Sy, 0)\n", + "kpoint = mp.Vector3(1, 0, 0)\n", + "src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)\n", + "source = [\n", + " mp.EigenModeSource(\n", + " src,\n", + " eig_band=1,\n", + " direction=mp.NO_DIRECTION,\n", + " eig_kpoint=kpoint,\n", + " size=source_size,\n", + " center=source_center,\n", + " )\n", + "]\n", "\n", - "Nx = int(design_region_resolution*design_region_width)\n", - "Ny = int(design_region_resolution*design_region_height)\n", + "Nx = int(design_region_resolution * design_region_width)\n", + "Ny = int(design_region_resolution * design_region_height)\n", "\n", - "design_variables = mp.MaterialGrid(mp.Vector3(Nx,Ny),SiO2,Si,grid_type='U_MEAN')\n", - "design_region = mpa.DesignRegion(design_variables,volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(design_region_width, design_region_height, 0)))\n", + "design_variables = mp.MaterialGrid(mp.Vector3(Nx, Ny), SiO2, Si, grid_type=\"U_MEAN\")\n", + "design_region = mpa.DesignRegion(\n", + " design_variables,\n", + " volume=mp.Volume(\n", + " center=mp.Vector3(),\n", + " size=mp.Vector3(design_region_width, design_region_height, 0),\n", + " ),\n", + ")\n", "\n", - "x_g = np.linspace(-design_region_width/2,design_region_width/2,Nx)\n", - "y_g = np.linspace(-design_region_height/2,design_region_height/2,Ny)\n", - "X_g, Y_g = np.meshgrid(x_g,y_g,sparse=True,indexing='ij')\n", + "x_g = np.linspace(-design_region_width / 2, design_region_width / 2, Nx)\n", + "y_g = np.linspace(-design_region_height / 2, design_region_height / 2, Ny)\n", + "X_g, Y_g = np.meshgrid(x_g, y_g, sparse=True, indexing=\"ij\")\n", "\n", - "left_wg_mask = (X_g == -design_region_width/2) & (np.abs(Y_g) <= waveguide_width/2)\n", - "top_wg_mask = (Y_g == design_region_width/2) & (np.abs(X_g) <= waveguide_width/2)\n", + "left_wg_mask = (X_g == -design_region_width / 2) & (np.abs(Y_g) <= waveguide_width / 2)\n", + "top_wg_mask = (Y_g == design_region_width / 2) & (np.abs(X_g) <= waveguide_width / 2)\n", "Si_mask = left_wg_mask | top_wg_mask\n", "\n", - "border_mask = ((X_g == -design_region_width/2) | \n", - " (X_g == design_region_width/2) | \n", - " (Y_g == -design_region_height/2) | \n", - " (Y_g == design_region_height/2))\n", + "border_mask = (\n", + " (X_g == -design_region_width / 2)\n", + " | (X_g == design_region_width / 2)\n", + " | (Y_g == -design_region_height / 2)\n", + " | (Y_g == design_region_height / 2)\n", + ")\n", "SiO2_mask = border_mask.copy()\n", "SiO2_mask[Si_mask] = False\n", "\n", - "def mapping(x,eta,beta):\n", - " x = npa.where(Si_mask.flatten(),1,npa.where(SiO2_mask.flatten(),0,x))\n", + "\n", + "def mapping(x, eta, beta):\n", + " x = npa.where(Si_mask.flatten(), 1, npa.where(SiO2_mask.flatten(), 0, x))\n", " # filter\n", - " filtered_field = mpa.conic_filter(x,filter_radius,design_region_width,design_region_height,design_region_resolution)\n", - " \n", + " filtered_field = mpa.conic_filter(\n", + " x,\n", + " filter_radius,\n", + " design_region_width,\n", + " design_region_height,\n", + " design_region_resolution,\n", + " )\n", + "\n", " # projection\n", - " projected_field = mpa.tanh_projection(filtered_field,beta,eta)\n", - " \n", + " projected_field = mpa.tanh_projection(filtered_field, beta, eta)\n", + "\n", " # interpolate to actual materials\n", " return projected_field.flatten()\n", "\n", + "\n", "geometry = [\n", - " mp.Block(center=mp.Vector3(x=-Sx/4), material=Si, size=mp.Vector3(Sx/2, 0.5, 0)), # horizontal waveguide\n", - " mp.Block(center=mp.Vector3(y=Sy/4), material=Si, size=mp.Vector3(0.5, Sy/2, 0)), # vertical waveguide\n", - " mp.Block(center=design_region.center, size=design_region.size, material=design_variables), # design region\n", - " mp.Block(center=design_region.center, size=design_region.size, material=design_variables,\n", - " e1=mp.Vector3(x=-1).rotate(mp.Vector3(z=1), np.pi/2), e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), np.pi/2))\n", + " mp.Block(\n", + " center=mp.Vector3(x=-Sx / 4), material=Si, size=mp.Vector3(Sx / 2, 0.5, 0)\n", + " ), # horizontal waveguide\n", + " mp.Block(\n", + " center=mp.Vector3(y=Sy / 4), material=Si, size=mp.Vector3(0.5, Sy / 2, 0)\n", + " ), # vertical waveguide\n", + " mp.Block(\n", + " center=design_region.center, size=design_region.size, material=design_variables\n", + " ), # design region\n", + " mp.Block(\n", + " center=design_region.center,\n", + " size=design_region.size,\n", + " material=design_variables,\n", + " e1=mp.Vector3(x=-1).rotate(mp.Vector3(z=1), np.pi / 2),\n", + " e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), np.pi / 2),\n", + " ),\n", "]\n", "\n", - "sim = mp.Simulation(cell_size=cell_size,\n", - " boundary_layers=pml_layers,\n", - " geometry=geometry,\n", - " sources=source,\n", - " default_material=SiO2,\n", - " resolution=resolution)" + "sim = mp.Simulation(\n", + " cell_size=cell_size,\n", + " boundary_layers=pml_layers,\n", + " geometry=geometry,\n", + " sources=source,\n", + " default_material=SiO2,\n", + " resolution=resolution,\n", + ")" ] }, { @@ -162,32 +182,47 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "mode = 1\n", "\n", - "TE0 = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(x=-Sx/2 + pml_size + 2*waveguide_length/3),size=mp.Vector3(y=Sy)),mode)\n", - "TE_top = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(0,Sx/2 - pml_size - 2*waveguide_length/3,0),size=mp.Vector3(x=Sx)),mode)\n", - "ob_list = [TE0,TE_top]\n", - "\n", - "def J(source,top):\n", - " power = npa.abs(top/source)\n", - " return npa.abs(1-power)" + "TE0 = mpa.EigenmodeCoefficient(\n", + " sim,\n", + " mp.Volume(\n", + " center=mp.Vector3(x=-Sx / 2 + pml_size + 2 * waveguide_length / 3),\n", + " size=mp.Vector3(y=Sy),\n", + " ),\n", + " mode,\n", + ")\n", + "TE_top = mpa.EigenmodeCoefficient(\n", + " sim,\n", + " mp.Volume(\n", + " center=mp.Vector3(0, Sx / 2 - pml_size - 2 * waveguide_length / 3, 0),\n", + " size=mp.Vector3(x=Sx),\n", + " ),\n", + " mode,\n", + ")\n", + "ob_list = [TE0, TE_top]\n", + "\n", + "\n", + "def J(source, top):\n", + " power = npa.abs(top / source)\n", + " return npa.abs(1 - power)" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "opt = mpa.OptimizationProblem(\n", - " simulation = sim,\n", - " objective_functions = J,\n", - " objective_arguments = ob_list,\n", - " design_regions = [design_region],\n", + " simulation=sim,\n", + " objective_functions=J,\n", + " objective_arguments=ob_list,\n", + " design_regions=[design_region],\n", " frequencies=frequencies,\n", ")" ] @@ -201,15 +236,17 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "evaluation_history = []\n", "cur_iter = [0]\n", + "\n", + "\n", "def f(x, grad):\n", - " t = x[0] # \"dummy\" parameter\n", - " v = x[1:] # design parameters\n", + " t = x[0] # \"dummy\" parameter\n", + " v = x[1:] # design parameters\n", " if grad.size > 0:\n", " grad[0] = 1\n", " grad[1:] = 0\n", @@ -235,42 +272,52 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "def c(result,x,gradient,eta,beta):\n", - " print(\"Current iteration: {}; current eta: {}, current beta: {}\".format(cur_iter[0],eta,beta))\n", - " \n", - " t = x[0] # dummy parameter\n", - " v = x[1:] # design parameters\n", + "def c(result, x, gradient, eta, beta):\n", + " print(\n", + " \"Current iteration: {}; current eta: {}, current beta: {}\".format(\n", + " cur_iter[0], eta, beta\n", + " )\n", + " )\n", + "\n", + " t = x[0] # dummy parameter\n", + " v = x[1:] # design parameters\n", + "\n", + " f0, dJ_du = opt([mapping(v, eta, beta)])\n", "\n", - " f0, dJ_du = opt([mapping(v,eta,beta)])\n", - " \n", " # Backprop the gradients through our mapping function\n", " my_grad = np.zeros(dJ_du.shape)\n", - " for k in range(opt.nf): \n", - " my_grad[:,k] = tensor_jacobian_product(mapping,0)(v,eta,beta,dJ_du[:,k])\n", + " for k in range(opt.nf):\n", + " my_grad[:, k] = tensor_jacobian_product(mapping, 0)(v, eta, beta, dJ_du[:, k])\n", "\n", " # Assign gradients\n", " if gradient.size > 0:\n", - " gradient[:,0] = -1 # gradient w.r.t. \"t\"\n", - " gradient[:,1:] = my_grad.T # gradient w.r.t. each frequency objective\n", - " \n", + " gradient[:, 0] = -1 # gradient w.r.t. \"t\"\n", + " gradient[:, 1:] = my_grad.T # gradient w.r.t. each frequency objective\n", + "\n", " result[:] = np.real(f0) - t\n", - " \n", + "\n", " # store results\n", " evaluation_history.append(np.real(f0))\n", - " \n", + "\n", " # visualize\n", " plt.figure()\n", " ax = plt.gca()\n", - " opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n", - " circ = Circle((2,2),minimum_length/2)\n", + " opt.plot2D(\n", + " False,\n", + " ax=ax,\n", + " plot_sources_flag=False,\n", + " plot_monitors_flag=False,\n", + " plot_boundaries_flag=False,\n", + " )\n", + " circ = Circle((2, 2), minimum_length / 2)\n", " ax.add_patch(circ)\n", - " ax.axis('off')\n", + " ax.axis(\"off\")\n", " plt.show()\n", - " \n", + "\n", " cur_iter[0] = cur_iter[0] + 1" ] }, @@ -283,1627 +330,44 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 0; current eta: 0.5, current beta: 4\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 1; current eta: 0.5, current beta: 4\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 2; current eta: 0.5, current beta: 4\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAX3UlEQVR4nO2dO4/kRneGX945l73oCkmAgIUBw7IEONhckADDgZU6U244c/JF/gdO/RecLODMiTJFjgT4A+RAliUBkrCAtAstpFntzPSdpINFUdU1dSXZPTNd7wM0ppvNJqt7+NSpOlUkk67rQAiJh/S6C0AI2S+UnpDIoPSERAalJyQyKD0hkZE73mdq/xbRdR2ePHmCzz//HF988QXyPEdRFGiaZtD2kiTBbDbDO++8g08++QQffPAB6rqeuNRkhyS6hS7pyS2g6zokSYIkSdC2Lb799lt89tlnqKoKdV0Pkl5s7+zsDO+//z4+/PBDpCkbhocApT8wuq7D48eP8cMPP0y2zfV6jdlshiTRBg5yy2DVfYDk+R91+RSiVlVF4Q8ISn+AyM1wuQII3Yb4bJ7nlP6AYPP+wBmaxGvbFmKK9tBtkJsJI/0B0rbtdReB3GAo/QHCLDuxwaODkMig9IREBqUnJDIoPSGRQekJiQxKT0hkUHpCIoPSExIZlJ6QyKD0hEQGpT9AOPee2KD0Bwjn3hMbPDoImZD//PInfPJv/4V//Pf/xm+Xq+sujhaeT0/IRDw7X+JP//E/2LQd/vfJC7x28n/413/4m+su1hUY6QmZiMW6wab94wLS54vNNZbGDKUnZCLeffUY//TRXyBJgLfu1vjnv/3L6y6SFjbvCZmQf/n7v8af/u6vUOY3N57e3JIRcku5ycIDlJ6Q6KD0hEQGpSckMig9IZFB6QmJDEpPSGRQekIig9ITEhmUnpDIoPSERAalJyQyKD0hkUHpCYkMSk9IZFB6QiKD0hMSGZSekMig9IREBqUnJDIoPSGRQekJiQxKT0hkUHpCIoPSHyC7uFV113XulcitgNIfIPKtqsfctjpJkq2/MqwEbi+U/sDZRdQH9BUBuR1Q+gNAFjDLMjRN078eI7347Gq1QpIkyLJseCHJjYE3sAxAbdJeRxNXV4amaZDnOVarFZ4+fYq2bZHnOdI0RVEUWK/X6Lqu/6ypIhBdASF4nue4uLjAa6+9hufPn+Ps7Az3799H27boug5pmm5VONcd/W9SWW4ylN4DcZCLh3gtLwf2VwmIfTZNg81mg+Vyia7r8Pvvv+PLL79EkiR4+PAhzs/PsVgssFgssNlssNlsrpRVlSNNU5RliaqqcHp6ijt37uDBgwd48uQJvvnmG7z77rtIkgR5niPPc2RZ1su/b9HEPsVDlCNN0/5BrkLpHciit22Lpmn6v+K5eOxDelX4xWKBi4sLvHjxAk+fPsVPP/2ENE3x1ltvoaoqnJ+fo6oqLJfLvry6cgpxsixDWZY4OjrCvXv38Prrr+ONN97AarXC48ePsVgscHp6iuPjY9R1jaIotsTfF7LoaZoiy7KtByO9GUrvgZB6s9n0sq3X6z56yjLtWnyxD1GG+XyO8/NzPHv2DM+ePcN8PkdRFKiqCsfHx2jbtm/mi0ivllHO0hdFgTzPcXJygjt37uD09BRVVSFJEpyfn/c5g81mg9VqhbIsr0i/62y/LLyQXJS7KAoA6N8jV6H0DuTI2jQN1us1VqtV/xDy26Lo1OURLY31eo3lconLy8u+3w68PODzPEdVVWjbFlmWYbVabXVRgKt9YFn6uq5xcnKCuq635GnbFsvlEmmaomkarFarrcgaEmGH/FZyc17kHYqiQNM0feWUpimHFC1Qegc6yZbLZd9XXi6Xvfi7Gh6TD2C5EhLlmc/nmM/nWK/XAF5m8KuqQtM0ff/76OjoSvlkUcVD9NXruu4fef7yMBH5gzRN0bZtL/y+m/Zyk74sS9R1ja7rtioDSm+G0nsgmvYiys/nc8xmM8xmMywWC6xWq176XR1s8nbl7sZqteorIRHthQzieVVVV5r1cuJNFz1FMq+qqivSd12H9XrdjxCowtsqgLG/j9ysF90YUZmJFs6+8iu3FUrvQBfpF4sFZrMZLi4uMJ/PsVwuJ5fetB05sSjnF0QZgD8y8KK5Lo/bC+Rst3gtCyWazaLPLvIIy+USbdtivV57RfgkSSbvz8sVU9u2fQulLMut/4OI/mQbSu+BnC1frVa99OIhmvi7ijC6sXlRJhHxxcEuT6IRzXAZOarLr8VzNRue53kvrqg8mqbZGtPf9feVyw5gqx8vhJe7WIz0dii9A3m4Tm7iy/16MQ4upAiJMCEHp6lvrx7oIrGWZdmW9PJ4uiq/+r481i0SY2Jf6udMQ4BTfGeVNE23KjgxKrGvROohQOk9UMfpRWQVFYCawd9HecRfubkvEPKKPr2aWTfJr4v+Mrrvtm/JROtFjvDqkCnFt0PpPVHFNz2mPuBsU3918stSmKK4TXixrqkcqvj7FkzsX/69KXsYlN4D9cBSp+DqpuSO2ZfPe6bnwHZfXu572x62PrpOePW7qiMDu0K0YK5j+vOhQOkDmeIAG9qPV1/bxAfc59KrEV7XrBf5Cdu+XK+nqAR05dDti7jhGQkHgG4MXzz3/ZwJl7A+25iiBWSa8cchuXAo/Q3GN8rb2McswV1+hkwPm/d7xvfAH9K3DxV8bJS09alN29bN+yf7hZF+j4wR3rXMdWGMoQyNzq7PMepfH5Q+kKERairhde8PacLrhvNsZRL7mDJzPlU/n4RB6ffALoQ3jZvrsE3CUdcLYYpoPkXEp/xhsE+/Y8Yc+GOFNzXtZfFtUV6d7aebCDPF8Bz7+fuFkX4HhDR9QyNdSIQH7JNy1PVCcZV96pYDmQZG+h0xVnjTdFtg+DCca2qurVy6WYm7QNdyMLUEOCNvGIz014Sv8ENxTb81Ca8ydK79VE11Cj09lH5Cph6Dl18PifK6KbYm4XXRXm1tqGW5jpNcWAmMh837CQiZKTdEeN/t6aKrLprb+va2fbiG6kyjAuRmwUh/Q/CpDEKb2moU943yuv0PmQJMbiaM9HvEZ2jOta4PumvfqVHYJ8oP6c+rLYqQz7oQZ9qRcTDS74kQ4Ydga9oLdLefMsmvNuldmXKe/XZ7oPR7IFT40Ik4OuFM0V33vs/+ffc9dj2ye9i83zFjhHehE0m9Ao6uL+9TXt1VckJyCOTmQukDcU2NNa3rWj5Fv952tVtbX97UhPcdkqPktwtKvyPGiD2kn2+78KXP9e/k1/Jcexu6pJ1Pl8G1Ld+8ARkGpR/AkAjvMwZvOth9Tqxxza/3TdaZlplOrAkZ59dhSkC6PufaBjFD6SfE1By2CT9UdMDvSrc+t5CWH75RXt6ea/tD0clvq8govx+UfgJ8++422UOm18qnzNqEV9/Xlc8nysvYRgRCYeb/eqD0DmQR1Iy2bj2f1/Lz0DPmTNl5XR/edD69KWHnunZ/qPC7mrmnq8RYMfhD6T2QRdDdWUW3vum1z7i7iVDhTf17+TvpmvW67zZWePGacl4/lN4DIYUsu3zTSNMQl+nAH3NZ6iHC676PS3iffavLfSvAoeLbkn7EH0rvoOu6KzetFDerFJWAerdUW6Q3CW9KVglM8+nVZJ1NeF2fXRZe/h62vrwpyidJ2L3ox1QAZDichuug6zpsNhssl0vM53OsVqv+TrVCfLGeLkqGCq97LeMrvGkftghv2r9NeNe+dgkrjGF4Rfpd//NuIuKA2mw2WCwWuLi4wGw2w2w2w2KxwGq1st4X3Tc7r/tt1YPZNA5vE97VrB8a4XXbd0V4tT/PCH+9eEkf8z8oSRIsl0ucnZ3hxYsXWCwWuLy87MVX740OjBuO24Xwuiy9KJet3HKZXBWKSoyB4rbAPr2Dtm0xm83wyy+/4Pz8HE3TYLlcbglvm9DiEt4mkOue8uo6uu3ZhuV04/PyNkz7DMElvy7qm1o/6rqsWIZhlX42m2mbrodO13V9Jvz777/HV199hZ9//hnL5RIAthJ4AnVMfOyNI33m0vsILw81ystMQ3Mh5Zvq5pg++2eXYDqs0j9//hx//vOf8fXXX6MsS6RpGlUF0LYtzs7O8Pz5c7Rt2wsnZMuyrH8tBBgrg89VbMV6PsKb+u+2CG/av1w+3Xf1yU+Ylg0lpuNxKpyR/tGjR3j06BEAoKoqrNfrvRTsOknTtI/mDx48wHvvvYe7d++iKArkeY6yLPu/WZYhz3NkWQZg+Aw7wJwlH9KHt/XffSO8TXgTPtsc8nk5CUjRx2GVvus6XF5e9q9F8/bQkcU9OzvDb7/9hqZpUFUVyrLE0dERqqrqo7w4EIWcIbebMg2B+fThfTP0svCmTL0rS6/OBhwi3lDh5fdM+2dl4I9V+iRJcHJy0r+uqqrvGx46Qo6iKHB5eYk0TfshujRNkWUZNpsN8vzqT6gTX42SJsnl57ooO1R4XbO+bVuv+92pZZZ/IxO6xJsN0zwB2+f3NR/g0HBm7+V/7Hq9nix5c1tYLpe4vLzsm+9JkqAsy60puWK52t9V0fWZTc/ldX3H4MVfl/Dy/1AV39a6MOFqkrvKbFumyzfYJhIRNxyycyCm3i6XS2RZ1gtvGtVQm5+6aGlrSpsiu7otEUllQoW3lUugq7x8ZJW3a0L3HUyoUZ2yD4fSO+i6l9NwV6sVqqraOvEG0EusNmtNWXHda91FL2wRXpRRzcarwpu6ZbY5/bryy10D+bW8ru37q9sZg64CY2XghtJ7IEdNVR5ddt3UF3b12XXR1if5pUquy9S7cHUd5KjsugmGrcKTK0t1u0NhEi8MSu/AJI8uGsrLbGPf6nPbue+qhGo010V13Xs6XNfWk5v2OuFdspm6JfL2huCaG0DsUHoPbP13kzC2aO+S3daMF391Uk8hvO03UMviGvqzfRfx3lBpQ/IKZBtKH4gYmwfszXUZU4LMJp0tW+0ai3dFYFtlI+/X1me2JdR8uybqZ3ya+xR7PJQ+AF1W25SQ031G/qxvC8EU3W0R3obP5bJNmKL71IS2AFgRhEHpPdFFYZHAEyK5pqna7iarw1d4W5S3TfP1FV8th7xM9/voXodiqvxsZXOtS15C6T2wjZnbkl8ypoSeinrAjonwOhF1zfkxsk+JLcKPrUTIH1B6B2ok1EV2V8bdtVxF1282RXjd53T7NImu61aY9u/aRyjq8J28LVflwmg+HErvgRBdzLkXD7kCEOv5Zq0FuuSVS3Y1utua2iGy6/atPpfLbMO2jo+wPvJT/GFQegdJkvSn0YpTavM83xLeZ7hNRhXCJjyAyYRXn+vKpe5HLYvpO/hg6nfb5GVSb3oovQMhfF3X/UNUAD4nwpjQSSQ/N02C8RE+VHa1HK6KxRdX8m0XsO/vxim9nJgqiiKqU2vbtkVd17h79y7u3r2LO3fu4Pj4uD+vXlxUY4zs8jLXBBiXhFPKruvXq/uxbcsn++4rf2i0J3Z4EQ0HTdPg/v37ePXVV3F8fIyjo6P+IhpFUWz17QG/A15+bUrGDZVd/NXJHnodP9OogG7fus+GLFe3FdLvJ2EEXUSjrmtsNpudF+q6SdMU6/UaXdfhzTffxNtvv41XXnkFVVUhz3MURbElvECXlJPfE/iIrvurwye6u+YP6KK8bwXjYmiENv2OoYlSchWr9MfHx/j000/x8OHD/iCPqZnVNA1msxmWy2XfjDddUMIl6BjRTU1rV2ZenTUob0uXM/BNEvoM94XiI6punSH5lNixSn///n18/PHH+Oijj/ZVnhuDOIh+/PFHfPfdd/j111/76C9uZyUetrFzlaGym8qnziMQ6IS3lceFa6gvdPuhkjKyT4cz0sfOgwcP0HUvr4N/eXmJtm37m12sVisAf0RKm/C+svuKLv6GCO8aAjQ1623CjxmLH4qptUX5/eCQnYM0TVHXNe7du4csy7Ber3upRJT36cePkV3GlawzYRoh8NmXul/d++p+doVauQ2ZJxE7vIGlAXHwtG2LPM9xenqKJEkwn8/Rtu3WbatlTJl6W/PdN0NuStSZknbqdn368T77V5+b9ueL77ZMSUsSBm9g6SDLMlRVhbqu+z78arW6MgUXMM9cU5/79tsBd9Pa539jGv+3iWVbPlb4MXkGn0QmscPmvYM0TZHneX93HyF8lmVbB5nr5JehzXj5uc+Em6Fj764hMtNrsU1fpqg8GOnHQekdiGE6MedenGyjG6ZyRXrT9n3eG3uQ++QQhmTIh1Ripu35Rnh1GcUPg9J7IEf2MU3JIbPMfCKjj0AuoUxj8jbGtFqG4LsdVgJ2KL0HQnLXnV5UdCL5RlifyGjaj2u5jlBRQiuwqeYLmLbFqO8PpXcw9UEUGqF2NQ4+pvIaI7yuWzQUCj4MSr9DTJFdt57PMhND+9W2/ahTf4dE4qma9WRaKP0IfA5kmzBDZfdtzo/p9/pMOLJt16e57drHrvImsUPpJ0A9wH368lMJbzvITUk+l5CydLYTcFzbHdKsD5HWNN+B4tuh9HtibPPWR3ZbhJwiAodg288U2yfDofS3AJfwQ8+UC93vlNseuh+xPiP7cOxXVyCDGDuBxrUslCkSaqFn/9n2FTo7Uaw7tLIj2zDSjyB0wsvYbdr2FbI8pAyhMwqnzNKbchLqOuIvKwE/GOlvIb6jBqGfkQkVaBddBts2QhKMZBtKv0N2OTZtmwqsa877CrKrfvzQfrj6manyGzHD5v0E7KKZ78uYxJlpGE1XQcjfY2xUD5Vf3S+b8uOg9LeM0EpE7hfr5NGtb9u3a5mtHz5FlJbXUS8KQvyg9HtgbLQfe1qqj+xTEipvyHZDvzu5CqXfE/to5g/pr485oWfK5CDF3R+Ufo8MET9ELN32XfP+pz79dqphSlsFFXJxT3IVSr9n9jkF1Teyjr0gxdDv43vikAvbSAa5CqU/IEJOQFEz91Of8ef7/tB1TVB+Nxynvwb2eWDaounY+euulsSuWjTiMt+ue/QRPfzVBnITmuhTfiZ0O1N/fyby9geb9yO57QerOo6vG3cfwpSXxbJtX+7Ps2nvByP9LWCXGf+x+/JBiDkm4abbBi/HNQxKPyE3MerfxEtOhbYmxl5DkGzD5v0twec0U3V+vO6577bV9ccM600xG9HUWqD84VD6gZiamKFXsQGGRTrbuibxx6CrGHynB+u+q2/ZbGcSmvryrAjsUPoRyJEnTdPBM8VMUvisr2JLzI1ttpsirG9ZRXl8zwXQXYlHvnGo+pyTdPyg9AHIgsuPLMuuHNC7LIML05loUyLGyF3ym+YC+JZL3Y/4vdWHXAFQfjuU3gO1PykOvDzPURQF2rZFkiRo29Z7eiswft67qx8+9QUndJFXLYcpeuvO0fc9jVeN9HmeoyxLFEWBoiisNxclV6H0ngjhZdnLsuyF32w2N/ZEkCnkt4kO2GfH6X6XIWfxyS2rsixR1zXKskRVVb38Iuoz2puh9B6o0V3cr75t2z7ytG0bHOllXP1a3+WuM9bGRHvXhBhby8PnuS0hJzfvRaVb1zVOTk5Q13Uf9WXpiR5K70AVvixLHB0d9X34LMtQ1zWaptnbOP2QboOrWT2kqW16z7XP0CivVjYi0ldVhbqucXR0hKOjoz7aU3o7lN4DcaAVRYGmadA0DZIkQZ7nvfCiCRtyoQpB6CWqQvARPGTIcMhsuKEn9ugiv/y/KIqiF7+qKpRl2TfxKb0ZSu9AjvRFUfQRXkR90Zff52y8oZXI0PPXfZrdLnwqH5+ujJA+TdM+mVeWZf+czXs3lN6BnDEWwovXIsLv8jTSKQk99z0kn+AarvN5zyWqPIIiMvUixyJn8Cm9HUrvgYj08nORuLM166dmisTglOy6PKbtyxNy5HF6dbye6Ekc/4ybH752TNd1W4KL13J0vw1R/lBQk3rybDx1cg7Fh/YHoPSejL3KDNkdQ3IMkUDpCYkMrfQ8n56QyKD0hEQGpSckMig9IZFB6QmJDEpPSGRQekIig9ITEhmUnpDIoPSERAalJyQyKD0hkUHpCYkMSk9IZFB6QiKD0hMSGZSekMig9IREBqUnJDIoPSGRQekJiQxKT0hkUHpCIoPSExIZlJ6QyKD0hEQGpSckMig9IZFB6QmJDEpPSGRQekIig9ITEhmUnpDIoPSERAalJyQyKD0hkUHpCYkMSk9IZFB6QiKD0hMSGZSekMig9IREBqUnJDIoPSGRQekJiQxKT0hkUHpCIoPSExIZlJ6QyKD0hEQGpSckMig9IZGRO95P9lIKQsjeYKQnJDIoPSGRQekJiQxKT0hkUHpCIoPSExIZ/w+QFIarNEI6OgAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 3; current eta: 0.5, current beta: 4\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 4; current eta: 0.5, current beta: 4\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 5; current eta: 0.5, current beta: 4\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 6; current eta: 0.5, current beta: 4\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 7; current eta: 0.5, current beta: 4\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 8; current eta: 0.5, current beta: 4\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 9; current eta: 0.5, current beta: 4\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 10; current eta: 0.5, current beta: 4\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 11; current eta: 0.5, current beta: 4\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 12; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 13; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 14; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 15; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 16; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO19OY8k6XXtjcrIvfZeqCHwSGIAQRAJyKBPDAFBhujKoy/IkyNL/0Du+wvPGeB5cujRkkXiDfDkiAKnBwRmMEs30VVZlZX7JqNxvjpx8kZmZHXPVnEPkMisrsqIyOw437333OXLNpuNBQKB+uDo276AQCDwzSJIHwjUDEH6QKBmCNIHAjVDkD4QqBnyPb8Paf97hM1mY19++aX99re/td/97neW57k1m01brVYPOl6WZTYej+2HP/yh/epXv7Kf/exn1ul03vFVB75GZN4/7iN94HuAzWZjWZZZlmW2Xq/tj3/8o/3mN7+xdrttnU7nQaTH8a6vr+2nP/2p/eIXv7Cjo3AMHwOC9I8Mm83GPv30U/vTn/70zo65WCxsPB5blrmGI/A9QyzdjxB5fr+WvwuittvtIPwjQpD+EYLdcF4ADj0G3pvneZD+ESHc+0eOh4p46/XaUKL90GMEvpsIS/8IsV6vv+1LCHyHEaR/hAiVPbALcXcEAjVDkD4QqBmC9IFAzRCkDwRqhiB9IFAzBOkDgZohSB8I1AxB+kCgZgjSBwI1Q5A+EKgZgvSPEFF7H9iFIP0jRNTeB3Yh7o5A4B3i3///5/ar//0f9o//5//Z1Wj+bV+Oi+inDwTeEf48nNm//N//tOV6Y//15a096f+3/ds//M23fVlbCEsfCLwjTBcrW67vB0gPp8tv8WrKEaQPBN4R/tdlz/7pg/cty8z+4rRj//y3f/ltX5KLcO8DgXeIf/37v7Z/+bu/slb+3bWn390rCwS+p/guE94sSB8I1A5B+kCgZgjSBwI1Q5A+EKgZgvSBQM0QpA8EaoYgfSBQMwTpA4GaIUgfCNQMQfpAoGYI0gcCNUOQPhCoGYL0gUDNEKQPBGqGIH0gUDME6QOBmiFIHwjUDEH6QKBmCNIHAjVDkD4QqBmC9IFAzRCkDwRqhiB9IFAzBOkfIb6Orao3m83+Pwp8LxCkf4R4V1tVZ1lWeA48DgTpA6WAdQ8r/7gQpH8EYEuc53nBvX8bwuK9y+XSsiyzRqPx8IsMfGcQpP+eYrPZ2GazsfV6bYvFwtbrtU0mE/viiy9sPp+nv2s2mw9yz4+OjqzVapmZ2dnZmQ0GA7u+vrb1em3L5dKWy6Wt1+t0HYHvD2LX2gfCc32/qZsfRNtsNrZcLm06ndpisbBXr17Z73//e7u7u7Of/OQnNh6PbT6f22w2O4igsOrdbteePHli77//vn355Zf24sUL+9GPfmTNZtOazaa1Wi1rNBp2dHRUurC8az0A16/HDf2hOoL0B4LJ7j2+qXOv12tbr9c2m81sOBzay5cv7cWLF/bxxx/bYrGwi4sLy7IsEXK1WiXiAyCIXvfR0ZHleW4nJyf2/Plzu7y8tPl8bl988YVlWWZnZ2d2cnJiq9XKms1mKfE9Ah5CyqoLFD8OPUcdEaQ/AB7p1uu1rVar9G9f93lxntVqZcvl0iaTiV1fX9vnn39un376qQ0GA1utVtZqtazdbttms7FGo5GuEfCIwVa01WrZycmJ9ft9a7fbZmZ2d3dnV1dXhYWk1WpZnud2dHSUsgZKPj7X25Bef8aidnR0lBaeh5ynbgjSVwRuOCb7crm0xWJhy+WyYEk3m82Dbzp+n+dVMOFns5mNRiO7urqyq6sru7u7S/F9lmXWbrfTM64JrjtbZhx7tVqZ2RtL32w27fj42Hq9nuV5nkKJ+Xxud3d3ZmY2n8+t3W4XSK+W17PCVb4bDZ/0GYRvNBqW53l6QGwM0pcjSH8AmHSLxSLFy7PZzObzeSL+IdCcut6sOKcSfj6f23Q6teFwaFdXV/by5UsbDodJxGs2m7bZbJIYB5cdxABR9XOBVHmeW7fbtePjY8vzPGkHd3d3ttlsbLFYWLvdTu59o9EoWF5+cJihiwB/ZtVHvNAJzyB8s9m0drudFjgsam+z8D52BOkrQK3sYrGw6XRq4/E4PWazWVK0GbtuPO/G9/4epGfCz2YzG4/HNhwObTAYFCw9CA4i5nlurVbLWq2WdTqdAlFxfHw2vIa173Q6KTwYj8dm9sbCj0ajwnFAaiwmOD+73p43oJ+5zLvhn0FsEB6ejZ4j4CNIXxFMOhDu9vbWhsOh3d3d2WQyscViUSo+7RK1ylxhgEkJD2M6ndpoNLK7uzu7ubmxu7s7m06nW649Yvtut5sebKH1syFU4XCg2Wwm0i8WCxuPxwWic8jAnkSz2Uw/8+JQZvWzLNvSTVQ/Mbv3WjqdjvV6vbTY4BEpxN0I0lcA33iw8sPh0G5ubmwwGNjt7W0p6Q8hO7vC+D3H2yD9bDZLnsZoNLLRaJTScxDuQIx2u23Hx8fW7/dTjA5rjxw+jr9YLJJGwbl4PCaTiU0mE/c70vi61Wqlc3BYgb/b5fKrldfQo9FoWKvVSkVD8Eg8jyCwjSD9HvBNpK49XGuQnt37MsXaI7zGvqyE4xrUtZ9MJuk6kKfXeBcWvtfr2cnJSVLj2dofHR0lcs3n88I55vN5eiB84UWBrS+73FhskMtXi8+egVp+hmZIcC6QHJ6MCqmB3QjSV4SSXmN6tfRlaasy684kADHY8jHpYZH5Nd/wLNqBeHDz4RJzbJ9lWSEbgfABnxHK/Ww2S54GFgEo/vgsTHqcF9fBHogn+KmoqZYeoQu+52azWQhHgvDVEKSvABXyVqtVwQrigZuxLD3FFg2vOXZmd35XHp3JwKlET/1mYHFhEYxVfCws0+m0kP5CWHN0dFRYHLjSz+yN271cLlP9P47XbDZtsVhYnucFsU9z7CrCeaTHvyOjsFwug/AHIkhfER7hWO1m97IsJYXXSnwmAV7DAuOcHHt7xSi8MJlZWpxUoFN3HAsAjg9ysuvPAiaIq1qD2fbC431fWZbZcrksEF6FPl0A1dLz9x6EPxxB+gOg6SR9vYvcGrOzSw8BzFO5cY7lcmlmliytV/qqJGRXvdPppHiciY8wAMeCVcaiA9KB9NPptHBu/vwgNT4n/4xrx7/zgofPv16v3cIhJbcWQnl5/EA5gvRvCc+qswLvua5MbLzmm9+78fEzCMiLBMBEWCwW6fx5ntt0Ok0xOafk9Jzr9bqQ42ctA6QH8fF5cY1qnblykf+GvxcvD89eDt7nWfR9Pwd8BOkfAE9pBmHwezPbctX5Z8/C82smPSykmSUrrGIf/g6WHqREeovTcSy+sYuPSjacD4sMCN/pdJIaj/dhcTHbrqLjQh+49LheDlNg5fm9u6y997PqGYFyBOkPwL68Lwt4asm92FXLYrk8VgkCAjabTZvP5+nYAMfYHA5AdMMDhOfrRD6dic7iHkg/Ho+32mmZmGb38/mYlCC4JyyC8CgbxnuhHXCIod6E6hiBagjSvyMwAZTsHrF3PWs8j9dlsTz+jkkGwQyWXfPYHE/zuXEskGu5XBYKbcq8DL0WvSZvmg8WAl4M5vO5NZvN9HsmPdBoNLbi/LDu1RGkf0toHt7MtuJ37QLb9RpkZAsK8a1MvCtzeVl9V2tYpp7jmGZvrDxfe9W6dv1OdBHgclrNzev71LIjjOLPy99FYD+C9O8AuHFVoffIrTXpTCgW0DieZxeZ4cW1eIAsfI24Ns0UeN4FCOa58d4i450HUIGvzAPgNKaZFcREXjjU0nsiX6AcQfqKqGLdNEWnLj7IzvXo+1J1ZuZad14MPPLwNfGiog+vFFYFSZyHHywacsigNQh8LUxc7oxjlV/z9OotIE+vuXr+bgK7EaR/C/ANqjc7E9+z8oiPtRlFVXu98bnQhQmvdfCajuO5dloLv6v2nQt8WBDUwZj8HeC78RYwzzqzeMhFPKrgl7n3QfTDEKR/IMoKcTgNxlZeic/NKSyOsXhldq+G4ybXCjsuxuHrYsvOtfcqynmE13Oh4QY5es7368LEKUquGixT2D0l3kt/Mrm9arwgfnUE6d8B1K333HuN8b2WUy83za+5n5473lSVh0sPwnc6ncKD++k1dGBPgif0oK12Mpkk0uvQEP3cfGz1BBhq+dn9599ziXFY+IcjSP8A8I3M7jwsnlbaaRyvhC8T0vCae+m1w85rK2UNgTvrut1uKrDxRENO+SE3P5lMbDwe293dnY1GowLpcV7+Dvjzw9qDwGW6iJcBwfXgmRdAs20RU48VKEeQ/oHwYnkuYdX8u+biPfVcFXcz27LwaGtFv7vXSAOvgttpeWoOk14XGrXwIHwZ6VlsZG8Gr1WI4++PwwL9PgFNzXlNPbsWlMA2gvQHwovlvbp6j+S7UmVlFpfbWPFAXK3WHmDSM+Fh6eFpeOGEWvm7uzsbDod2e3u7RXoOKcpCGv3OvO+SU3wqiKoyX7aIBKojSP8AeOk53LS7Ku2qEp5Vc7bwiKlZUIO1hwvNbjWGWYD4u+J5nJe76TCDbzgcppFcGJ7Bqr32EbB7r6Rll10Jzt+JV7Sj/wf8HKiOIP0DocRHNdsuS+/lxD2xyrO4OqVnOp0mSw83WxcejIZmwnPDDBOLY/nFYmGTycRGo1Ea/Ilz6yLjaRisFXhFOVpToN6Sious5pf9H2hNQKAcQfq3gFp6L13Hlk/VbLPt/LVOvAX5YHUxeVdTZ2ZWqFlnIQ/WHlbeIyYr9miuYdKPRqM0IQgE9gqQ1DUvK+wxs7RQarrPy8/z33kkD6JXR5D+gfCEPCa93sBlll0VaiU8yAdryy4+rC4IyKIaSAgxTzemKIvndbHB+TF8U4W0sv4BHJfrCXS8NpOZ6xTUtWehVGP/IP/hCNJXRJlwpOk676FutJkVlG8QCaIdT9vFbP3b29stNxsintmb3n2+hkajsUV4bqH18vN6fo7jdQCnF8Nr2hFW3evlx9/leV74Hj0X3RNP2TvQvwnsRpD+QOyrAPOsTVk8y2W0nmp+e3trNzc3aTMLJiFIz9cF0rOV54o8bY3l62MRjz0MeBZMeF5Y+Dxs5fkzaSGRWbGZRr87tuz8O68ewNMAArsRpD8AZfXj7PJ6LvvR0VHBwrH7y2W1vIkFrDseIL0KeDimkhFWXd16JTyr9pwl0NHeIL1ZcbYeawT4bDge1+tjrz8t2dVwoQp5Pde+6nsDQfqD4CnsbK2zLEuDLkBmjZv5WFp4w241LP1wOEwpM+TIPQKZFQtzeN49XnsVeFpyq1aec/Jeik7DBj4u1xjwuGqcv9FobC2g+P2+2voy5T6wH0H6iuD4W0mPWBU3HpMdf8cWlkU7Fc+Y9HjwJplchWd2r4CDiNxN56Xo1Mp7FXgIIyaTSWE3XhCez8Fde1mWpcWIC4twfNYDeHHkhVTLavl3+JxApOgehiB9BSjhNVbFa7ZQWBDyPE8bRWh6DO+FW6+KOcfUHuHNinluuNwQ7zSW12tgt54JD88CaUGIhexFIHTAOWC1d7XiatWgV0df5g2p4s+fn7+HWAD2I0hfEUpWkIX3eTN7o0ZjVxfe1IHBpOAtpEA8jql5TzlvR1mPiNxRx4Ms+XPgOnjba66+G41GNpvNCpNzYeVbrVYq+Ol0OsnKg/TedwXXHuctc+1VH2EPQDMhQfSHIUhfAXzzedZ5MpkURDVtmeUiGLjKvGjAooJ8WAB4uyydUmN2PzsepNc6e7byHG6AYEjPwbqzaMh5eXwu3Q8PDTxIF2Lhw3mg1uOZyY7vVQnOYZK69uxJMYL0hyFIvwdcVaZ5bK6Dxw2vBTpsmbRX3dsUkjvolPA4vpkV+uV5d9p+v79FSB5kgePg3CA8tt2+ublJrj0P5ETY0O1209bXWFiYjLq4cYyv8bqnL/ACyVYef4+8Pn6OuP5wBOn3gItmEHOzyOYRRJto+FhqAXX3WS664cYWrkiDaMdddP1+f2sPelbsWTjE68lkYre3t3Z9fW3X19c2GAxsOBzaeDxOVh4LWLvdTlte4zxw7eE1LBaLRFh21cty8V7hEqy6jsTiIiivdh+vA/tRifRlhSiPGazET6fTlEIbDAZ2fX1tNzc3iSCIfdkiscUyu7dkZlawgoh7Nf7V/niz4hZZbOGPj48LD96KGkRhSwtv5e7uzgaDgb1+/dpev35tg8EgufawuiB8t9u109PTtM99r9ezVqtVqEHgght98PVrJx4TV0U9TuMxqb2pPIFqqET6On+hm83GRqORffXVV/bq1Sv785//bK9evbKrq6vU/OLVpJsVBz54YpWm/vjvEauzy6s19Z1OJxH97OzMzs7O7Pj4OLndSOfxgoRFbDwe283NjV1fX9vr16/t6urKbm9vU4kvvAoQHsc/PT0tWHkzS2k9Ly1ptl1bj+uH+Mi9/V4thNl9ahJeTxD94Qj3fg+Wy6VdXV3ZJ598Yi9fvkzWfjgcJrGLSaXk9sY68WtdLEAKvJ9bdnU4Rq/XK5Aerjcr6nDlEaZAfGSvBYSHYu8R/vz83M7Pz+309NT6/X6y8tAyZrNZgfDs9cDbgIfCqUSu6DPbLk0GysIEbwGIxWA3dpJ+PB67FuyxAzeomdnHH39sH330kb148cJubm6Saq/TYPE+dqVVcS8TsQB24/nvtAIOZERsfXx8nAgPAQ9EgxfCwh1U+sFgUIjjmfDNZjMR/uLiwi4vL9PCorE8W/kycrKH4jUCsXjHQFEQew1Rifd22En6wWBgH330kf3hD39IK3tdFgDcaF999ZV9/vnnNhqNUqzNaSxv8o3ZvVKuCjSOze9TpZ8bSfDgKjgo9VDrsQDArYfbDcJDtBuPx4UmHugSqLxD7Ayl/vj42M7Pz+3y8jKRnmN5WHlepNir4WvHM9cRgPScXWDi7yrEwXMQ/3DstfQffvihffjhh2Zm1m63C51djxUQpzabjf3gBz+w9957zzqdTrJm2mjCVq7MYpkVR0Sx9cMz3HcdwsGE59FXPOwSwh3HvjwQA0Lk9fV1svQIUTjzAAvc7/ft7OzMLi8v7cmTJ3ZxcbGl2KNgiEmreXVuodUhnVig8J1pObP+n+CY+4heF8P0UOwkPUQsYDabfe0X9F0AE/b169fWarVSHJvnuXW73RTzwmX16u65YIUFuizLCjvd4DVPtsEzN8yAkDwJR2vfcQ3L5TKlGNmVHwwGqQCHm2l4+g2Uerj1FxcXycrDFUfowi69hjNYIGHlQXhOKYLMOvLLI7ZHdNVLAvuxk/RZllm/308/t9vtgrjymAHiN5tNm06nZvbmxux2uymGRdyLxQA3/Xw+L8TiXDqrjTEgLoiM1/w7baAp26WGc/FIyd3c3NjV1VXKw3PxDQjP14WMwPn5uV1cXCTCw8o3Gvdz7JmwZRkIM3Mn88JjQP0BFpIysu8jfBC/Ovaq92z1uCyzLoCLjJscVh2WGdVvKC9FdR0abbi7TOvXOb7lWnYQxFO6NawAkOdfr9c2n89T/H51dZXy8Fpii8ULXkKr1bJer5fU+ouLi5Si63a7ycqzss6NO9o+iwUJiyOsPEISVey9UV5lbvy+DEmgHJGy2wOQCYQ3s1QNh8KYXq9XULO1jJZJz2OstFaep9bqvnPeFlhm94Ihbnik5YbDoQ0Gg0R6FN6groBjZyxCvV7PTk9Pk2LPeX+QVNON2mnInxWWXKfysmuPY7GV53Qc6wMA5/D5OUhfDUH6PVD3EfF4p9Oxfr+fUmXNZjORDoQH6TnG5T50JTzIBfeex1BxJRsA0sHiafUg3Hqer8djtrCI8AIG8Q6E7/V6SbuAlUf8rmXEbOU5jFFPRo/nufX8s5bqcjjBgzfLVP9AEUH6CmALwqknpMyOj4+T24+YnneWRczKuXbdVJKFOSZ72fRaVrtBBB61BcEOhOcpOGbFVlmk/JCeQxEO0nO4Dnap8TnVo8F3BEuu4QuP78Jn0XSnltvy/wOHE+xhaDo1UI4gfQVodRlSW6pGwx3lVlJ+b5mAx7E7yA7rzrUAuBaOqTmkQBzPKj0GcWAhAlhcOzk5SYRHHA8LXzYGCyGM7mCLhQSfV8U7hCyw8kp4hvYu6ILDQzo4cxBu/m4E6Q8A967rrrAQ88xsKxzAg4dJqjBXtoutFv6AKLDuTHhukcUmFejL5wwCCM8ltk+fPk1WHkq9Ep5Ha/EcAE77se6gij1beXbFPbKykKeE94aYeBWSAR9B+opQgYmJygq7Ks/cCsuk0NdMdK+enC0ek0/Jfn19nQgP0Q7vhffAKv3FxYU9ffo0kf7k5CQp9byIsYXnST9YUMwseUCc3fB21wGYpN6QELb07Lo3Go1CaKGhVJB+N4L0FbBLYNLONya4vlZBziO5l5NmK+f19mvLL7fHgiiclkPxzeXlpT1//tyeP39uT548sbOzM+v3+0loMytuxKEDPNnKe9kNaBcax3OazStT1u+aFzxUALKnoXv6hXu/G0H6CuAbqKwYhOvMdZsnz5orwcusuhIeNzsm3nj98JyWY1ENJDw+PrbLy0t7+vSpPX/+3J49e5asvHbomd3P0uN99SAMwspz/QBnKFgI5M+E43rpNv1utLzX7M3CgswBZw9CyNuPIH1FMNHLeuDN7uN+WDslPVeylR2fLSDHsTy1Fi498vCouON+eI6vodKj2u7Jkyf27Nkze/LkiV1eXtrp6Wly6zk/7g3PRPoPXXlaVqyjsVkX4BSjfo8AviNV9tmS53merouHhoZ7vx9B+gPAsSenjbyx1Ex0b0gmH5MJzkRgd553v1GXHm49d8vx+eHSs0qPx/n5eZqEgwIcJTyP5+aNNOHaw3XntlndAAMlwnhdtnCybsLfqRbkgPRaGBSk348gfQVoflzja1hhWDe1WmXxunoNekwcV/eXQ/795uYmdcup5cW1oJ7g9PS0UE+PXDwr9Rxz6zx8zAPEoA2u21fRTkVNJTwPBvU68/h7A/j7QUyvpI+YvhqC9BXh3YRshTudji0WixTP6w2oN6JaO45PQXQo5CA8D+TEdle8Vz3nybnohmvpz8/PS6vtcF28kSYWGd6ymrfH5k0yddY+oGW7rLbzPHx8zygE0j57duGxS47OLAiy70eQfg9gybi3XV1WWEQV72CVWIXGs8bq7EbjATcau97wFlfsYjMJYXVRIoy0HGrpEbujTVY3quAJO1hctMjH7F6h19Ji3izTzLZCId31hgm7zyPC943/E1xvEP4w7CU9i07NZrN2rbWIUTGWiodOwvrMZrPCphJlRTXaJMMLBrvv/GCSw4VnsmvpK8Q67oeHK6+VdjpwQ4du8HQdnBvkbLfbaaHRLAW33HJ9vs7190pnlfBe/I9yZ/amvPcGfMQQjQp49uxZymFzg43Z/XRZL7fORS1sUdlD0E0rUVgD0mNB4Oo33d6KN6JA7A6hjttjUUuvlXY4HqcDeawW8v4o4221WoWeeh58gc/HuX32XrgHgAuHAC+O1359bvxRDwHHCPKX46AhGp1Op1C//VgBS7Jer+29996z999/387PzwvDLUAcWEezbSUe1pwr0bTQhTfP4G2p4b6zZdQYGBYW7jwTHiOudCw258z1Osu2uEIaEFmBslw4Fji8ZiGQn3WCsLryvHBwxoRJ76n9vAAFyrGT9L1ez37961/bz3/+8+QO1iluWq1Wycqxpeabcr1epw0sueMLltyrRuOtsUAy3jEH5PA2roRl4/hd03FMeBTc8BZXbJG10o4XId6umneu9Ypn+Pd8XLbw2geAv/cailjlZ8KvVqu0gOIaOLwIK78fO0l/fn5uv/zlL+2DDz74pq7nOwMQ47PPPrNPPvnErq+v080PgrAFNrOUQuI0G3LfIL2SwSM7rKFubWV2TxJuZsHgCyj0EOxQUqs713oVfqon4PNxDQLXHzBJIa6BzHxc77vi0EAFTl6MlPCq8kNE5GpAXkACPvZa+rrjxz/+sTUaDfvss89sNBrZfD634XBoZpaEKCwGWZYVbnRuMsFNzaTnbam5gcXbpZatO8++Pzk5SaTXDS/gznsjpllTANGx+PCuPWb3I65hUXVzChYUuYKPG3NAYgDXVVZyrEMyNJfPbcreTjlB/HJEym4PGo2G9ft9e/r0qXU6HRuNRono4/HYNptNobUzz3ObTqfulFrEp0oK3YPeE6m4sw/5cN7oQje7UOGQScXeCIcYui8fpyuZaEp6Fu6gceDzed4CRovhZ/1+8Pc6IENDG+1wDEtfDbGBZQn4xmm323Z2dpZudOSxOX7FzW12P4aKB2Go24oCGM5bM0HNtrv4uOiGt7TaRXYmHMfaCD+4DoAn5HLhjV4LFoHNZpPq/HmSDu8CxOcHWfl4ZfE8u/aqZbCAyePF2NIHyhEbWO4BLCtuRohzuME4NubSVB1gaWYF11Ur03DDm92LZVy7rxN0Ma2HVXktGuKGFSY8x9vqbYDwyMOb+RtMsFVmz4FDFE7JMcm5Gw//xpOAVK3nY+B93KfPYmm49/sR7v0ewB3V/dfYorAwBpEK4pZXt6/NI3xT84LBHgM3s/CQSXW1UTEHjQHXx96FjrpC/I4CIlTaqdXUSkIeqsHPXCVoVtx8E96KTubBNet3o9V62tjDtf4sMAbKEaTfA04J6aOscqwMmu4DONXE7iu72FzqyjP0zO7HdENBx2YbuC61xjpXzswK59XQBMfBsdnrgfLPaj9vfYbj8JhtTiHi2OqVcL8Cfy88nAMhDXs64d7vR5B+D5SMuwZhAFoH7r1my4XX2v+OZ+7NV8sOsoOEbO08DYGFMjMrEJw9Gl7YmPAIRbSEmGN4DnEQHvEeATr3Hu/zCIvv3sy25hLqVJ4ozKmGIH0FMLk5NmVRK8/zRCZ26fF+71hm965v2dw8XWjMirvZ4LVaOW508fQD/D0IjoUFZOKCIhAehMY51aVXTQPHY8ERpMeCArKvVqvCHvf4rlAQhu+Yx4fzhiBRmFMdQfqKUOKryMYFOCCjdwOCmExS7c7D8ZXI7AYjZue6d6As3+2V7+KaeFdcjrehUTDhvWm4bOERlvC+AOhd4K2uYeXN3hQ2aWgBwnM2wdsBSAW8IP5uBOkPADgpl2QAAAtJSURBVLvkmkbjDkS9Yfm9fAxePDyyA1yDzroA/17/lgVDzfnzbrGoamOhkiv4eMHgzkAIgtztB8Iju4DCIbT4omgIzUqw7ghNuAYgz/PCZ2QBT7f7CsX+MATpK8Jz8XHj4UaE+s0pOC0dZVKXkd3LW2v9ORNaz8NVbgALdfyzbrqhXotX0LPLwjPhURqMSkHdE4/FR7QnQ0vABCIOg1jIjGKchyNIfyA416wVYXDp0YkGS6Xtn0x6fsbvtQYdFpaflfgK9SqYPJzr1iGWXj+85vZh5blyD6RkwntjuVgcZPKr1wTvAYsPFln8nXpDQB0LyQ5FkL4CQBivJJZdYxBAXWstumGLrpaKS1phYUE8HcSpAyhwjVrJh3/ztsjWlBeuwey+OQjVe7rBBdfm83httPji0e/30wwCeBqoXkTrMW/a2Wq10oLCIZMukF4brlkQfx+C9AdAhTxt+MANyio+u6h8DAZuUty8PDeP0214zXG2Fz6AEFwQw0TnbaZ2NeV4I7zg1jPhG41GIrzn1qPbD3vYcVeduvQgPj4fhw9aYqyhTpnXEygiSF8RnrX3ina8G29X3l6LebS8lbeC1gYUtoKa8+fFCATnLbE5x82EZ7Jxfb7XSsyLH1R6jOVCmg7jubiOn7MQLIqC+AibsGCqaKlVgez56Hcd2EaQ/gCoeq83LH5ma8luqObt1erzDa35dW+YhFp5XJum30ByLt/lEl4QCy435+F5Nh+q8cyK7jam7oLoyMlziSx7E7heFTXV0jebzcJ3pxkEb3ebIPx+BOkPBBNVU25MerVOmmYrg+bXtdMMYAKBPFqTzpadrTsTEefkEENjebbwCBtw3mazab1eL+Xkucy2TGHX2Ft1CM5qcLER3nN0dOQO2fS+p8A2gvQHQvPsnsDEIYCm1TyLD7Cl10YcpANZ9cYxOJOwj/C88wwsfJkl5fQcEx6LBay8t/+8kpaJXhaDs7DJiyvH7SB/s9ksZBJ4q2o+X2AbQfoDoG55WVkuRLwyUuM1H5P/Tc+BtBUvJAC7xuzSszuv1l0r/HA8DivYdeYKQy47RprOK4fF8fE+Fu+82XceSXmB4Mk7m80mDSvhmv8Q86ohSP9AKOH1sY/8+ppz9Hgv9+zDwmqFndYMaCrOI6NX3ccZAxYSIezBpVfXnifsMtkXi0X6N3wWVt7LtAosQHxNnLLE+/M8L0wc0q2qA+UI0h8ILac1s1LCc3wPsnjxLB8X4DJeJaguFIjnuTRVC2280l2t9mOSqVjIuXHOXPC/Y9HgfQBAeFTfmRXnD3DdAZ+f05XeKDHdmz6sfHUE6d8CZWW1iLuZVOjCM9tO4ekCUhYWqJJdViykLjzrBJxN0FiZy4fZ6uIcWlmoll0XGJ75zwsQFyAhS8BqPAjOpOYx3GaWFP5w6w9HkP4toDl7tvIY/ogbUbdp1iq9MhEL0AIeVfJxbnXh8VpFNXbrdVHxdAcsFgyELxizBbcdZGfvg9uQ8Tlg1Vkw5AcvCBzTZ1kWufm3QJD+gfBEPa5rN9tWkLkZR621lxVQMDnL8vSwoJ6YxsQta9bZB36/mSW9gRtmvNHU2siD9/KMfN6+i4mvAzbLOhgD1RCkPxAak5tt55k9y8N/o3l8rcWHRVTis5eA47A11wWFj1OWJy/LGJQVDvE5+TPg772SWm2DRajg1QSgGEgHbHJ4ot8nP4L8+xGkPwAe4Rm7yM8ufJmV1hsYv8M5PSLyM0iJv+Gy3F1k4N/re/jYXA3odflxB2IZ6TW290jP1l4r7bTLkYVLDo8C5QjSPwAqqHlWH5a2LA7WmnuP8OwKs6jGYpyq+lgc+FxsHRXsCbBYh2viMIBVdp1Lj2PxeGtM59HWXb4+Jj1vAKJVdvwdIXPAQzV4QQnS70aQ/kB4lWW73GSuomNkWbblHivYjWeCqxuvbjeDPQYlv1pzaAr6eb10Gv8bn2u5XBYyFywYIqugKT5v/3pW5vnavMGYXq1AEL8cQfoD4BFNiV/m0nsW1FPEcWy8h2N2r3hFVXhdfFQ7wL/rMwt//Fm9wh3O5fP1crUgD+tE5gKiH15zY492E3JJLacltZEIm33EJJ3qCNI/AGrFyuJcTYEBSk4vfceLBN7DcXWZGAfsuvHLtAm+Ts3vq2uvGQh+1mtj74R1Aa91mAtt+DvhTTK8ngK29EH63QjSV4S69Up4fq1xtpm5RFV3nG90M3/CrXdsDiP4Pd5x9Hh6bPUe9ol3mh3YlYHg7woxOxfjeDE8E56tPFp3dXfeIPx+BOkPgFoxdu89K79rEfCe1cVWwjDg/nMZLMfjZbGteh64Zp54y1Vu/NpLNbLrzeIaXuuQTbOia6+E589+dFQcPooWXvTrYyJPkP4wBOkrwHOfq/4bW2CO7TltxeC4n29gJg5bUy+Ox7N6Cl6IoC44N8LoosbgvndOzTEJeYClHkfPi+vhIiWemcc9+7xxhm7gWSVFWXcE6R8IFumQQvKENxa6IGSpB6CLhd64Xm7e+1n/XmvdldiqpO/7vFpAxFaYZ+bzAA1cC1fU8XXge+Pr1a5BxO88kguz9zAKLIS86gjSV4B3E7GajJ1i8jzfIrO6+ar4q6XHsb3KuLKb2bPu6kmweKbz90AWVtx1cTIrbsHFOXLM3wNJvWGbq9Wb2fZcSNNoNNK/8TRh7tPvdrtbVh7DN09PTwtDN3mRCZQjSF8RbNnZuvV6PcuyrDDBVQnviX9VrLz3YGgO3vs7nJNHavPmk9y6yvlxFdVARp6uq/lyb9tonB/nwfitbrdb6K7j83AuHlZeiY8BnLxrTlj6agjSVwQLVkgdYfNFEF6VbY/8qprj2XPNdxHfe+0tDBxL61Qcr6XVK7zR8lp258s2k+Q2WxbttKOOm2k4VNKR3fyaxTy49xHTV0eQfg/4JuKKMIhz3Ndttq3w60P/puxcZaTGz4CmyzzxjnPtbOmV7LqRhoqGWvqqE3q8UlhecPh83EHH5+LzYGHhc/BiwJtthnpfHUH6imDSdzody7I3debdbtcV5byCHH4uOwc/76qg2/XM59R6AixQXAxTRnj+3Lq5h7cdlg4H5XNz2KAz/HGd2kzjTQPyGnm4HTms/H4E6SuA0208CRYbMjBJzHYr7GWk30XgKq+9nzW8UPLzIqDFNzgek57Jr9tKl7W26qLD59YUHs7FngUvJt64cSV8YD+yXZbHzGIcifnbTqkgp39bdgwP3s1a9d92/a4szNhVVMR6A4uX3OGmJN9lYctETS97wefj8+o5dp07iF+A+2UE6StiX5xe9veH4iE3bdl7vMXIu35Pc/A8j32pxH0Lj3f+ss+y7zxlomagAPdLCfe+ItStrmLd39X53gXKrvcQrYFf7wozDjk//3xI6BKW/eEIS19zHLJgfV0EY88i8E4R7n0gUDO4pN8euRoIBB41gvSBQM0QpA8EaoYgfSBQMwTpA4GaIUgfCNQMQfpAoGYI0gcCNUOQPhCoGYL0gUDNEKQPBGqGIH0gUDME6QOBmiFIHwjUDEH6QKBmCNIHAjVDkD4QqBmC9IFAzRCkDwRqhiB9IFAzBOkDgZohSB8I1AxB+kCgZgjSBwI1Q5A+EKgZgvSBQM0QpA8EaoYgfSBQMwTpA4GaIUgfCNQMQfpAoGYI0gcCNUOQPhCoGYL0gUDNEKQPBGqGIH0gUDME6QOBmiFIHwjUDEH6QKBmCNIHAjVDkD4QqBmC9IFAzRCkDwRqhiB9IFAzBOkDgZohSB8I1AxB+kCgZgjSBwI1Q5A+EKgZgvSBQM0QpA8EaoYgfSBQM+R7fp99I1cRCAS+MYSlDwRqhiB9IFAzBOkDgZohSB8I1AxB+kCgZgjSBwI1w/8A+88ufDkWcsIAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 17; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 18; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 19; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 20; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 21; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 22; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 23; current eta: 0.5, current beta: 8\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO19O49j6ZFl8M3MrMzK6kYBLUFqYwFpMRIwhnxBAgZjTLvjyR+st85Y+w/W3b+wTgPrrSNP1loStoEZZ7VQN7oBoVsllVRd+WAymXwk1+g9tw4P47u8ZFU/Ku85wAWZLPK+6p4vIk7EF19nvV6HYRjtQffbPgHDML5ZmPSG0TKY9IbRMpj0htEymPSG0TL0d/y7pf23COv1Op49exa/+c1v4re//W30+/0YDAaxWq0O2l+n04npdBrf//7344MPPoif/vSnMR6P3/BZG18jOtmHu0hvvAVYr9fR6XSi0+nE/f19/OEPf4hf//rXMRqNYjweH0R67O/ly5fxk5/8JH7+859Ht2vH8CHApH9gWK/X8cc//jE+++yzN7bPxWIR0+k0Op3UcBhvGTx0P0D0+6/G8jdB1NFoZMI/IJj0DxDshvMAsO8+8Nt+v2/SPyDYvX/gOFTEu7+/D5RoH7oP47sJW/oHiPv7+2/7FIzvMEz6Bwir7EYd/HQYRstg0htGy2DSG0bLYNIbRstg0htGy2DSG0bLYNIbRstg0htGy2DSG0bLYNIbRstg0j9AuPbeqINJ/wDh2nujDn46DOMN4n/+2xfxwX/7X/Ev//1/x5c382/7dFJ4Pr1hvCH89fou/vV//Hss79fxf55dxbsn/zf+6z///bd9WluwpTeMN4TZYhXL+1cNpK9ny2/xbMow6Q3jDeGH7xzHf/rFf4hOJ+K9s3H853/40bd9Sins3hvGG8R/+ae/i3/9x/8Yw/53155+d8/MMN5SfJcJH2HSG0brYNIbRstg0htGy2DSG0bLYNIbRstg0htGy2DSG0bLYNIbRstg0htGy2DSG0bLYNIbRstg0htGy2DSG0bLYNIbRstg0htGy2DSG0bLYNIbRstg0htGy2DSG0bLYNIbRstg0htGy2DSG0bLYNIbRstg0j9AfB1LVa/X691fMt4KmPQPEG9qqepOp1O94r3x9sOkN4qwdX+YMOkfANgK9/v9Dff+dYiL3y4Wi4iI6PV6B+/L+O7ApH+LsV6v4/7+PpbLZdzf38ft7W386U9/iru7u+o7g8HgoH13u90YjUYREfHkyZO4vLyMi4uL6nir1SrW67W9gbcQXrX2QOBh54e+jgCvGxPrvkG45XIZs9ksFotFPH/+PH73u9/FZDKJ999/PyaTSSwWi+h2uxVJd50b4vd+vx8nJyfx7rvvxo9//ON4/vx5fPrpp/HDH/4w+v1+DIfDGAwG0ev1ijH/N6kDsP5g1MOkPwAgnG6vA35YS/vigWa9XsdqtYr5fB6TySSeP38eH3/8cXzyyScxn8/j/Pw8IiKm02l0Op1YLBZb++10OpXox6SBlT87O4v33nsvnj59Gvf39/H8+fPo9Xrx+PHjOD4+jvF4HIPBILrd7oZ4uA/x6r7b5J5iwOGBx8Svh0m/B5h09/f3W9uuh7T0MGaflyw7NrjZs9ksXr58Gc+ePYvPP/88Li4uYrVaRa/Xi36/X7n3vV6v2icIwlYa59Dr9aLX68VoNIrz8/M4Pz+Pk5OTGAwGMZvN4urqqvodPI1erxfdbrdIun2uu8l94GvAIIVz2GffbYVJ3xBK+NVqFcvlstpWq1VKfHWdS5/tOiZvq9WqsvLT6TS+/PLLuLi4iOl0WsX3nU4nhsNh3N/fR7/f3yALCNLv9yuygsggEEj/+PHjGI/H0e12q2PPZrPodruxXC4rFz8jfcn6NgkFsrBJ7y3Otd/vVxvERpO+DJN+DzDhlstl3N3dxXw+j7u7u1gsFltxc0YCvO4iQ0Z4eBTL5TIWi0Xc3d3FZDKJL7/8Ml68eBFXV1exWCyi0+nEYDCI0WhUWWTsHyQdDocVSUB4HgxGo1Gcnp7G+fl5tR94FniPfYDwOH/+u8793jUQcNikIRTOdzAYxHA4rM4Rn6/XaxO/AJO+AZR0INzt7W1Mp9O4vb2tiJ9BreA+cSiOyx7GYrGI+Xwes9ksrq+v4+LiIi4uLuL29jZWq1V0u90YDocR8ZV6DwvOAhxemfggPRPp9PQ0jo6OIiIqzwLkZwuv7jZcbQ0h9JpLBUDqWSnpcZ6j0SiOj483jsv329iGSd8QePhAuOl0GldXVzGZTOLm5qYiHHLk2QPd1BLyMSOiGmzUy7i9vY2bm5u4urqK6+vruLu7i/V6XVlqWDwmMsgMEQ7Ex6AA8uPf8JuIqMRAuPdZ7M7Eg/uNz0vXnN0D9XDwiuPgGpfL5YbVb6KttB0mfQNwLA0rd3NzU1nZyWQSt7e3VTwdkVv0TDRrQnwW7pj0s9ksptNpTCaTuLu7q2J5Jm1EVMQG2XnD99Ta45WtNgY89XzgSrN7rfurs/wYEDiToKTnugBcHzyQ4XC4VTtg974Mk34H9MGDaz+dTuP6+rqyskz6OldeH/KSFaw7PkQ8nMd8Po/lclk96KxkQ9AbDocV0Y+Ojqr3o9Fog/hM0E6ns+VlLBaLSlPA9fJAhwEDApsOHnytfP2ZW84DC3tRCFNwbTgPFws1g0nfEGxt4Vojpr+5uakKZNjClOLdEuH1+xzX4qFHtmA+n8d8Pq/IiO/ClQdBVN0GYdjqg/gsyuG4LFCC6BAwMdisVqvq2Kyoq8XPrpezB0p8HuyY9Ahb2MLbrW8Ok74hslQdHny4vWxtd1n4jPz39/fFGXJs7fCq9QHZfkriGefxMQiAqPgu8v0YXHAf4GksFotYLBYbLj5Iz7UCmtLLyM7f4XuQkR71ASb7YTDpGyArylHiZfFtXbHIm4o5m4iATA6NeSHggfwcGsCdx/vBYFClBLFveB9ANikHYiLOEyEQ3rPgyEVEfAxcB65ZPRyjOUz6N4yShVfrXnLzNb2X5arrUlNMEB5YUIM/GAw2BgF2xzmFhwFOBwB22xk4VlaeDLLq/Sl5NbguVe9LRTom/n4w6fdEJtLhb1St1cWrGeH1+3VeAZM+Gxy4gIhJ0ul8leZitzgiUtL3+189FsvlsromLghil5ytfEZGHJvjfj3nuvuceScRX093oLbApN8DTDL+TAcAJiXEMU2DNVXvI2IjltXBgQU/dYU5Dse5aC0Bu/ec34/4ylVHzA4rzzF6BtUllKzqomOAKd1rtfb4jPdv7AeT/kBk4pgKdiC8KtiqZKuF17QVwLEw/k1z5lmKC5NimDhs4UF6qPggPbv2mSDH58diIv7GAFByzTudTiV+ZveXr5FTgzg/k/8wmPQNUGfZM7KqKs1xcJav3sfKZ64/p/RY6WaLnqn8THh27XnSCoph1LpnFXOZMKnExPcjohoQst+ogs/H4GMb+8Okfw0wUVnYYnc+2zLS43cMdpW1BZaSPLP2SgpOqZUID++E3XK13jgmDzD83ZLQpqIeeyP6fb1ePh++Nsf2+8Ok3wO73PmI2LDkSnx295u49Yh7M5c+IjYsOhOdCYFBg8+pzsLjO0y8rEYBOXr8HVHfQ4/3p4MEi4HYj3oVnG2oi/GN3TDp90SJ+GztM5V+l6VXwnNMrOTTOgG2+kwAPQcmOs+yU8LzeejMPpT/ojgH2QCc/y7il9R4TJzh72YpwIjYGtyM/WDSN4TGq2rls3QdiKZkz6akMrKYVQnPtfDs4qtQhtw8ttFoVNXic5871QvYsoPos9ksbm9vYzabxWw2q4jPWQUddBRqpXkQZddf05Tsxpv0rweTfk9kKTYtH9XvZIU5daRnAS5im/DcsYddewZnELjeHjX3XG+vwh1ibxAe8wxubm5iOp3GdDqtiM+iHJOeyZyp7CrmqdqfxfT6t4l/GEz6A6AufkSkll4tep16D7BbG5HPpeeYujTbDceDdecNpOfON0xYJjys+2QyqTZMMML8/U7nq9lumXCIV46/szQkv+J+8nf0N665Pxwm/R5gcmq8zqQ/ZMuOwxZQic7xdDbTDucF0o/H4zg+Pq662HJOHgTjY4HwmEUIwqNT0Gw2q46pC2zwdSjhI2LLvS+l7fgecFFPKe9vNINJvydUbVc3PyKKllwJrv+uD7paeZA9m9rKJFIrz4Q/Pj6Oo6OjDdLz8XEcWHg0C7m+vt6w8vP5PLXKu0KWXSSFxQfqRDwT/jCY9AdCrb6691lcz79VUgBMeO56C8Kzaq6xPR9f580fHR1VhB+Px1uLVUTExuCCBh2w8NfX11VMz1ZeZ8WphqHXpYTV+5AVIGUiHvZp7A8va3UAMoGOSc7fqbP0ABOhFMPDsvPG89k1ngfpmfDs3nM3XHbvWbyDa399fV259fAukDXge6L3g68vYjMWr4v/+TVz5UvxfN1garyCLf1roETqujx8yUplFh4E5Bw5b9pIggmPXDy79kdHR5VrD9LjN9yZh1txIY6fTqdVWMHNQiK26wH0ermmIHPNd2kcdfeN92E0g0n/mmCia6pt1wPM70EOjt21GEaLYurieW6EyZaelXt8D8BsOrb03OL77u5uY4KMZiaydlvqwahXovcw0z34XungaewPk/4Nga1eEzc+Kz6BdUdMzRvEM62EYxcb8Tlce8T0sPCaqgNJQUItxtFCHG2+wVV+WoSE62KvBa/slTAyL8F48zDpD8Ah6jFbvFIuntNyIDqTLrP02AcTnqfKcudbFvC4KAfnpz31tfIONfJq3bmcV0nLZcI43yyez1x7u+xfD0z6PZCRfRfxmewR2+6qVtphpRwQDuS7vb3dsPAcH7N7zETMinFYwONzwTlgcOFB5+7ubiuM0Ek7PJBgQMvKhTk04P3ppCXN+5eEP2N/mPQNkRWLgHg61RMPvVab6WCh7i8vV8XVcGivDYurxTiZ5VXCa9ktT9nVSTV8XG6zjWPxKjjwHHTJai704VCk5NoDWb1+CXXCn1GGSd8AWdEM/mbiK+H59yULr2W1GsPj7zrC6xx5zs8z4bUCj89Fy27VtWfS8zFAfAw2mZUv1RLwPcrIu69XZTSDSb8nstSaWrGIrywod5UFGbCBBGzhVa1XC69xfEQULTxvSniNuZXwPKkGdQA4Fg8sSAniPV97xKsOumzpQfgmmggPqnU6AP42msGkbwhNPynh4e6DhLCmrK5jP+rSg9iI55n8WnnHBOCpuzx1lleuKU2fxXmoS4+qO6TpeH0+dut1YIGIp3P99V7hHHTgwjmxF1UnmFrwOxwmfUNkhTNZKSwefG1IEbEZP3OlnVp6HgjUk2DCw8LrarQgoqbm+DrW6/UG4VF9h8k1XH2HFF2v16uOw2vjIedfNzBC+Qfxm9xvDasAnsLMMPmbwaRvAH2QddILNo5XS00p4NrzQpTswvOWNbmM2O5Vr2vTaXqOz4UtMBfhTCaTajFOdu3hqXA9P6r8UN3H+X7u18eExz3UOQi77rVmKfi3pYIeox4m/Q7wQ8iFKxDbWGTLKtU0F69z4tna82dKFqBEeOTjswk12lcOAw8Ij9V3r66uqrJbrr5DyDIYDKpjcP4fVh7WnAnLg4CSVgdHtuzs2Sjpm5TtGmWY9DuAh5mr1OAG39zcVEp3tnglfs+DRtb9hglfcudLaTkmIcps2eWGBebiGHgYt7e3cXV1FZeXl3F5eVlZehbwIN7xFN2Tk5OqrBeKPa4L16yxPYMbiZQm6GgxUzZoWMg7DI1I38ZUCR6i5XIZs9ksbm5u4urqKi4uLuLi4iIuLy+r+eXoIKM5aH542fKxcq8pLS2tZTeWy14Rt+sMuqOjow0rj/PgY6D4ZzKZxOXlZbx8+TIuLi7i+vq6EvBwDojjx+NxPHr0qCL9yclJZeVxLZyhUPcc18KdgHUREAweGeH1/6aO8B4A6tGI9G2/idPpNP7yl7/Eixcv4m9/+1u8ePEiLi4uYjKZbE1Cqau4U/Kz9eVZaACTnYU0FtGOjo4qy8sz6LLKOBD+7u6umjKrgxgq/xB/cwz/6NGjODs7q8gPvQD75mtWTwXXw5kGbtWVtcdi4mfPoMt2D4Pd+x1YLBbx4sWL+OSTT+Kvf/1rJXgh7sVSzhl0ZpkOAFlaiq0hkx4kYcKXps2CjBGxES5wcwzE8ezW45rgSiOGPz4+jrOzszg9PY3T09MNK8/nrQMMD2LcVozXAeBKvqyeQVV8wAQ/HLWkn06nxYYFDxmsMn/88cfx0UcfxaeffhpXV1cb+XRGVvSiJC8VmgCqRnOVnVbacSyv4h3OndNkcOmh1F9fX8fl5WXVEQduvcbxIPzZ2Vk8fvx4w8p3Op0qRMFxOEThoh5cD6cX9XwjYstjaFLEw/9vxm7Ukv7i4iI++uij+P3vfx/D4XBjksRDB+LLP//5z/H555/HdDrdSmHpyjWcFmPRjEUuhS5+wdNTEZczUVi808k0qtbzVFlOzcHKc887XBsIPxgM4vj4OE5PTyvCn52dxcnJSbWyLRsEkFMr8Fj954yDuvglN561Ei1tLqEtz+ih2GnpP/zww/jwww8jImI0GtW6sw8FiFPX63U8ffo0vve978V4PK4sFj+8w+EwIqKqSINophZPXXhts8WVdbp0dFYQwwU4TB5W0rWFNRpcoskld8MBsXBdEOxAeFj5o6Oj6lqRceABpmTldUYe7h333GeFvs6114FmH2/A2EH69XodNzc31d93d3df+wl9F8AW5cWLF9Hv9+Pk5GTDzT46OqoeZoAfPk1ZwV1V952JztNfEU9ntfRKdm1uyYU3aGyJPDwsvJbZ8sAzGo22CH96ehrHx8cxGo02CnFwrbq+HU8K0ll5mWu/XC63KvVKhK/bjN2oJX2n04mTk5Pq79FoVHRTHxpA/OFwGLPZLNbrdfXAwhOI2Eyp8e8Afhi1V75aPaTbMvedya5NLdm6w8VGSg5i3cXFxYZLr73uEBogDQjSQ8B79OhRjMfj6Pf7W4U4Wm/A9fqs2HPJMEgP70jz8Hz/MCixop+Jovi+UY+d6j0/xDzjqi1ATMzEHY1GERFbljrilVqubbHxCosKy14S5rjiTT0Azm1HvMrDcyMOKPRIySEPzyW2uCaQLxPvoNYfHR1Vlpk1C54lyKvtZLE8zwfge8YeEJDl6rVoJ/s3YzecstsBEInj/IjYmuwCCwiLP5/PN6aRRsSGhWfrnhXYsLXnY3DsjgceVhcEhFufWfnb29sNS4z4HFYe4h2n50D4wWAQEa/y6NlMQY7n+T7pirncrquUh1foIKCbid8MJn0DaJEIE56nloIIIDeLeGzlEa9zrp1LW9nKl9x5JjxX+CEth5Qc8vAQ7rjXHUinbj3ceRCec/9MeJ4dCC9QO+xkLj1nGUpuffZ/wFY+m9bM6T6jDJN+B/hBA1CpxukzJv1gMKjICKjqrzXzXGDDFp5bUXEjS9ZWEMdr4Q2r9NxjD4NQVlfPhNdFMXAvQHidHajddZBuBPGZ8Co+NrHSPNBxGXOWITHKMOkbAhY2m79+dHS0VeeuLa3Y6g0Gg4rYmTuvhOcKvYjNabpIzfHiFJyH5xie5/zzIIS6ehbtoNTrXHxt7cXttLBvrjPAAKer5PK1lMgK74izBDzwZGlCE383TPo9wO65Vsex+8sPn06U0a4zmTqf1aZnJOHCG15zTtedYwEW+wIZT05O4tGjR1UMD8LrpB0OJbRvH6f9uNRWCa9Wvi7frlNnORXK7j13B9ZiISOHSd8QnFtn0iMWRsWi/obVehbwQAJ+xXfgFWgMz+4trywLC8/xO8+WyzwOnDfIzko93HrtmMvWHb0EuJIP1p09ItYmSivgZBaaCc8iKguInLHQ+QxGGSZ9A2gxTanVNJNUi2+0P7xuXH6rLrU+7PP5vGpeqYLd1dVVVVrL7jwPJKi4Q/HN+fn5RgEOV8rBtebmmaV17aDu4xpg5Zn0XLmoLrlaeX2P8+Epykz+Ns4TOQQm/Q7ow6eda5j47L5mqaqM4Dq1lLUBdlXxYIN4mBqLlBzSctz1hivteMILVHoQ/p133tmoq+cml2zlQXhd6ooHOJBfq++Y8Hx9fAzcZ55KHLG9tn1GeMf0zWHSNwATXh9KnQHH1jtb/YXJDvB7zRaAEGppIdZx8c3V1VWl0oPwEbFRbQfR7vT0tJpEc35+Hqenp1sFONgQu9/e3lYbF/iA6FkdQlYqzCXKmYVWt15nL0bEhqCoffWNepj0e0BdfHX1sxlk/ODrXHkVp9T68Tx4trTo4sMu/WQyqawviokQX8MbgYWHUs9xPNR6pOZYKOMlrnTlGxbwWC9gz6bUmDMT4CI2ewyqes+k107EFvKawaRvABWVMuKrO6/k14c/YpsALEpppRv3pWeVnqfHzmazWK1WG0U38EBQC6DVduirx912WCzUhTR5YAEZM6Gy1Hq7VFjDVYvIerBbz6W/8D5wHhrTm/D1MOl3gGN6jr9VXc8GBHb1s5ZQOlkl64HPpIOVB9F5UYr5fL4h2nHjTFh3uPXc405z8YjfMdBgsOHjaJdcPl62uIaW7e4jwOkgsVwuo9frbSn3mcdg5DDpd4CLTDhNx22etIyUPQMGu/OsxDO5M8vKqTm84nMtjOGCmywHz648hx16Try8Fbv0iONZn+BJR7vKhTUGr6ub17JbaBWoQGSPw6Rvjp2kZ+s0GAxaN7VWO8igkQSsWua+6sPMJbxat4622hmpeSFJ3pAfZ/EKgxNcedTQaw6eF6hgdTwTC+FNZH3wI6IKBzQToYId6xK63Dbuib6Wwh7u7oPPlewmfj3cRKMBnj59Gu+8806cn5/HkydP4vHjxxsdZNhKZgo9TyphcQylsyiu4V76IDxXv/HadtyKCnMBuGvt6elpnJ+fVwMVBittXqG6AgYhJr2udoPri9j2anQmXDYLTyfIaNij3gHvAxOaSgIezskoY68mGuPxeGMSyUNFt9ut3Ngf/OAH8aMf/SiePHlSEYenm0a8ioOz+eB4SFUg0yaVHKsjfuaa+dIy1XCtMXEHqTjueIPz5ao4nDcIxqIdBEMeeGDl2ZJrCMOqP7vkOikHx81CIJ1IoyEBBlY+BsOE341a0h8fH8evfvWr+NnPflaJM21ynVarVTX/nItvtKCGVWWtGGOrCBKg7zzy7dxWm+NnFbvYMiKW5hly3LUWhEfHG7XwOmNOhTvWGHAeWq8AYD+4RtUH2LXHcblqkUMG/J6tO4cFXL+gFXxaBm3kqCX9+fl5/PKXv4xf/OIX39T5fGcAEeqLL76Izz77LK6vr7dyxLBceCh7vd7G+nQ8Qw5EAJFg2dnSq0IOa8fnpK22INghdgfpUVKbLWTJpGKyax4eJONzUEvPhMfgx4RnS837QRik95sVfrbwKlhyio91hZKIarzCTkvfdrz//vvR7/fj2bNnVR4c5IBbzLPY+v3+BuE1Fcbr4WnqDe48W8SIzY6ymo7L+tnBncfsPy7tZVKxO8/pP70m/J49DJ19x1N9S4TnNB/Q6XQqcY5/rwt6Ziq/zinQtKiRwym7Hej1enFychLvvvtuJWrhQcXiEExULs/ltBW79pwO48IakDFzgbkARheu1NZW2So3HH6wkKiltSBrxGZtQsTmKjW4LnyXtQFOReKYTHiecozP9fc6cLDXk5VCc+2/rXw9vIBlAfzgDIfDOD09rR745XJZkZ+rw3iKada4EgJetjHhIzabdqCyjmsFINyh0CarrFNSciiS1QPounyc1mO3mUMWni2nMTgLj/w7tcY8kYZDDwxQbN2zZial3gNGDi9guQMQy/DgLRaLramnsJxsibi+Hr+D9YKVZZKpK8+Vbtw5V608L2mFQQnHg3vOZOJioFIzDNTrs8CWFRqVKgpLhOc0HxOUNQ/NyWcCZqmdNg+0bX5md8Hu/Q5o1xsmfJZPBmk0b635Zi4qUSFKp+/ySrXabUfTcCyqRbwqkNHyXiY6EywiqtbUpRy8WuTSPjWG5xQjro9FOZy/bvp/wXMKspl8Jnw9TPoGyGJHrcRjVxQzzzi9xIIXPmeXtxTDszXjMmAmu6bMtPyVi2M4BcdWVMVCHoCya+AJOfAWOM0I8OzCbEIOhwkAF/jw/wFIz0t9aVceC3m7YdLvAOeA1SWN2F5XjeNcfM5pL435uUSXj6NTc3nmnmYFQMSMoJwr11p1PiY8GF6IQoVI9PJn0Y3DBd53NhmHF+/gDrts0bMafG4wwt17swHQln43TPoGYDdXc8Gl6jT9PSw/i1mq0jNR2NqzS4xjsPuu7ndm4bPyXc0y6CCjIQN7FTojUPPo2B8TnsVGtvIICVSE0+Id1ja09x4PhEY9TPqGyAieCVLs1uO7XCPPlowFKk1D8Qy2zLJ3Op0NN5pr6FU/KC1EEfGqjl71AxYFI2JDVGMPQr0HXAf2hSwDXrXpJkIiHnz4PrDAqT0JeaagrXxzmPR7InP3YTH5oY/Il1fmASFiu0uMpsXwEGthCt7D8nJhS/bKXgULfyoYcq99Pl/OQmhajmff8Ww/FA5h4xl+2CcGluVyudVDkKvvVBOwgHc4TPo9oG591jmHY1N+zfalr5m1YpdddQNW0jnlpRvOgSvpNObmja281uhnpOd7k7Xmwjx+WGlOd8LFZwJjEMJ3cO66Fl7Jwpv89TDpG0AfIrb03B2HLZPOodd9laam4vuZFVdi67RYfs+Djg4s2refXfpSAwydOKP1Bfitromnbbm48SbrEovFotIUeGINlwBnK/+wzpHdb2MbJv2e0JiT425YeritEZGSD/vRVyU7pwJBDE0P8qDAx+Pj8Pmpks6xMU/Kyerg65ajRu5cCc8LaLBrj7QmXHsMRCh+wr5Z9+DFQFj0M8n3g0m/B9giq+iGGDSifn02RSlG15y4xuhs0bOKPiYjW3fMzFMxTC08E54FO7byOAb2zyvwslvPVh73iWcscgNRdGeC14Rr5EyDEl43ox4mfUOwlVaVmTctzInI43t9OHmgUOteEuZYZGMxMEv5gdyZW89iGM5Dqwd5UhHuR6bUs3gHsvP0Xh5UEMtjWjJce64jUAWfhU0Na0z4ZjDp94Sm7bRoJyO8Cgu7DzgAAAiCSURBVHAK/Y7WoHOpLFt3gI/PZaoszvGaeVl7bg4v2Mpzmys+Lgp62MqD8LwSLxOeqw9hvTFIqbXneQNcJxCxXR2oxDf562HSH4BSvr6UNtKYWy2/inZ4oFmoY2vHr3jPRTzZZBReJ56Vb15qKivsYWJxyg/uN/ZZWmo7axXO+oamPuHes7WPeKXis6bBWzYYGjlM+j1QSq+pAp+l3CI2XfisSIdTcWpVS9AsAltxJp+SPasDYEJpq2pcF4gO4nLBDEKHbCkr3Au8KjlL4igTH++1Zx4PEib9bpj0e6Lk3vN7qPdq3TXHDpSEKE3raejABClN0NElsEtCmGYL1NpyHp6LkLhWX8thOVzhgVE9Gb2/pVoFvPZ6vY0UYqmzjpHDpD8Apbx9ZvnZpQUywuu+uYgG8W92Hkx4tvQat2tOu6QjqFjI1we3HmKl1ilwzI1iHh4A+L6xCFcX8ui54Vy0FRefL+/H2IZJfyA4XZWJeUwqnjSiFrtpJZkODDw4ZJV1GkvzPjSEKBX+qGqu9fiqY7CnMJ/Pq/PFPrXoBwNDVmyUDUScs2fCc92Ayb4bJv2eUAuuQhTSXYzMUvPDn1XpZa/8Wz4XTtFlRGfNAJ/h89KmYQY3DlFREdesxwQpOUOQNSBhN103/pxVfLXwJnxzmPQHIiM+55R1Bpz+lq0WPtP98ueZmJdlDyI2iQ59gaH6QqY9sDXn6jlu0oENlYKabhwMBtVEmqySTpX4rLZf43YU7Fi4Oxwm/WtACb9arTZicZAp4tXkEnyuLveuzABDH3QlO16ZYPr7Uhyt38mOyR6B3gvWGHQiD2cOsE8OB7hvH/f/5ywCD6x87FK61NiGSX8gSrl6JbFaefwbSMMPKmsCdQ8xW9qI7RJe9g5KA4ael3oc+G4pxtZiIR0AtV6AFf6s3JdJzzX+ulCGahs47133zHgFk/41kFlndqXX66+aQ2iMnw0S/Dk/vOqaa1ye5ftLef2M6JxGK6XKYGWzghi1+Coq4rvcVJQr85T0/Jo12cTGGYlsiq3JX4ZJfyBKwlFm+VUEUwuvv2UoUZvE4/xd/S2Og1cmi3oGPINPl/Bi5Rz7ZlGRBwXOEKilx/dAdm6lranDiFez7Th8yKr+jDJM+j2REWkf5VhTdrzPXfvIyK5FKU32qyk/PifWBzgdprPslPQRm9WBpWuB1oD32A866+oxeKDi6cG70pNGGSb9AVBrqwLaPiQuWWd1s/HKZM+Om8X6+H7EZuwOT6Sk/pcsPAtrXG/AtQogKSv02DfrHdxvT2P4EuGzVuC29M1h0u8BJhWTjavLdpGx7rO64/J7LazRc1Oy8+81c8AxPe8fIp0KatkEF46zs/RgVnqMe1XKx2eEz9YA4C46JnszmPQHgAmnTS3U+mvBiwpxTctHS2o9I1Pq4bZnxyjpBXxdauG1ICbTAkBULlzi4/FAWZotx/vJLDym7OpCFyb+bpj0DaGEK5WxqhXPYu4SaUvaQGlQ0GyBxuTYuCxYBx29Jm7ekVlgXGdEbLnyKq7xxrqBehO88bVpiy/tn5/N6LN7vxsm/WugiYWO2Fb0WcyKeOWC8wOr5D7kvHTg4WOpl3EI4TUnz914eDovp+hQQlvKXkRszh7MVurlhTuzdl+H3LM2waTfA5koxpVosLSZlcWEE/xdSrnp8fTh3eehZtJzgw4tuGGRTYVErRfQa+a5+zynnpfJUrW+2+1uTMjBfvm+stfATTyPj483eu95Wav9YdLvAbZE3AEWpOFim7pwYF8hj6HWrPSQl3SFbOaaTnDpdDoVOZfLZVX6qqKdLjPFy2mjs66W3CInj863nAnAINntdje8h4z0Z2dnldVXj8Koh0nfEOyew4KNRqPKVcVcc7XYmaquMX0pludj8zlkf2ciHnsTOn02m9HGte5ZAU5EbF0/Ez4T1+D5aE5eBUIGl/DyQDIcDuP4+HiL+CUX38hh0jeEurTj8bhKf8FqlVz0fV71mPpeiV5y9+tceZ3ZlrXIYgvMcbymz1RNz1pl8cCTTaXl+6aufZamQ2yPDf30daKSkcOk3wEV4RC/In7nFVky0jdx23el3oDSNFz9DXsSHMtn3XEy8utkGj6vUuNNEE+VdD4P9TC0dl89Kc4CcAVetoilrXxzmPQNgRTSYDCoYltMplFyMOrc9l3HK32WeQDZcUtCXimuL6UeIzbVek3NaSlsNkmI96uDCouHehzWT0rTdnU5LhO/HiZ9A3DJKpZl6na/6vuuD+7rHmfff29C+qxuQN3+UhERwMUvurqstgur0xeygiW+Fia+blz0wwOBC3P2g0nfEFx5xnXlb4Lwhz6sdb8rZRFKA0FJZMRxmJBaZ1+a1tr0HLLj7Np2Hdsoo7PjgXUvov+Pugf328Cuh/t1BUUlI16z7IGej+oLu84hu67S667zMDaQ3hRb+obQh+7bIvshyM616WeMOi1h30Eo+3yf8KWJrmHksKU3KuxDeuOtgC29UQ+Tuh0oL5JmGMaDhElvGC2DSW8YLYNJbxgtg0lvGC2DSW8YLYNJbxgtg0lvGC2DSW8YLYNJbxgtg0lvGC2DSW8YLYNJbxgtg0lvGC2DSW8YLYNJbxgtg0lvGC2DSW8YLYNJbxgtg0lvGC2DSW8YLYNJbxgtg0lvGC2DSW8YLYNJbxgtg0lvGC2DSW8YLYNJbxgtg0lvGC2DSW8YLYNJbxgtg0lvGC2DSW8YLYNJbxgtg0lvGC2DSW8YLYNJbxgtg0lvGC2DSW8YLYNJbxgtg0lvGC2DSW8YLYNJbxgtg0lvGC2DSW8YLYNJbxgtg0lvGC2DSW8YLYNJbxgtg0lvGC2DSW8YLYNJbxgtQ3/Hv3e+kbMwDOMbgy29YbQMJr1htAwmvWG0DCa9YbQMJr1htAwmvWG0DP8P2C8QuzJDaQ0AAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 24; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 25; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 26; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 27; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 28; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 29; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 30; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 31; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 32; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 33; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO19O29k2dXdKrLeb74fPTOCNDAES4ADQYAiQQIMB1bqTLnhzMkX+R849V9wMoCzL1GmyJEES7ATyxIGo+lmN8niox4sFqvIIqscNNbhurtOsR7Tn2am717ARfNRvHVv9V1nv9beJzOdTuFwONKDjW/7AhwOxz8WTnqHI2Vw0jscKYOT3uFIGZz0DkfKkF3we0/tf48wnU5xdnaG3//+9/jDH/6AbDaLXC6Hp6entc6XyWRwd3eH4+Nj/OY3v8FPf/pTFIvFD3zVjn9BZGI/XER6x/cA0+kUmUwGmUwGk8kEf/vb3/C73/0OhUIBxWJxLdLzfJ1OBz/5yU/wy1/+Ehsb7hh+DHDSf2SYTqd48+YN/v73v3+wc47HY9zd3SGTiRoOx/cMvnR/hMhmn9fyD0HUQqHghP+I4KT/CKFuuC4Aq56Df5vNZp30HxHcvf/IsW4SbzKZgBLtdc/h+G7CLf1HiMlk8m1fguM7DCf9RwjPsjtegj8dDkfK4KR3OFIGJ73DkTI46R2OlMFJ73CkDE56hyNlcNI7HCmDk97hSBmc9A5HyuCkdzhSBif9RwjX3jtegpP+I4Rr7x0vwZ8Oh+MD4p//9zv85r/9T/zH//6/0B48fNuXE4X30zscHwiX/Xv80//4P3icTPF/z26wU/l/+K//4d9825c1A7f0DscHwmj8hMfJ8wDp/ujxW7ya+XDSOxwfCJ9ul/GffvUjZDLAYb2I//xv/9W3fUlRuHvvcHxA/Jd//6/xT//ux8hnv7v29Lt7ZQ7H9xTfZcIDTnqHI3Vw0jscKYOT3uFIGZz0DkfK4KR3OFIGJ73DkTI46R2OlMFJ73CkDE56hyNlcNI7HCmDk97hSBmc9A5HyuCkdzhSBie9w5EyOOkdjpTBSe9wpAxOeocjZXDSOxwpg5Pe4UgZnPQOR8rgpHc4UgYnvcORMjjpHY6UwUn/EeJfYqvq6XS6+EWO7wWc9I6FyGQyyGQy3/ZlOD4QnPQOR8rgpP8IoFY4m81iY+PD/rfe39/j8fHRrf1HAif9RwDG8KPRCO/evcNgMPgg5yXJ9/b28Pj4iLu7u/A7j/G/v3DSfwR4enrC3d0dTk5O8Mc//hGtVgu1Wg0bGxvfiJz5fB4//vGP8fOf/xzT6RS9Xg8PDw94enr6gFfv+EfDSf89xnQ6xWQywdPTE7rdLr766iv89a9/xc3NDUqlEnK53Erny2Qy2NjYQDabRaFQQLVaxWeffYbPP/8cjUYDk8kEDw8PmEwmmE6nbu2/p/D96T8A+PC/RIIPGQ+TcCT9aDTC9fU13r59i1arhcFggOl0msi6x64tk8lgc3Mz/MuDpN/f38enn36KV69eYXt7G/l8PvHe3xV4rmE1OOm/AZR4PBR8GPWhtA/ovAc2RlZ+re/38PCAXq+Hy8tLXFxc4ObmBqPRCI+PjwCAzc3NhDtOa65Ez+VyyOfzKBQKKBQKKBaLqNVqODo6wueff46DgwNUq1Xk83lkMplwz/ba7bUue6+LEPsM7L14WXF5OOnXhLrW4/EY4/EYj4+P4aHUB9E+lC99TejX1rJPJhM8Pj5iPB5jMBjg6uoK7969C1aei8/m5mYgH6+LJMlms8hmsygWiygWiyiVSqhWq6hUKqhUKmg2m3j16hWOj4/RaDRQKBRCVeDp6SmQ3l6b9QJi92nvz/4sRvKYh8FQhN7JvPM6knDSrwE+4I+PjxiNRri7u8NwOAzxLvD+geRBi6RfkwTWUs2zWCT709MTHh8f8fDwgOFwiF6vh1arhdPTU3Q6HTw8PCSsOIBg6fnzbDaLXC6HQqGAcrmMcrmMer2OWq2GarWKWq2Gra0tHB0dYWtrC8ViMWHhlYBPT0/heHx8DL8nXrq/2CJgiW8XFD0/w5BCoZAIVRwvw0m/IpTww+EQ/X4f3W4XvV4P9/f3wQJubm5iY2MjESvze10A9Hu7KCiU8OPxGMPhEIPBAJ1OBxcXF+h0OhiNRgCAXC6HXC6HyWQSrCHw7A7TnS8WiyiXy6jVaqjVaoH49Xod29vbaDabqFQqwWN4enpKhBhcfB4eHkIt33o79t54X/MWg5iHowseSZ/JZJDL5VCpVAAgfI6xsMKRhJN+RUyn02Dh+/0+rq6ucHl5GUhHotGi6sGfxRaB2KJg31et/N3dHW5vb9Hr9UIcP51OA5kfHx+xsbExQxR1ifUauRDQzeeRz+cBIIQxmUwGk8kE4/EY9/f3wcsZDoeB+BpKxBY16+Xwd7TUeu8azui9bG5uolgsAkC49lWrFWmFk34FkHgPDw8JK3t2doZ2ux1Ir0TSgz+LLQCxw2bf+fDf399jNBphNBol6ubZbBalUgkPDw8A3ot1xuNxsNBKfBJL3eWNjY1A/EqlgmKxGIjE+55OpxiPxxiNRhgMBri9vUW/38fd3V1IIKq3owsc31PJr4sPvRB7fVzs9Nz0ZPL5fDSscMyHk34FKOlvb2/R6XRweXmZsPQAAukLhULIitMSkfTzrL9dCKzVsw84iVMoFFCpVHB/fx8Wgc3NzUBEWmBN7GkykrkIXnexWEShUAh5AVpaLjqDwQA3Nzfodru4ubnBYDDAcDgMC4zmD/Q+NHandefnws+If6OfOZOlk8kkWPlcLpew/k765eCkXwEkCZNog8EAd3d34RiNRiEzTrfYxrU86LZmMpmZkpqNb5X4GjowGVcqlVAulxOWn+dUIrCMFys10mXmtXOhIvm0UjEcDkNoQdLf3t5iOByGc2kYYV12vRe9D4Ym+Xw+3CfDqfF4HO4tl8shk8kEL8at/Gpw0q8ItY60oLEHT+NZGzfTusWSfDa2p9ur1lm/14Ta/f194hiPxzNJQUsOG38r8XiNTJCRgPf39xgOh2GxGwwGGAwGIZHJ8/HaSXibfed7FgoFjMdjlEql8Bpacb4nE4ZcpHK5XPjsnfCrwUn/DWCTUCp2YSmpXC6HOnihUAiurI11Y+fRWFeJk8vlAqGB9/E2iVgoFJDNZhO5gJdq6GrdS6VS4sjn88Fa081Wi//w8IDRaJRYZJ6enoK3AzzH7ySnipj4Ok00qoejlp7Wnq+NLbhO/uXgpF8DVtVGKw68f8gZE1cqlVAHZ4ysRIpls5X8+jpr3bkYMLFGkmqt2hLNCoc0cVetVlGv19FoNFCtVsM109VWBZ6WDtXtVqvL99WvSVK+jt6A5gB0MeTf63vxb/U99d68ZLcYTvoVoYSh257P5wM5qHKjsq1cLqNSqSQsvbrsVpQyz+qrm85kFvCeEDyvJr9itW3N3udyuXCdzWYTOzs72N3dxfb2NhqNRsje02IzH2AtPQ8SEni20Hy9tdaq6LOk1zwAz8PyIJOUk8kkhAQe068OJ/0asNaY7jxdexKdwhe19BonL3N+GwIACIRhyYrn5KKgltHGvSQau+iazSb29vZweHiIg4MD7OzsBNKrlec5SHiWDdWtt3p8kpkLkF6TWnG9Ls3cK+n5XvxbXWi0JOlYDCf9irCWXstNGhuXy+XgJmuMbOvQAGYe2Jirr5aebr4NEzTppYSPiXNKpRJqtVqC8Ht7e9ja2kK1Wk2U6/ieKj1mIo8Vg/F4DADhb6y6jtfA0IBegdb0Hx4eEjkEhi+aO2DpkQIkJ/zqcNKvAa0xk+jj8Tgo4mxCrFwuhzKYuvaEzWrHYnz7N/Z7bcJR11uTXyQX3fqdnR3s7+/j6OgIh4eH2N7eRq1WC249ic6FQ3sNWK5kz8HT01P4THh9VhZr1XW8942NjXDNJD2VjZPJJFGR4N+ppXfCrwYn/QqIJd3U2gMIbrweJLyN54H52fV5unR9wLXpJVa2I1lttrxQKKBer2NnZ2fGwmvyThtrVO9/c3ODm5sb9Pv9QHoAIf7XsiPvLUZ83gOviwsW5cNcdBhKaEOTuvpu6VeDk34NWA07iQQgIWyJqfCsq25VctqTb2W4+nolD91fHiSExryM+enak/Q7OztoNpuoVqszFQB9D6rwut0uOp0OOp1OIL2eH3iuv8dIb+/l6ekJ2Ww2URHQzD3Lkbw3wuYGHMvDSb8i5ll6Tou1GvuYvt6SWTPdamH5e2KeZdcYm5aXhNC2WmbtS6USGo0Gtra20Gw2UavVwngtFePw70ejUZAdX11d4erqKpD+/v4eAIInowsiz0OrHQtp6Mqr4IlhCIBE0pAh1Obm5gzhvUy3PJz0a8A2izBrD2DGos/rMLMPqbrvevB3wGwfP91tNr0MBoOZLDehZbparYZGoxFq8tSxa1WBZKWFZ3NRq9UKvQa08pp8s4lOLmTzFjq9V5JeFx0ubIz5gffelK1IxD5TRxxO+jVglXjZbDYxnmpe8k3/PgYlgI1V1fIyvu73+zNNL6PRKKG912tlkrFer6PZbKJer6NcLodMvSU8uwm73S4uLi5wfn6O8/NzXF5e4vb2NmTsaeV5rboYAs9JPZ47dr+W/FzctL6v7cIq5bWVDcfLcNKviFiXGIlP1/OlGryN4e1hRTX6PQnPDPrNzQ2ur6/R6XTQ6/WC/t1OyqG+nRNyms1msPJaUeD16ftwZsDZ2RlOT0/RarXQ7XYTswMymUzobbeaApvAU1LrAqDqPS3n2bKjNifFvCjHYjjp14C19Jqpjll5JbOS3f5OE2eqLdcuM2rsb29v0e12cX19jevra/R6Pdzd3SWUcbwGxvEcg6VTcVieU+EP3frb21tcX1/j/Pwcp6enYULPYDBIuNo2FNHPQMmuIh+70BExT0C9Ht5TTKrsWA5O+jVgY3N2hAHP7r2NX2MPOH+vljxWa9fsvJbNmEm/vr7Gzc0NhsNhIszgwcQd6/Is0VF1x+Qir4VWnp7E+fk5Wq0W2u12CCG4gGnuwLrY8xYxTdgxfreweQ2eVxOoPNzSrwYn/ZqwWnEbv9pMtZaurGWzhLdZeWbm2cLa7/fR7/fDqKyYa8/ryuVyoTx3eHiIo6Mj7O3todFoBNGQWkm69nd3d+h2u7i8vESr1UKn0wljuWjlrfpOs+4kq8bkesz7LBZBLbwdPeZYDk76FWAt/EsxfaxEZWvWNmutjSVKdGbn+S+/vrm5SQzwoESV15TP51GtVrG1tYXj42N88sknOD4+xs7ODur1enDt7aAMrclrzoBlM1t3t2U6novZdxUNWe3AIhmteg/6WWtZ1C39anDSrwFbq1fS8yF8ifyEur9KeEt2VcCR8Dq4gmRSHXs+n0elUsHW1hYODw/xySef4NWrVzg4OMD29jYqlUqitq4LEMeBMXzo9XohdIjp+LX3QBcQ7bmnh0D5rMboGrPHNAr6OdpY3q386nDSr4kY8WlldfDFIqtvhTYkvJKdbvzt7W046PqrEAdAIHy5XEaz2cT+/j6Oj4/x6tWrGX29tuNqdpxDL/m+w+EwsZmHuvIkvHb7Ac+DNLkoUT9gN8DUKkUsjrdahXktx27ll4eTfk1Yy0PS2WGXMfJb0qtFpIUn2bvdbrDutPB2Eq4m0lieY6b+4OAAx8fHoW22Xq/PyG3VslL4oyGFhg68B7XwOkiTjTo6RJPXStIrqVWByM+DBNYhILHP3UU568FJ/w1grT2AhKW3/fD24dR4XuP4GOFJdp0gY8dMUYBTqVTQaDSwt7eHg4MD7O/vB8LHxDgklWbuGUrQrVeLSwvPbj1uh6VDN7QCQbJrzZ0iG+ruVXCjHXjLNNQskwB0PMNJvybsg0gCaUkp5oYqeVQIQ9fexvC3t7eJvnXtISfReT4KcGjld3d3sbe3F7Xw2ivP+6FLzo00uNBogpBW3u6Ow4YdJue0GUiz9nYzDAUtPUMlHYf1+PgYPKpY3O9YHk76FTBPNkpYYYo9+BpVn6m+3MbySjztjQeep83ynOyTr9VqM+Ov2FBD91s74jSBR3mvvj/bWTWUoYXnTD027bDTkHV8rUow76BeBd9fr0N/ruIkfs+EqYqaFnkCjiSc9GvACmr48MXq1vawSjy7Nx1JzwYaJtGY8QaQcM01W18ul7G1tZUgfL1eD5l6KxzidZD0uokFy4FKer6PLi7s1KtWq6H7jZp8LiR2Wo5i3rXooqGDNHUxUBWjk355OOlXRExBp9lza/kXZe7Vtdc6PCfT6DAMS3pNqHEwxvb2NnZ3dxN98jELr9ei++P1ej202+1EmY73Qjkv9ftcXLiVNYCQkNTza4xOzOs6VE9AvQOV8urn59Z+dTjpV0CszKZ1ZwAz1t/Gn9btZQKPWXu69Jo1V5eehNc98nSq7e7uLnZ3d7G1tTVTmpuXSKSn0ev1cH19jXa7HdR3JL1ubd1oNML77OzsoFqtzkiR+Vno/dPTianq7GKkJUTNAyjprZbfsRyc9EtCLXRsE0ngeTS1ZqTVDVdtO/9eLbyN4xkb8+9pHVkm0y2t6vV6SN7pRNvYXD4bx1Nn3263cXl5iXa7jX6/H8prdvgGLTw1/KVSCZlMJiyCzGHMS3ba6oZq6O3nreeI1fM1T+DEXw5O+hWgGW7W1Nlxxuw5Y19tVdXxUzZDzvJcr9dLlOfoWrNuzSEdWi7jxF2629vb28GtVysf62W37bPtdhutVit00jGXwPfkyOytrS3s7e1hf38/zMi3vfTAbKIOSHoqdoYgr5PhBv9WvaSYpxJLqDpehpN+SdiSFsna7/dDOUkFLGrVlQgUv1Db3m630W63ZwZhqHKN59MYnq2yHHvFQ8df2R1vrLdCEU673cb5+TnOzs5weXmJfr+f6Jcn4be3t7G/v4/9/f2QKCyXy9jY2EjMt7PgddPzYahQLBbDIE67MFqCqyJP/0+c9KtjKdKn+QPVOJw95nSDr66uMBgMMJm831BR6+jj8XhmXzldNPr9fiD91dVVcKmZvLP7vNNKkvAsmbE/fmtrC41GY0aAEyN8rF/+3bt3ODs7C+2zXHA4bYf5AhX7sEw3nU4xGo0SIYS63baUScKXSqWENzKdvp+6ywXCJkF5P1Z6m+bncx0sRfo0yxyn0ynu7+8DSS8uLvD27Vucn5+j0+ng/v4+PMjlcjnEtcPhcGarZ516w9ZYbWrR9lhLGKuCo0tPC99oNBK76WiCzJbBWJprt9s4PT3Fmzdv8PbtW1xeXuLm5ibE8lxgmKnnphi7u7toNpsolUpBWad5DU1mAs871TB+J+GpHeC23jpkRIlNUU4s2+/WfnW4e78ADw8PuLi4wOvXr8OMuLOzM3S7XQyHQwDvE1OVSiXRFquE17KY6us1W08LrwIcldayDl+tVoMgRi18rVYLUljbSMN/mYDkAnZ+fo43b97g9evXOD09Rbvdxt3dXXDDqeHf3d3F8fExjo6OsL+/H2bkM8+ghGeS0lYdeE3MRfCgRzKdTsNiw5BIFXgvNS7xa/6bZiO1DF4k/d3dXSqFD3zIAODLL7/En//8Z3z55Ze4vLwMeng+6Ny7Tifc2GaW2LhqHtSlM4bnZ03rzgw91W8U3+zs7ISxV3TpbXlOs9ssyzE8abVaODk5wcnJCU5PT3F9fY1+v4/xeBxi8Gq1Giy8Nu0wSUgrT5Kp7FYHetCt14WL+/2xtVeHamSz2ZAcXfT/RC8mbc/oN8GLpO92u/jTn/6Ev/zlL4ldTz52kPSTyQQnJyf46quvcHV1FWrnmpAqlUoJfflwOAzyWC2L2fZSHioyAZ7HXNGV5zbSWoOnnp61eFpMDpVQwqs73+/3Qwz/9u1bvHv3LoQpDC2A99NtWfdnl97h4SH29vbC+/EedSaAljHV0rMkp7v56qx9Wnf+G2tO4uep5Tut4bt7vzwWWvovvvgCX3zxBQCE7YE/duhgh2q1mpCY6mYMhUIhIRN9enpKJKVIeO0249d8aPU9YxaRsTvr7zzo0usW2EoWEoIZeuYjzs7OAuHpuWjiTtV97MU/Pj7G3t4e6vV6cOtp5flezGMMh8OZCTvqsZDwnLfPBp1MJjND+Jglj8mfXaCzGl4k/XQ6xWAwCN/TEnzs0P5t7uKitXcdmsGHmg8vLaDqxm2nmQpMGLfTStPK0pXf3t7G3t5eKJHRneee95xYo118qrKz1v3k5ARnZ2e4uLgIpTnWxWmRy+Uytre3cXh4GCw8vQqGLpoc1AQlOwKpuWdjEO9LW3Gpa6BXoDkQPT+9FiC5Dbe2GbuLvzxeJH0mk0GlUgnfFwqFaNPExww+1NxoQTvmWF6iCo0PuerF+VBqD7y2xuqmj7lcLoy40l54bZ5hPBzb697W4Pv9Pi4vL/Hu3btEwk5DFSU8lX71eh27u7s4PDwMiTtV93FIhtXt81CNgTbp0NJz+27eO4CZe9CWWlU3xnbl9S2rV8PC7L1aPc0spw1WQ66upW66qISgtde41yrU6M4Xi8VQd2fijJNrbbecWnc7iFJr8FdXV3j79i2++uorfP311wnCM8PO6+D5SqUStra2wqjs7e3txNZXKq9Vj0K3r57XmccyHafsMDvP69AmJn7N9+BisLGxkciJ+JbVq8NLditAHzz7M10QNQ617qkKVbQllpp2zrPTIZbMzuscOnXnNd6l1e10Ojg7O8Pr16/x9ddf4+TkBFdXVyFcUfUgM+hsmWVIESO8Lng68YeE1802tAOQ6jtdtHguqyMg0XVWPhcRAInZe1r5SGOlaR046ddArEfeNn7Y+jFJTtLTnWbCbm9vD0dHR3j16hU++eQTHB4ehvIYCW+tO8+vrvZoNEqIiF6/fh2Sdr1eLyH+oSXWaThMGjKG191sNcGmyTsSXneW5QJB0vOw5+LiocM2dAGwHlImkwkJUbr5vm31anDSrwg+zCQxoWoyfUD19VTJMXZm/V0HWLI8Rgtvk3UxL0MJz8Td6ekpTk5OAuHZKqvlQb0nxvKq8Iu15ZKE1CQwjmeDDj8HLdPFCK/5B5uYU/fe9tEDz81C9vCYfjk46VeEDqGkrNSWmPg6El2TZJTrsnRFsc3+/n6QuHLEFS08qwMxNRoJr30B5+fnQXTTbrdDDK9lLp3lVywWgxaAFQKr37dxPAd/8OD5NTlpm2pUQ2BnEqj11my89gzwvukZsNfBjuJyVd7LcNKvAC2vURqr1l4fNva9s2GFpaparYZ6vR7q79TPU1LLDL0dYhlrK9W4+vb2Fp1OJ5TmmLS7ubkJhIzlFrRPntfAOD4m9FHCU07M+fsAwt8wR0BLry2+dNdZ6mN8rkIb+7kDCIuVuv6a8HNLvxyc9CuADzPrzrSEwLNoBEDCgmpzDEmlHXHMylM7r2Kb2Ew7fS+SxhLexvAaE3MBoWCGmgD24nOPO020ac5AR3txUu/9/X2I49k8o4IcinBs1YPqPV6j3bSD2gd+9qoI1fOoB+NYDCf9CmAtnQ8zJ8YASMTKjNtVPsvBE6qmY71as9ocgWWVafxXXWwS/vr6GmdnZ0FLf35+HvaQV02AJhJ1Fxy9tnq9jnw+nyA8742JOx3RzYw9gMRCpRth8L4ABGLrNl50063YiS22nIBr8yY27ncsByf9krDuMEUmWmtWwY1uK3VwcBBq7hxWSfedSjy7NxsfbmA2flfCX11dodVq4c2bN3jz5g3Ozs7C5BsVyNiqAV16Vg1YHiyXyzMEVVec211xgAjfhwudDvrgYVt8tQFp3mjvXC4XrLdWKGL5E32dk38xnPQrQKfIsHZOSSofOsay3B766Ogo9KFrvKw7rmqGX2NoQmNqWltm6VutVpDXvnv3DtfX17i7u0vsU0/rybCEPfLb29thQTo4OAhTbSkwottOt54xPAk/GAyCldddZHUh03hcJclaY9eJu2rVNXNvY3b9nRN+NTjplwRrzrqzS7VaTTzYJBc71Pb29oJ23QpdNOEFxIdB6AOv8TTHVLdaLZydneH09BStVisx0BJ43mJLrTv78Tkqm408lNqy642qutiIbo3ltVHHWnedeWddervjDT9fXQT5GTDet7PzYnoIx2I46ZcECaRbObEBhRZbx0TrphM6jtrOrQOe3VNNTqloRYdvcEz15eVlGGR5fX0dJu+olp4LjA7f0EpBs9kMiTu69dS3awyv22brnnrMppPoqrajB6S701iXXkeHayxva/ns8Wd/g5bxPIG3Opz0S4LJL2a8WXpjPZsPvM6GZ0mOFp6EjzXIqEhFa9c6JrvX66HT6eDq6grX19eB7FTD0eryWjg8k648Dw7P1D3qtZz20o47sSYdJjhZomSdXi28tt7Gtr3Wve1Z759MJmEcmWb+5/XSu7VfDk76JUArw1jdEloz8IyZ2YdviWWzz2rJ2bjCGjgPEq/b7YZD96lXAjErT7KzckDRj87DpxvOxYcadr4nZ/j1er3wXjoWm8lIFSHZUh8XL+21t0M/7aYXzClYq2/DHY3nHctjIelV9qm7mKQFk8kkzMDTbDwTX7TitK4qsY2585qNVred1pSjsPm93ZueYhitbetoLbbmcnLtwcFByClYHb+S8/7+PlhWjufmbje08rp7bbFYDMTVlmOSM7Z7D69bG3K4EKq6kaTX/wMlvBXoOFaDD9FYgHw+j88++wxHR0f44Q9/iB/96Ec4Pj4OiS9NzNHNZZbcWncrcmHNW132druNTqczsy+9ilhsLMz4vVarBUkvNfzsh481z2ipkUTlpN5OpxOuhTJejeEpwuE1AMncBJN/nOXPphx+BtqQowuHng9IDiPRcEHnE+hn4ViMlYZoFIvFEM99zGAyazqd4vPPP8cvfvEL/OAHP8Cnn34aLDxlqvqgajJK43YVkWj5q9vthjp7q9UKW0pxx1i60/MecFW9cX857cXXybWxoZlah9fRWtzIg14Hd9tRi0zYaT3M/Mey/dpnr735WsUAkp13mu8g8XXbMJ7PnsMxHy+Svlwu47e//S1+9rOfJeK/NIBEyOVyaDQaYYINM/ZWkx4Tj9jZbnZXmcvLS5ydnYXxVSQ8teyxoSUqXrGqPxKeM+00iWi9Dp5X1X3MJTC04HXQ0uqmGzx4b1qC4wMVykcAAA/rSURBVD1ab4WfBxcNlgftoZt72p55Jvn4NZDsZnTiL8aLpG82m/j1r3+NX/3qV/+o6/nOgO4vB0cyG66E14w73WMAiYdTy06cOd/pdHBxcYHT09MwS59uNLe0Ui0/yWb78HW01uHhYRACcYgld6CJyXqtfl8tM0mqjTraVWhn8mk7LBOSdl8+7bNnXsA2zvCzI9m1GUfde9s8pLMKHIux0NKnHeVyObjZGnfqSCzNxKt1j+nku90uLi8vA9np0usedmrd+SCzZEjNPwU2nKXH+F2bZmKEt91yL9XhCSbY6F2ouEiJSLee2X/22dNKq0XWcEVddZYLNdtv9wVgIo+fi5UvO/lfhpfsFoCZanVFVRCibjvLURq/k1x0mymsubi4wNXVFTqdTojfSXiGCWpdGbtr3Z2NMuzD14Sd3WFnnnVnOVA3z1QJb6FQAJBsFdZQT4U8Wmpktl7n1/Ec2veuLj3Pw4qGJi/VwuswUSYW53UkOmbhG1gugVgGHkDCMunWVKqk06QWxTVaCiPZNSPP99PpM+zF575yJDxltKoZoPutPQGxfnit/9Mya198sVgMJTKtxXMx4QKnHgM/B81LqMxWnyXtUORnqzsAkfSxwZdcEKkGVDm042X4BpZLQGNzSkFJeLrtVsDCh1UTZGxUYXZeXVYdxqHJOvbk65Qdim1o3enOUygDYMZ9VhmsuuBM2t3e3oa95Eh4O3DDbqZh591r0o4lPnXDrQdjS30qUppn5fk3lvCaZ3C8DHfvl4RtjtEYlrG6Zrz5ANMK0mXV0hWQTELRbbXbQNHCU3Sjc/ArlcrM/u6Mx2Pxu8bwJL+KZjR+533rmG1N3PGeuIDo/nwqnLFzBVXXoIuUbchh5cDmOPj5cFG05VPHy3DSrwHbbsqYuNfrhYfeauh1JBTwbM2t28uklMp57bbUqvlXQtI15/e6hx5dbnW/WX9XWSzzB5oU0x4Blt601VYJr3PoeT+s79vJuLpjreZAtFypmnrVQXCWvs7fc0u/HJz0K0JLcOq668NvJ7sy9gWet20GEAZFaGabiTtm6WnpeTBm162ldEcZzaTTVSbR1aorMdV60oJqayytMNV79Bro5dgdeElUFSzphpycGMTFRe9BE6GW8LpXAD8bnRbshF8OTvo1QKsUayZRQunDqwo6WjzNE1j3V3eF0W2gaHm5lTMTbbwu7WjT5h2tEGjpi++lrcE2XFA3m/fL+J1eAwmveQBbedB97EhWAKGTDkhm9Hkenkuvl3MNtFLhpF8OTvoVYTPh86y6ffg1ZifUhdZkmc7HZ4lMp9kACFUDJTxDDs0fqBVWj4Pk0Wtjs5CW5BiOcJHTxYSJSyW8bZflGGy2IrNJiVaefzMajWY+DyU88Jy8Y9hTLpdn1IZO/MVw0q8IKxnVSay2pERrCjxXQFRdZ7PiVkPOr5V49/f30X3stI3VZsA1k85FBXgW3ahbr+Uveis6H49hDD0HO22X96QDRLUVma29DHEYu3Ox0VmBqjMg+en5cAdcS3rHYjjp10RMu8AHXue8AclklqrHYoIS9SToTltX176esbAO4dCOPM2ic8FQSa3OtbOeg1XZMeuvSjutoZPwdL91/De32WaoMplMEolBejX5fD6x0E0mk/C5MUwg4XUwiZN+OTjp14S65EogdqNZK69uu5arbDlMCazdZXY0lHobdsSWEpHWne/DsEEn3cQm1lIoo9Zd6/CaeNPPQ6cHcZsszuNrNpuJfekpbWZVgKGA3R5L8w8kPPMCdtstx2I46deAJbwltG0/1vo+8LxTi1XMWUsds9j6euttqObfxsSM2Vnm0t1nVMGnclgr09VBGOpBxJJ29Xo9jOdSXYHuS88SY6lUSjTYMFxgZh949iA4z2/evEHHYjjpV4Q2wKiV1+kxdoAj/47fs8NMFwPbThobnBHLHcSSXnZ8lc7vs4TXpJ1VGtLKs9RHtaG68+qx8LyM4SkmYhMQrTzvn4m88Xgcrq1UKiW0/7xfDRt0NoBjdTjp14DNtluJKslp92ZTYqrwhS45a+vMklPco/uv24Yc9TaY5ddMPMmtI710ai2trhXH2LKcNhNpYg14VhDSwjOGp4W3fQHaZaeTdIvFYqLsR69Jtfu6UBH6GTsWw0m/ImIltliveqxWz78HkGgP1fKfqve0ecfG6Eo6LfXFRDAUwtgMOe9DS5A6tVZ3pLUCIy4WaoG5Lx6Vg9oXoGIcgsk5HQrCJh9qEXQL6nmafSvkcbwMJ/0amFdaA57LZ6pim7cbK19PQql0Vy281Z8zRFCLb4drcNstJVxsr3ltduFCYxteNMbWMhq/Z+KuVquh0WiEg9Y9NpvPfp66aGn2XkuHOiJbR2lZBZ/H+C/DSb8m1NrbRhweLHlpNl3Jr7V+laJysYjF8Hxvte5MnnFTC0p3OSrL9tfreW2ji46o0g0tNHehJUC63PqeXGzs7rt6zzELbe+LakP1iGILpOr0HYvhpF8TMeWYQi24/gvM7kLL1+q/mhnXc2uNny47k1u08NzjnrVsZujVlbcLkyoLVVFIFRy/tjkF3QBEd+HVBhgtKfK+1VLPc9H1s9HkoV2c7O8dL8NJvwbUrVc1ndbDFbSoABIWyVp+PafW/PWcqqDTjDdJx/o1XXrtQFPPguo+HTypTTUAgtKNxFfiAkhcBxcW7Q+gRbbqxNhio1Nv7RRcXRweHx+Rz+cT8l+d6utYDCf9mrBlMk1K6UErt7m5GTamsP3h+rCy847nVeuoC4KS3pbhbKupFf5oTVxn0NlMubrhQDIsAJ4TiLFtsbSJZjKZzFX7xRYevT79ORcOljN1obIlUsd8OOnXhCW8atfz+fzc8U6ahbcPqApvqESzD7KSXstvNnZWPb6WBq0WQF16zc5bD0OvLeaKa8MPkHThx+NxomIQ6xXQw7rv6sJns9kZD8Gt/Gpw0n8DaNKJBNSss8bfttauFpyYl+TSrDQPuyU0ofP5VACkZUElu1XWMXywMmFNOOoioT+zyTXW3fnZaM+7JhB1Lh5LhdqmbAVBNmMf+ywd8+GkXxE2cWf730k0kp1HLpebqbnHElf8dxHxbc16Op0m4md+TcuqWn6Os1LrrtepsmI9v4YiKhu2Cj0V29iwQxcRqwtQwnNhig0hsdl+1Rw4FsNJ/w0Qs/SMO7VFNJfLJerujE/nWXt1V9UzsPVtzW7r99b6W80AD0Jr/rpoaV5B34vegsbVtpNPG290V19N9Gl+gUIgJTwXFPWedDHV3In30y8PJ/2KiGXa1boByRZWxqAkIpN56urbc6ubz/chtGSmoh+t9ZMAPIe65Kpw47Vq8pDJR37PmFlzAWytJUFJTNXI0/OxCw09idg5dSHh4qJWnXkTrVroBqJO+OXgpF8D84hPwqiltKIU/TomulFFmbrW85JoFLBsbm4mXHogqQ60Lbc8v1pynoPvaefwMfbWiTy0yLwmXei0/MdzctFT9z7m0tt9AEh4nRvI8iSbeGLlUscsnPQfALb5Rd1sbbeN9c6rRSfUequ1pndgiQs8i3ZsD4BKVvk9wWuzxFSXWrPysY0odEwW8ExQLl6a12D4YC09s/iaXNQcgbYFV6vVIPPlCHANG9zaL4aTfg3Y5No8q62vt7G5xquxrLN121WDb8MCjcX17/Vv7EhpLlR24Ia64CqwsaU1LaPpQqKNOFzsSGTbGacjwmNJQeZFVIDEHX507r9b+tXgpF8TJJ51na07bUtZWoOOTbgBkjvq8F+S1rrofL0mstRL0Oy3XWDo2qvnYXXytrav96N/y/dmuKHXr4sXFyYtLcaSdpbwbOZhy6528Pn0nNXgpF8Ratnn1amVKFaAoqIYKyyxnXvqolsS8Vr0dVrO0r+lBbeVAd6Deh86NssuXCqLjYUZ6tbbZiT1HNSD4Gdms/Q6394SXnv0dTAm/9bxMpz0a8DGyzFhipa17BHTuQPJ3EAsXNAjRi5bU49dNwnH71lRoIVW8YzNCaj+XRcfvQYdvMmqRswSW6/Fhgi2R5+jt+ja63bcvrvNanDSrwibSY91rcUaR9TqxmSsquCzjTv6Xoy5Y4k8+3omDzmLjpl5ez/MB1htgF63HpoX4Hvb/eW0n1/n2akHoQNI7ABMtglzCs/Ozs7MDr3ctNOn4a4GJ/0asOWzmJjFNuHQXdWstia99PWxpJSSj9cAzPb167XZoRxcjGKLDkEy8rrUo7DWWiXB2gCkE2tJTI7y0qy9zvPTWL5QKCQIv7e3Fyz91tYWms0marWaD8dcE076bwCNPYvFIjKZTHDd6dZqE46GAWotVe9OV1jFJjYWtq61de1VkKOTdW1zTawCYd16qyC0YQXvT/feo5WmGs/umKM7+jK/wWqE7mDDkVscn91oNMKefvQg7Ogvx2I46VeEtrdSHcauuFhvuD2UcEp4e1jd+0vhQUzEw/ePlcVIMlv+s269ViVUtqvqON1zj4M71K2nF8Dz60KkpT8mIkl6boPFDTIoxlFZr27Q4YRfHk76FaCEp64cQOiui5Xt7M+thbcacnXvXyK9dfOttbYJRiW9dqnZc+nP7MKg8bcq5HQQp24fra63Xpf1Pvi5cBIPd8epVqsJj4HDOhguuOZ+PTjpV4Rao0wmkyB8rMSmLaCxTH0slreWK5Y8jJXvLGlJcBvT60KkWgBdOGj9bYZeCc+mGiWjJaSqENUDsRNxptNpYsMM7dLTc+ri6IRfD5lYMkfgDcoGarHsjDf+PkYi/k7r8Epw+699z9i59Wf291Z3r+IX63nMOx+hFQUbhuj8fCu51fJiLGdghUbaw8CFxfb262fmhF+I6IfjpF8DNntviaIEsj+LZb9tg828Gvu888d+p9dmXfbYohQ7l71GJd0iIr6kE5i3KNrFbx7BnexLw0n/ITGPJLHXxGAf2lUe4gX/ZzOLQCzuj73upeu0hIsRcNl7eOmze2kBdKKvDCd9WrHKImHxEtGchN95OOkdjpQhSnrvRXQ4UgYnvcORMjjpHY6UwUnvcKQMTnqHI2Vw0jscKYOT3uFIGZz0DkfK4KR3OFIGJ73DkTI46R2OlMFJ73CkDE56hyNlcNI7HCmDk97hSBmc9A5HyuCkdzhSBie9w5EyOOkdjpTBSe9wpAxOeocjZXDSOxwpg5Pe4UgZnPQOR8rgpHc4UgYnvcORMjjpHY6UwUnvcKQMTnqHI2Vw0jscKYOT3uFIGZz0DkfK4KR3OFIGJ73DkTI46R2OlMFJ73CkDE56hyNlcNI7HCmDk97hSBmc9A5HyuCkdzhSBie9w5EyOOkdjpTBSe9wpAxOeocjZXDSOxwpg5Pe4UgZnPQOR8rgpHc4UgYnvcORMjjpHY6UwUnvcKQMTnqHI2Vw0jscKUN2we8z/5CrcDgc/zC4pXc4UgYnvcORMjjpHY6UwUnvcKQMTnqHI2Vw0jscKcP/BwL1uhtQCAGQAAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 34; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 35; current eta: 0.5, current beta: 16\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 36; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 37; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 38; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 39; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO19OXNjZ5blAQES+0YQ3HcyM5mrVN12R3XExBhT7njtT4zXTlvzD8advzBORYw3TnltjVUtVZeUKuXOJbkCBLFvBEECY6jPx/s+PpAEMqsk5bsngsFUJon3AL3z3e3ce339fh8KhcI7GPu5b0ChUPxtoaRXKDwGJb1C4TEo6RUKj0FJr1B4DIE7/l1T+78i9Pt9nJyc4F//9V/xxz/+EYFAAOPj47i6uhrp9Xw+H1qtFubn5/G73/0OT58+RSgU+sx3rfgrwuf2l3eRXvErQL/fh8/ng8/nQ6/Xw7t37/CHP/wBwWAQoVBoJNLz9crlMp48eYJ/+Id/wNiYOoZfApT0Xxj6/T729/exu7v72V6z2+2i1WrB53M1HIpfGfTo/gIRCFyf5Z+DqMFgUAn/BUFJ/wVCuuHyABj2Nfi7gUBASf8FQd37LxyjJvF6vR4o0R71NRS/TKil/wLR6/V+7ltQ/IKhpP8CoVl2xW3Qp0Oh8BiU9AqFx6CkVyg8BiW9QuExKOkVCo9BSa9QeAxKeoXCY1DSKxQeg5JeofAYlPQKhcegpP8Codp7xW1Q0n+BUO294jbo06FQfEb83++O8Lv/9f/w3/73tyg1L37u23GF9tMrFJ8JhXoH//J/vsdlr49XJzVkom/wP//ri5/7tm5ALb1C8Zlw3r3CZe96gHT9/PJnvJvBUNIrFJ8JS5MR/PffrsPnA2YTIfzzf3rwc9+SK9S9Vyg+I/7Hf3mMf/nPjzAR+OXa01/unSkUv1L8kgkPKOkVCs9BSa9QeAxKeoXCY1DSKxQeg5JeofAYlPQKhcegpFcoPAYlvULhMSjpFQqPQUmvUHgMSnqFwmNQ0isUHoOSXqHwGJT0CoXHoKRXKDwGJb1C4TEo6RUKj0FJr1B4DEp6hcJjUNIrFB6Dkl6h8BiU9AqFx6CkVyg8BiX9F4i/xqrqfr9/9w8pfhVQ0ivuhM/ng8/n+7lvQ/GZoKRXKDwGJf0XhkAggLGxz/O/lda92+2i3++rtf9CoKT/gtDpdHB8fIxGo2H+7lNicf5uKpVCs9lEs9n85HtU/PxQ0n8h6PV6OD09xTfffINcLodQKATg00k/MzODzc1NtFotlEolXF7+MneuK+4PJf0Xgk6ng3w+j3fv3qFYLGJ8fPyzvG46ncby8jKSySSAa1df8euF7qf/AtDv99FqtVAoFHBycoJKpTKSRR4bG4Pf74ff74fP50MoFMLq6io2NjYwPz+PSCTyV7h7xd8aSvrPDGkF/5qJr36/j36/j16vh06ng2KxiKOjI+TzedRqtXuR3ufzIRAIwO/3IxgMmq/x8XGEw2FMTk7i66+/xtbWFmZmZhCNRuH3+8171MTerxNK+s+AXq9nvmxC3PWduItAfF0Svdfr4erqCp1OB9VqFdvb23j9+jVyuRw6nc6tLvjY2BjGx8cRDAYRiUQQj8cRi8UQi8UQiUQwMTGBSCSCubk5PH36FEtLS0gkEhgfH4fP5zMHDv9s3+Og93Xbexz0b7e9PvUDevgMByX9J6LX66Hb7aLT6aDT6eDq6grAT8Ty+XyO7/yz/Ht5CLgdCG5kv7y8xMXFBc7Pz1Gv15HL5fDmzRvs7OygXq8bRZ4kJV8/EAhgfHzckD2TySCdTiOVSiEajSIUCmF8fBzRaBTLy8tYXl5GIpHAxMSEeT2+R3nYuR169vt0e3+3HYbyvUvPhn/v9/sxPj4Ov9//2cqUXoCS/hPQ7/fR7XbRbDZRrVZRq9XQ7Xbh8/nMgzg2NoZAIGDcaH4xfubPuJFDXoeW/fLyEp1OB61WC/V6HcViEQcHB9jb28PZ2RkuLy8xNjZmLDFfi9ej655MJjE1NYVsNovJyUkkEgmEQiFMTExgYmICqVQKs7OzSKVShvDyXi4vL9HtdtHtdnFxcYGLiwtcXV2ZA0fmBwa9x0EHg7yWfO/8fnV1BZ/PZzySUCikFn8IKOlHBB/8VquFYrGIXC6HYrFoSE+i07LaX36/HxMTE46DQBLEtnh82C8uLtBqtdBsNlGpVFAoFFAoFFCpVNDtdg2xgWtLT2Lx30KhECKRCCKRCKLRqCFOOBxGKBRCLBZDNpvF1NQUYrGYieNpzenZsHbfaDTQbrfR7XbR6/XMoSffv01++WW/fxLYPuy63S4uLy9xeXkJn8+HSCTiyEso6e8HJf0I4IPfbDZRLBZxeHiIg4MDQ3qSi1ZzYmICoVAIwWAQExMT5jsPAEkM++EHblpXuvcMKTqdDnq9nonTaflkeU2+tnxdAMYbiUQiSCQSyGQymJ6exuTkJMLhMHw+nyOPwLCiXC6jVCqhXC6j0Wjg4uICvV7P5Az43vkeeW3p6diHIX+O3go/a3oUPFj8fj8AmMNLy4j3h5J+SNDqttttlMtlHB8fY39/H/v7+yiVSri6ukIgEDDkowXlVygUQrfbNZnyq6srjI+Po9frGcvIh5rEp5tLSEvK73R14/G4cX/HxsYMWWk9SVy65DwwQqEQkskkstkspqenkclkTCxPAvL3ms0myuUy8vk8crkcCoUC6vU6zs/P0e/3MTY2Zt4/qwGUB0vi87CTnw0PCsbovV7Pca/MJwSDQYTDYUeMr7gflPQjgG59qVQyD/7p6SnK5TJ6vR4mJibMg3x5eWlcbFpakptuq3R1aSllhly6uyQKvYdoNIp4PI5kMolarYZWq2UsLgBcXFw4Enr0GDqdjnHJASAUCiGVSmFqagqZTAbJZBLhcBiBQMCRwGN4UalUcHp6iuPjY+RyOdTrdVM1YAmQpOc923G8DDVisZgj1OB1Sfrz83Ocn58bj4aflX0gKu6Gkn5ISJfz/Pwc7XYb5+fn6HQ6uLi4MA+9TGjREks3nxbQdvPthJ9MUPn9fmPFgWsr2Gq1UKvVUKlUUK/X0Wg0cH5+bvILkhxjY2MmROD3sbExE8snk0nEYjGTxZfxPABD/Ha7jXq9jkqlYq7L909Pp9PpYGJiwhCYnx/fC0kfjUZxfn6Oi4sLE7PT2vM98nPu9XomPJKJQ8X9oaQfEdLCyAw9AIernUgkzJe0ZCS7LDu5ZfdtS88wgK4/Y+xarYZ4PG4sq7xH2wVmvM+/Zzwfj8cRjUYRDodvkJW/x/uQZUMeePQq+JnwzxQK0VvgvQQCAYTDYUcXH3+PIU6/33fkL3hwXV5eOg4ztfb3h5J+BMi6u0za0S2NRqNIJBJIpVJIpVJIJpOG9LSgJNVtWW27lCVJzJi32+0a1zgUChkvQ2b8JdEAmN/1+XwIBoMmPEgkEkacIxNv0kvg79qvLzP38qCRpTaGFozL/X6/CX9kUo9JukAggH6/bw6VTqfj+D2+phJ+OCjpRwStuyQ8k3LxeBzpdNp80WUmoWRia5BgZ1Dd3na1GTvLOJe5AtsaAtejtFjnTiQSyGazyGazSCaTDtLbVl4KYEh0WngmDHkPvFcSnD/PkMK22DLnQQs/Pj5uSN9ut9FutwH8RHqGAkr64aGkHxKSlNLKh8NhAD9llZPJJFKplCE9LSjJaROerytf303FZstfZSgAXMfbnU4H3W7XWGFboScJPz09jbm5OUxNTTnCA3lvJCUhr9PpdMwBw0OPkAcNSc974wHBQ0HmPeitsJLB8min0zGHQzQaNddU0g8HJf0IIOlp6ZmB9vv9pvRF1z6RSCAWizniZDtWd3v9Qd9p6eXvysSijLFpUe143ufzIRwOY2pqCktLS0Z5Fw6HjccgQwp5Ler9W62WEeWQ+ABcwwjeo/QOpLcCXCf26GHwAGFM32q1DOnHx8cdNXuN6YeDkn4ESNLTtSdhwuGwSdwx1g6HwyZbb6vO7ns94GbziSy/kYTNZtNIYu0kHq85MTGBeDyOmZkZLCwsYGpqCtFo1BBeklV6GLJOX61WUa1W0Ww2TaWA5Uh+Nm5JSBl+8H3Iz5L3cHV1ZWJ7uvedTscIkKgvUPd+eCjpR4Bt6dmtdnV1hXA4fKPmbAtUbJktcZ+H15amUh3H0pkkPQkhE3+soWcyGczPz2N2dhbJZBLBYNARKsjaPnDtTTQaDZRKJRQKBZRKJYcoh5Chj8/nc2T1pX5eei3j4+Not9vmdy4vL417z5LdxcWF8aykJ6MYDkr6EcEHm7JaxpdM2NG606WXbv19O8Jsyy4J3+12Ta28VCrh7OzMkJ7xvEz6AddKvkgkgunpaczPzyOdThsRjiS8vK7sMyiVSjg6OsLx8bFR4nW7XYeHINV2PDwuLi5uvCbfn8wRtNtt497LOj3DlmAwiGg06vBmFMNBST8C3Cw9Y1MpJ5X1d9liy9cYBPtBtttq6c5Xq1UUCgUcHx8jn8+jXC7j/PzcNatNN5uJxtnZWczMzCAejxshzCDvg1qAcrmMw8ND7O7u4ujoyFyPSTcm8aT2HoBx1eVhJw8xvi/W/kl2WnyZnOTQEBnPK4aDkn5IyDiVLmwwGDQWVRJ+UNLO/i5jbvshlvVuEoAddrlcDoeHhzg8PDQTc5hUk1aehKYIJ5vNmox9JBJxlOfkPfE1Li4uUK1WcXh4iPfv32NnZ8dIb9nxRkENryNJ3+v1cH5+fiOPQQGOrOFL0gMwhxzLfQCMBp9JRsVwUNKPCLtkx4fUrsPbD7pNLv7Zzbq79dGT8CcnJ9jf38fu7i729/dxdnaGVqt1I86VHsb4+DiSySQWFhYwNzeHVCqFYDDo2srL74zjc7kc3r59i1evXmF/fx+VSgXn5+cA4GgUkjMEaPmZ5HPzJtxCGBKa15cddhTmMBE4TEJU8ROU9CNAWno+3CT9IOHNsA+mHb+fn5+j0WigXC4jl8thf38fOzs7xupWq1Xj2kt5sCR8PB7H7OwsVldXMTc3h1gs5ijR8br8zkRhoVDAhw8f8OrVK+zs7KBUKqHdbjv6AOTEINlSS5nvoDyG2yFgKwpJfJkElP8flPjDQUk/Iuy4nmS5qyzn5pJKoskvmaGv1Wo4OztDLpfDx48fsbu7i48fP+Lo6AilUgnNZvOGlZf3GIlEMDMzg/X1dayvryObzSIcDrsOn5DluUqlgv39ffzwww948+YN8vm8uRZBBZ1t5QOBgHH/Zfzulm+w/yw/g0EjuW6rhCgGQ0k/IiShqBEHcCNxR9hkvy0BZRO+0Wjg7OwMx8fH2N3dxc7ODj5+/IhcLodyuYxWq+WQt9r3Fw6Hkc1msbm5iSdPnmB5eRnpdNrRt+52/VarhVwuh3fv3uH169c4Pj421QHG72wDlh4FPxPZE0+X3a2qIPsY3GTH8lB0+537VkMUP0FJPwLcpLgAjF78LgHOIGsvXXrZu06Xfnd3Fx8+fMDe3h7y+byjRCen5PC6JHwmk8HGxgaeP3+Ora0tzM7OOsQ4biW6TqeDSqWCjx8/4s2bNzg4OEC1WjWlMhtyVoBs1GF9n628dpOM/CwlieW/2587Q6tRhE4KJf3IsB/Uuyw9IbXz9t9LxRoFKdVqFfl8HgcHB8alz+VyDsK7ufUk/OTkJNbW1vDVV1/h2bNnZlvNoDIdrXG73UahUMD29ja2t7dxdnZmynO00lTMSc0CO+UAOMptUh4sDyjpJdiWmxl9mfyUhL/tc1YMhpL+EyCtPR9iO2vv5uLbxJdWnkRpt9smjj8+PsbHjx9xeHiI09NTI3+VhJdxLiWt8XgcS0tLeP78OV68eIGNjQ1kMhmHGGdQAq/RaCCfz2N/fx8nJydot9sD6+JM3lGMREvN+n6r1XJo9Oni89CQpOf9sxLgVu60pwkr6YeDkn5E8EGTpHdzO+XPSthJOzn4khaehN/f38fR0ZEhfLvdNmUrSXjp1sfjcczNzWFrawvPnj3DxsYGstksIpGIq1vPe6I7XqvVcHR0hJOTE1Sr1Rtad7rwPGDY4iu75Kiw4/ReTsdhvd123eV8Afl++MXruhFeiX9/KOk/AXaMCcBhse5Tl5aKNNvCHx0d4ePHjzg4OEA+nzeEd7PwvB9q09PpNNbX1/H48WM8ePAA09PTA+N4CZKVQz8LhQLa7bZrtp1WWY7U5ox8JiHliGw5UoxiHuneS4vPv3eL6T+1HOp1KOlHhJvEddAD6fZgylo0+8w5604Sfm9vz5TlOPTSTXNO6xcIBJBIJLCwsIAHDx5gc3MTs7OziMfjJsk4iCQya18qlUzugLJeeS0Snlp49hwEg0H4fD7jsTQajRvuPZV4cpagJP5tsD9jxfBQ0n8C3CytnU2+zbWnO8+ynJwwy7HaR0dHKBaLaDQaRn4qs+fyUOE6qkwmg9XVVWxubmJ+fh6JRMJ00d1GFCrg6vU6CoUCTk9P0Wg0HDV5W/DD2XqcHcAJQiS9JLzsowfgWgWQ9yLDiUF1fcXwUNKPALtZxG0i623lOltpV6vVjGU9ODgwopt8Po9isYh6ve7YIGOXs6Rbn0wmsbS0hPX1dSwtLWFyctLMzruLLNTZs0RI74L3zWsxUx+NRh1js+PxOPx+v2mD5Ygr9tvzs7KTmG6fzyBBjuLToaQfAXY9XcpCBz2c/Hu7W65er5uE3d7eHvb29m5k6UkaN7eeLj0HXE5PT2N1dRVra2vIZrP3iuNlIrHZbCKfz+Pw8BDVavVWwY9cjjE1NWXm/POA4iQf9r7LJpnbDkQAjjl/8h5sqy8/W8X9oKQfErZEljG2TOjZmXn5u5LwzWYTpVIJJycn2NnZwfb2Nvb39x1Zer6+PXSCJOZQjEgkgkwmg5WVFaytrRm3fpDqzgY74crlsumXZxedJCrLcxyoubCwYPryx8bG0Gg00O9fj62WAyxl/E7IA4CfKwBzSEglnxTtyP8XiuGgpB8BkrjMbNPK0xLayjIZxzNpRzd6b28P29vbRmkns/RSe05IIQtn7HPe3ebmJlZWVpDJZBxts7e59nw/jUbD5BPy+bwja0/CB4NBJBIJcz3O2KOVZ3ZedsbZpJeHkD2pxy5fSvJL2Ieqkv/+UNIPCVodErfVapn9dRSUyFozLbLM1MtdcLI9VirtbLeWkHVq7nNLp9NYWFjAxsYG1tfXTbb+tuEY9vtpt9s4OzvD7u4u9vb2UC6XHfV0n89n4vipqSnjUVDH7/f70Ww2UavVHKSXbbJSfiwPR6nT58EoJ/nK8qQbuZXww0FJPyT4UHI2Xa1WM5NbOQabD7ZUlVH0wok3Jycn2Nvbw87ODvb29u4lrZUKQJvw6+vr2NzcxOLiotk2e59svd1N9/btWxwcHDg66ZgopEexvLyMBw8eYGNjA9PT0wiHw4akY2Nj5nCTCylkWML3ICfgyvo8P2OZB5Dxvrx/JfzwUNIPAUkSzqYrl8u4uroyVlBudGECTR4UtVoNhULB9MPv7u7i5OTElfB2lt6N8PPz81hbWzNu/fT09I0++duSZhcXF6jVajg4OMCbN2+wvb1tVm5LaTGvt7KygkePHuHhw4dYXFxEIpHA2NiYkdv6fD5HD7ydfJSqQWr17Sm4vDd+3iS7/XkoRsO9SO/101QmmkgS1tO5nprZcy6AkOo0Jsnq9TqKxaLR0h8cHJhZc41G41alnSSKtPBra2t4+PChcevdavLSrebrkpj1eh3Hx8d4/fo1Xr58icPDQzSbTZOc5Cz/dDqN1dVVPH78GE+ePMHq6iomJycdo8IotpFDL+yRXXKYKJV83AnA+5OW/TZrfpvLrxiMe5He6ycrH2TGvTs7O3j79i329/dRr9cBwJSwGo0GarWa0bjzoGAcXygUcHJyguPjYzPB9jbCkyy0iJFIBJOTk1hcXDQWfnNzEwsLC5icnDTJu9tGYEnCHx4e4i9/+Qv+/Oc/48OHD8bKAzClQFr4Z8+e4dmzZ9jc3DTz9cbGxoyiELieaSd3yQPO5iS5ZptKPg7ccBu6wbCB/y/4PrR+PxrUvb8DjHc5Znp/fx+vXr3C9vY2SqUSut2uIWMqlUKlUjGrngGYJBlXSZdKJZRKJUN21uAHNc8w0RUKhRCPx5HJZEzSbnNzE2tra5ibm0M6nTY1edvKEyQQ9QFHR0f48ccf8W//9m94+fIlcrmc6abjQZNIJLCysoIXL17gxYsXePToEbLZLGKxmKM8yffKNlq5qNIu90UiEbPgM5FImFwIy3u8b/nFibq2Uk+JPzxuJX2r1fLkh8rSGwBsb2/jhx9+MMm2o6MjI1zpdruGkLFYzAytpHstO80ajQbq9TqazaaRptq1aMApq+UEGpJkZmYGy8vLJku/vLyM6elpx+JJO3lnl8Ha7bZJ2tHCv3r1ylGX57VJ+OfPn+Orr766MYBDxu8ATKKS+gJbV89cRCwWc+z5m5iYMNfl1FwpfpLCJh4A/NIllsPjVtJXKhX86U9/wuvXrx190l86SPper4f9/X18+PAB+XwehULBtJmyTMesNhcyyHXRcoc7h0jIhY92TCqtO0drs0Q2Pz+PlZUVrK+vY3V1FfPz88hkMsarkBZeWnlp3RuNBgqFAnZ2dvDjjz/i5cuXePfuHU5PT80hBPzk1sdiMSwsLODp06f4zW9+g8ePH5thmsxVyHvngcJDTZKeOn3mPSYnJ410NxqNwu/34/z83LHKSh5Wchw2vSL+WWW6w+NOS//73/8ev//97wH8tJGVp/qXDBK+3++bRBOz9vbUF/mw0dIB14oykpyZ7EE1ZztZF41GkU6nMTs7a8i+traGhYUFZLNZ4xZzg86gsVfMRVQqFRwdHeHt27d4+fIlXr16hY8fP6JSqTjib8bxU1NTePjwobHwc3NzSCQSjv3xJCM9GuYzOIpbkp4eSyqVQiaTQTabNaVFljbb7bajXi9jekJ2JVLxp5tuhsOtpO/3+2g2m+a/maz50iHrwc1mE81m84aXQ0vH3nESR8pmpfsuZ8PZD6hsVWXsPjMzYxJ1GxsbWFpawvT0NNLptGlhZa3btu6yHNdsNlEoFLC7u4vvv/8eP/zwA969e4dcLmcSiLwf3kMymcTq6ipevHiBra0th6SXhCdYjqT+QA754OfDZiBa+enpaWSzWaRSKYyPj5uDMRAImM/f/vz493JFtswfKOnvj1tJ7/P5EI1GzX/L9U1egdv0VgnZQCMtnx2TysQTIevosha+uLiIhw8fYmtryxB+cnLSuNb2dlk7aUdFnFxS8e///u/47rvv8P79e5RKJTPvjplx3kcoFMLc3ByePHmCra0tLC4uGnWfW4KQVr5er6NcLqNer6PT6RjCy468ZDJpXHu+H74P1vgZs/PzlKRnpYDhElt2Zfeh1ytN98Gd2Xv5kPLDVVyDSScZV7qR3e3gkH3pnFq7traGp0+fmhFXc3NzSCaTZhW225hoCWl5C4UC3rx5gz/+8Y/49ttvsbu7i0qlcsMl5lCL8fFxpFIprK2tGcJzC86gXXQyOVgqlRzegxQTMXmXyWRMAo+ufbfbNYRnvE7C8zsJTXkvcySy5VhxP2jJ7hMgS1F2HdwuOQE3G00k4bPZLDY2NvDVV1/h+fPn2NjYMAsmg8HgjX3vNuyyWalUwvb2Nr755ht888032N7eNlNwBqnkwuEw5ubmsLGxgdXVVUxNTZlr2516MoSgleeqK1pmWvlwOIxEIuHI2MvaPHDtussknTwASHrZvSf79dXS3x9K+hExaECjHVvabaT8zhJWLBZDNpvFgwcPzNTa9fV1M9NOutW3WXfguluOopvvv/8e3333nSE8O+Dccgp+v9/E8pubm5iZmUE0GnUst5TXk1a+Wq2iXC6bBZp8TeYo6Nonk0nE43Ezjdfv9xtyM0kqW3HtsIhe1cXFhWO1NV9DcT8o6UeALKuRFNLSU0NuE1UuhAiHw2Zi7cbGBp4+fYonT55gZWXFqN3s2P020A1utVrI5/N4/fo1vvvuO+zs7JglFW6E5wEUjUYxOzuLBw8eYHFxEclk8s6puVJpWC6XTSsuPRiWM5PJpBHi8H1xWy2JLrPxdiuuLdKRB4Rm8IeHkn4EkPC0WMA16QDcSLLxv6Wrm8lkHFLa1dVVLCwsIJVKmfj9vsMfScLz83OUSiV8+PABL1++xIcPH1AqlVzlvfK9+P1+ZDIZUxacmZkZOGJLWvnz83NUq1WUSiUj7AFgrHg4HEYqlUI6nUYqlXIkBJmsky3Kg9SJ8jvDE4YAUvvA3ITidijphwQz7ZFIBLFYDMFgEP1+32SRpWsqJ8ZyeGQmk8HMzAzm5+exuLho1kYzmy1j6GEIzx3yVNq9fv0a+XzexNhuhKdbn0gksLS05Oic46FjX0taWyoQ5drqYDBoPKBEIoHJyUlkMhmkUilHP4Ickd1sNh3Tcnktt94BADeI79aKrBgMJf2QYNcZy08ULNkWx+fzmZidten5+XnMz89jdnYW2WwW6XQayWQS0WjUkGWYrS1SgCObZ/7yl7/g4ODgVhm1FMzMzc2ZdtlsNmusvH0tSXjW5eXQD7rz0spPTU1hamrKTModGxszCbpWq4VGo+Gq4pOhEf8sqyByhp48bBV3Q0k/JLg9JpPJYGpqChMTE6ZWLZVtwWAQyWQSMzMzWFhYwMLCAmZnZ5HJZJBIJBCNRs1GGDle667RVoQkIJtnXr16hT//+c/Y3t42vQFuZUIKZsLhMGZnZ/H06VM8ffoUS0tLSCQSN5J3kvBU+NVqNRSLRZTLZZyfn8Pv95uOOa7UomeTTqdNjz8Ax0x8kt7uyuPn4TYXT+oi5MAOtfT3g5J+SJDMmUwGmUwGwWAQABwPHbvTpqenMTc3h/n5eaNAIylkku62UpwN2+Jy/dQPP/yAb7/9Fm/evEGhUDACGcBpNWnh4/E45ufn8eTJE/z93/89tra2HDvr5bVsSS9Xbp2dnaFareLq6sro/wOBAKLRqGMWPqsQTHDSra/VaqjX68bKSwUfFXpy6o6tx7dn6WnZ7n5Q0g8Bltn4QHP7Kxtv2PPOefDSjZfxul2Cu+shlYksPujn5+eoVCo4PDzE69ev8ac//Qnff/89Tk5O0Gq1bp9ST8sAABasSURBVGgDWHGg2724uIitrS28ePECjx8/Nso7ds/J60kLX61WzUyAs7Mzo6Qjsbn8gmSXyU65q0/G8nTrZWchiS/nD0rFnlTtDZonqHCHkn4IsNSWSCQQi8UQDofN+Gn5oPNQkP3izFrfJ153y1rLrr1ms4lisWh2x798+RJv377FycmJYyMNLTZJxHBjbW0Njx49wqNHj7CysoKZmRkzcYeHhFTDcVx3pVLB2dkZTk5OcHp6inK5jE6n47Du8Xjc5Cl4INJLkJ14bDNmnZ33OzEx4VAz8h7sg0iW9WRvg+JuKOmHAJN4kUjExOO0nOwai8fjjokwdHsHrbuy41V+l1ZWJs8qlQpyuZyZ3vP+/Xt8/PjRLJq8vLw0xKUElg08q6urWF9fx8bGBpaXlzEzM2MaeKTEl9el6o3zAPP5PHK5HM7OzlCr1XBxcQG/3++oxSeTSdPuK2cKuLn1XNUlrbz8LFjSk4k8El425LipDBWDoaQfAuwJp9WemJhALBZDJpPB9PQ0JicnjUvLn5OTXgHcSJDxu4zV5SIN7rmjW81NOFyMkc/n0Wg0HC4y740bb1ZWVsxYLVp26vntRhqSiq2yHNUtR3zV63X0ej2Mj48bgnMSDl83EAig3+8bsU2r1UK9XkelUkG1WjWrukhYxvL0TuhhSPGTVOfJrTnaUz8clPRDgJY+HA4baSnXOjErLzPy9yW8TEixe4y96XKu3uHhIQ4PD3FycmJ23NGKMoFFV5vbbh49eoStrS2srq5idnbWkUyUuQXpWXQ6HTP8k9tzDw8PUSgU0Gg0zKTfZDJp8gTRaNRUJJgXoGqO23jL5TJKpZJZ1yXFTPys6KJfXFwYy2/3McgavRJ+eNxJeinQGB8f91xrrdR0M3OfzWYxNzeHmZkZZLNZQ3hpOd3id9uVl1l4utHFYhH5fN5Y13w+j9PTUxQKBQdhSHYOoKD0NZFImLr706dPsbW1heXlZUxNTTni7Nt68Ov1OvL5PPb29vDhwwczKowjurkdlwsrJyYmHBUJqctnae/09NTkAZrNJi4uLgDADA0h8XkAykEdUpIrs/b2XHwl/v2gQzTuAbqtDx48wNdff41nz55hYWHB0TFGcc1du9MlwaSU9fT0FIeHh47R2KenpyiVSmYajVxVLR9wuW5qeXkZjx8/xtdff43Hjx8baa+dW3C7J2bWS6USDg4O8P79e7x//x7Hx8eoVCrodrsYGxtDOBxGOBx2TLiVZKdYiSEJDzGGBiwn0pK79RjY2Xk5hETq76WXo6W6+2GoIRqhUMgT3Uwc+Njr9bD6H7PeFxcX8fjxY/NnTpJhCc6tE862PLZ1bzQaKBaLODg4wIcPH/D27Vvs7Ow4ll+wmcSeEiuHb8gx1c+fP8fXX3/tmHhjt+a63RPjeCYK9/b2sLu7i6OjI5RKJdNMw+tJwssDjGTkNt5cLmeSf5Tr8v5ZLaCU2c7YSxdefnYMA1imu+ugVThxK+kjkQj+6Z/+CX/3d39nkixecaFk7BgMBjE7O4vl5WXHrDiZ/JK/wwfUbrmVSbJarYaTkxNsb2/jxx9/xJs3b/Dx40ecnZ05stqDOuPkGKrJyUmsrq7i+fPn+M1vfoNHjx6Z+5SlQrf3KOvw3KJ7dHSEg4MDs2qLZTVek2SXgy/o+l9dXaHRaKBUKiGXyxkLX6vV0G63TdKOhxCnMTFs5OfD6ThyiafMg8h5g+xcVNLfD7eSPpVK4R//8R/x29/+9m91P78YsHRVLBZRrVbNMotYLGaSTjKjLOvEttJOKtq4rfbw8BDv3r3Djz/+aPbH0RLeRXbZsScJ/9VXX+HRo0eYn593dLQNIrzbfeVyORwfH6NQKJj+eJldpwCJnwEz83z/nKJTKBQc4QkJDFwP36QAR6rqeC8MZ+xWW3nfBHUI92lBVtzD0nsd0WjUdKoxI0/Yohk5DNLeVitFNQcHB3j37h1ev36NDx8+OJJkbjP5+Fo8TDgamxn6p0+f4vnz53j48CFmZ2fNLL1BCyzdtPQy/i4UCqjX68aVpldDvT4rFABM7N7v982uvmKxaNx52TILXA8Ule21zBUAMCXKZrNphl7elqHnAThMK7LXoSW7O0DxibS8MvZkLMuxTVzaQMiZ88ViEUdHR9je3jZ19rOzMwfhbVWZJDytLBt+VldX8ejRIzx58sRskLWXV0rw/qVLz245Sfhms2mqArJVlll7jrq6uroyYhsOx2SrLZOPcsAFNQRS7cfPkPdFK0957qBlFnZOw21Sr8IdusDyDtjNMFIgwrJUvV43ghOKZGhJOSSCIhfGyycnJyZBNqgtlJad1owimGw2i5WVFTx48MAsr8xms2a8lZwdLxtVbM/E1tKfnp4aC8/DRW68oUVlAo7ei/0ZcF0XXXf7s5QHqJTQyg05sk3Z7bORizBJenXv7wddYDkkJPn50JdKJRO/SpUZFXW0gIVCAYVCAcVi0cyssxtF+OCS7JzSE41GzWqrpaUlh5zWXlxp163thB3lsJx6wxo6y3JU2rFyQ9LLkIXvjZae+gFad3s8l93pJz0Rkp7rruUuPBnHu80YZLihMf39oe79iKCmnPvmj4+PcXp6aiSxtoyWCrtqtepIfAHXDzFBN5iuKzfDTE9PY2FhAcvLy1hZWcHs7CySyaQZTgFcz+mXuQFJdimHLZVKZootZbGceCNLciQb31Or1TJz9W1ZrVu2Xb5HKSSSFSGq9/hlr7qWkIlMqgA1e39/KOlHAElFKy6bUer1umOqK4nPcc18mGWcLi2i7c6T8FNTU5iensbi4iLm5uaQyWRM7zvLZvx93qN98FAKK+Nu3pOswTNRJ/cX0vWu1WpoNBpGbVetVk12nmVGm/C06nJNNb/kJlpbZedGeGnlY7GYma47KGmpuAkl/QiQYha6t5VKBeVy2Sx7sGe42T3jAByuuExMcXS07F4j6dnUw9egnFUujJBdeWzWkZZdrp7iAUNVYSKRMETiokrW8ElGHnYkPGNwWzIry5bMCXBrLVuT5XuwXXoJGR5QnxCLxUy/gybx7g8l/Yhg4kkKSfjltpJJClLkXndZ4pOEp+vKPn2uo6YCrt1uA4AZVUVdgbTstOg22Rlvk+ypVMok7iYnJx3LKHgtegMsy9HiU4VnE57g+5KrrTgZl3V6fj6As7nGhl2y5AHFxKJa+vtBST8C7Ey4zEDLh54Et2N2mZSieIYlMWbIpQsse9Opams0Go62U3oeMpNO91uOpJJCG1p0JgolIUOhkKNTjtem18DchIzhbW2BzEtwww0nCUUiEfh8PvN+pMLRlgtL3QNLqHJoiRz+obgbSvoRYWelaYW4qokPqIQc9ki9PrPzrIWTKPLfaWE7nc6NphRad4ps6NIz7paxNqXBUrhjj7ji8I/x8XHjzdC9ZwgjcwGsPtiEl+O/2Zk4OzuLmZkZsx/v8vIS1WrVbOWx232l9bZjebk8Q5N4w0FJPyJkdpsWemJiwrSF2rG6G8llBlsKaqRijvVqKVWlxZb5ArnthYeAVPjxnhmny5VTdJPtfnhen8nKs7Mzs9iCKju3pB0TlBwtNj09jaWlJSwuLhoBkd/vx/n5OQKBgKmCVKtVc+DJfgbeuxxXRkn0bcpDhTuU9CNAEp5uObPedo+3tFrSfechIYdt0E1nOZDuulvOgGQn+RliSFebxJEhBMkei8VujLjidlreh1s/PPMCjPFl1YHXkuScn5/H0tISVldXsbi4iHQ6jVAohH7/um2bXkQkEjHqRCkskjkPaeWH3QSk+AlK+hHhVoLi4guSELiO3+3BGnYHnpyFx/Jeq9VyTI1l0syeGiMPGfseaTmZJ5B74vklk2EMF2Q//MnJCXK5nFlF7bY7ThJTEn5tbQ3r6+tYWVlBNps1DUuXl5dmCCaTjnYnnhyLzVCBnola+dGhpB8Bg1x7WnFaWEl8OdGVoL6dP0OySbK7EV7G0W5ElzE174lruLhqilt3uDuPM+0YTrBXgISXLb9yepKUKcsVXjMzM1hZWcHGxgbW1tYcQiISGvipYYceB70I2X7Lz4ijyuRCDTmfX3F/KOmHhEws0ZXll7Tk9mjmsbExdLtdx+ZameiTsl02nbDTTLr0Uvxi18Ml2RlysC7O0dQczT05OemIiwGYQ4XtsRQcFYtFI8CRsmGb8BMTEyaGX15extraGlZWVsyuPibdmFC8uroySUSSnocKtf08YGzhkN3arMS/P5T0I0DG6TJBJx9EuW7JbjqxV1jJkdOs+1PwIlcxy1jdTYvOzDylu7IMxy/uiOfUXhKI90rhDeN4zuUj4Xk9+TlI13tychJzc3OOxB2HccoQot/v3ziYksmksfR+v9/8me9Vzvfj5ysPBsX9oKQfEXapTsbnzLC7bbKVhCFkb7vcve42QMLW68t8AfMLtOp049PptInd3Wbxy0m8jK+LxeKNARgyace9dAxxZH8AS3O8Jq8np+3IHACVevF43CgF6Q3IA08mO+kVyc9IcT8o6UeEdG3lUEe7115ao0FuqMzaMwlIV14q+gA4QgJZHpMWkyIYboxNp9OG8LLJhVJhVgmoz5dNNBwgIisQ9uhqHjTpdNosrJTZdTe1ncxHyAMrHA4jEoncKDdKb4hJTn7J0qEm9e6Gkv4TILvGpLsOOKfq2FtYbOLLurzdsMKhE7bizO7EY8Y8nU4bnf7U1JSR1cryFg8XuWaKq6b4JUtntOZsypGlQK67ZpKQmnq5v07OswOuF2rYHhBzEVLExJ/na8iqhhy2oZb+/lDSjwDbysuli/KB5c/YhHZ7QN10+CS7PZCUr83KAXX6XA3NFVtSR8/YXQ7nlOo9+UUXG7ieSw/AiGakmy8ttLyG7C7kwcV4XPYtDJqBR+9Hhkr83BqNxo0JO0r6+0NJ/wmQ1pYJtFAoZJJejM/5M/cdH86H357HJ/MBPGiYQJOroZmoY1mLBGKLLCsEjUbDWHU2z9gDLKn7p9pQ7ry3rTPbjWu1mlH+UdVnHzwUIEnxkUxc8r/lv/H3eDDxd9W9Hw5K+hFhJ6IofJFW0p4cwzKVW7aZD+td6jK3TD3jYE6RYdzPbDxJLMd3cfgkdQCySkCXXuYLSHg7VAGcU4R4HV672Wwat5/DLmxvQGoSeF9046VGgcSWfycTfYr7QUk/ImzSs0RG0YkcexUIBByLINw60vjdLT/gdl15bc6Io+vMPn/pUrvpAOSkWntTjFyOIWNwe7oNPQhabelBVKtVJJNJJJNJ0xFH4gMwMTp7/pk8lIM6aOXlokuqHgcNzVTcDiX9iJB1ejm0Ug7KkIo4NpbwgXWbHycXXtqlQMCpPLPLhXKwJN1sZs4H9f5L0vIe5C4+WWJjucx+Pel2M9yxh1xQKyBXgPEgoqVn73+lUnHkFmTDkZQruw3qUNwPSvoRYKvyaOlJALredjeddEvdNuHQetvJQMBZCpQHBuW7jNc7nY5D/CPr2nb9X7rycmGEXSmQYiNp0aWLLd8LiS9DCHoActKN7OKTffpy/JZ06+1QSXYpatPN/aGk/wS4CUxIejuTTzLw5+059/JnSXz5EEs3VjbaEOy1l79DUsu2XGk1ATi8FVprvoZ0wxkWMO628wC2aIjvUc4L5J/lUBAKgujWk/ByApGsbMgtuRwppkM0hoOS/hNha8+lVFWWn6Q817Za0r0Grq26WxeeTKTJpKC0/LJEKIU+dgxsC274b+yAkwk3ZsvdEn92RyFdd76mVA9eXV0Z0tNz4EEiKwhuhxPDD5YoOWuPr6eW/n5Q0o8AGVvbBGJ9XXbfSRdfTnkhOfld6vdtKy+TaVLwIi0h/yw3x0hhizyASE65cYa/Qy8FuB57Lctrck30INebgzrl77daLfOaTMgxpuehYsfw8jUZRlFWzNFeaumHg5J+RNgdXrY2/q7fkWo92YorhT+EJKS03Pw7+x5k0ksKX+weeLr2vAcuurCTg5K4UknnJjSidyClvryPi4sLU7YE4BDwuMXwgFMLEA6HkUqlkM1mMT09jUwmY1Zx6zTc+0NJPyIkce1xVoxlZWlJNuDIP8tMviS79AYADLTc0rq7ufZuVp7XkiEHcxHMDcgDRH7Z17NBwhNuw0L4naS/jfD0juSGn4WFBczOzppx4FLfr7gbSvoRIMllL7Sg+0t3WCrH7AecpJfWUsp7CZm1J5FtEsv74u+45RTkz/J6gzwUeXAMIrutFJQlNJnA5M9Ij4UlP7m3zrbwJHw8HjfLPubn582ATd1uMzyU9CNCJskG9cHbqjJ7cKVdjpKuPRNgboSmi8yYnKUymdHn37uRwSatbbFvC13sn7U9E6lfkJl22QsvD0ySXXojMjnKltuZmRksLy9jdXUVy8vLmJ6e1pn3I0JJPyTsTLx04WWSTVpkQopeWA5zE5rIh9h2823LLu9LlujogVxeXprkop34swl/F9nd3Hneo7TqspzG8Vbct9fv/6TeA2DuTd6jLMuxiWhmZgaLi4tm3t7CwoLDtdck3nBQ0o8ISS5aZc7Hc7N+kgyU67o1ikhVnn0AuJHOjpdpNeVYbKrvpHchDyUZ18sEIb0Hfne7tuzpZ7KNM/T5xQ484Ceiy3Fgcq01KxhcvkHCc6Lu8vKymcbDBJ669sNDST8i7Cw4te9c1USCUaknO8hIeNtlp0trT84ddG1boisJz3IYSW9n36U3IuNs6SXYlQK38qRsOIpEIjdkt7FYzNGFx7q8HP4pPw+/32+Ga05OTmJ2dhZzc3NmGg8z9rJ5R0k/HJT0Q0LWtykUAYCJiQlXEY10/eU0HLfSmSS73PRC3ObayziZB46dPJSiF7v0JsuBMmzh/dsNOXaHXzweN3Pu2N4rp9ay/GdPvZFts3Ycz4EgmUzGzAagGEfd+tGhpB8BtOzRaBQ+nw/RaNQR/8ovWT6z42g5407KdAc1kdjZefvv7W44En5QMtHOztulPjsPAFxn1Un4eDxuZvKR+JTGSmJS2Wd3+bF0yVKfXLPF12SIEAwG1aX/DPANSs78B7Rn0QW2VZWW261E5pY0k5l6O34f1DVmW3f7u4zPpcWX4YUkvfREpLxXVgFo3e1tPiQ9LT37+Ul2u+mHBxLviVty5DRb2b8vX4+Zf7dGJMWtcP2QlPQjwiazW9lLfpd/lg+sW9JvlHux78v2NqT7bguJ7MqDbdltwtvLPeyFm3b1wT4IbW+C/2Y3HNlJTW2hHRpK+r817vhs/2oP8CCPYFAIIr/cDjFZjnPLO9CFv+vgGuSdSNjkVpJ/EpT0imvcFioMgpLxVwclvULhMbiSXmseCoXHoKRXKDwGJb1C4TEo6RUKj0FJr1B4DEp6hcJjUNIrFB6Dkl6h8BiU9AqFx6CkVyg8BiW9QuExKOkVCo9BSa9QeAxKeoXCY1DSKxQeg5JeofAYlPQKhcegpFcoPAYlvULhMSjpFQqPQUmvUHgMSnqFwmNQ0isUHoOSXqHwGJT0CoXHoKRXKDwGJb1C4TEo6RUKj0FJr1B4DEp6hcJjUNIrFB6Dkl6h8BiU9AqFx6CkVyg8BiW9QuExKOkVCo9BSa9QeAxKeoXCY1DSKxQeg5JeofAYlPQKhcegpFcoPAYlvULhMSjpFQqPQUmvUHgMSnqFwmNQ0isUHoOSXqHwGJT0CoXHoKRXKDwGJb1C4TEo6RUKj0FJr1B4DEp6hcJjUNIrFB5D4I5/9/1N7kKhUPzNoJZeofAYlPQKhcegpFcoPAYlvULhMSjpFQqPQUmvUHgM/x+ZXLvKEI5+dAAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 40; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 41; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 42; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 43; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 44; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 45; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 46; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 47; current eta: 0.5, current beta: 32\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 48; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 49; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 50; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 51; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 52; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 53; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 54; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 55; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO2dSXObV5amX8zzDAIgSHAWJUoUJYqSZTslK21nVkTltne17+hdb2rV/6C3/Rd6kxG964gqRzqinGWHJ9miRGuiBooUJxDzRMxzL9zn6uITSAIgnbaF80QwKFEgvg8Q3nvOPdNVtdttMAwzPKh/7RtgGOYfC4ueYYYMFj3DDBkseoYZMlj0DDNkaE/4dw7t/45ot9uIRCL44osv8MMPP0Cr1UKn06HZbA70fCqVCqVSCcFgEH/5y19w6dIlGI3GM75r5hdE1e2HJ4me+R3QbrehUqmgUqnQarXw8uVLfPbZZzAYDDAajQOJnp4vk8ng4sWLuH37NtRqdgzfBVj07xjtdhu7u7t4/fr1mT1nvV5HqVSCStXVcDC/M3jpfgfRat+s5WchVIPBwIJ/h2DRv4PIbri8APT7HPS7Wq2WRf8Owe79O86gQbxWqwUq0R70OZjfJmzp30FardavfQvMbxgW/TsIR9mZ4+BPB8MMGSx6hhkyWPQMM2Sw6BlmyGDRM8yQwaJnmCGDRc8wQwaLnmGGDBY9wwwZLHqGGTJY9O8gXHvPHAeL/h2Ea++Z4+BPB8OcIf/3pzD+8r++xn/936tIF2u/9u10hfvpGeaMSOSr+Nf/8xCNVhvrkUN4LM/xP//L0q99W2/Blp5hzohKvYlG680A6Xyl8SvezdGw6BnmjAi5zfhvd2agUgEBuxH//dNzv/YtdYXde4Y5Q/7HPy/gX/98Hnrtb9ee/nbvjGF+p/yWBQ+w6Blm6GDRM8yQwaJnmCGDRc8wQwaLnmGGDBY9wwwZLHqGGTJY9AwzZLDoGWbIYNEzzJDBomeYIYNFzzBDBoueYYYMFj3DDBkseoYZMlj0DDNksOgZZshg0TPMkMGiZ5ghg0XPMEMGi55hhgwWPcMMGSx6hhkyWPTvIL/EUdXtdvvkBzG/C1j0zImoVCqoVKpf+zaYM4JFzzBDBov+HUOr1UKtfvPfKv+5X8i61+t1NBoNdvHfEVj07xDVahUHBwcoFoviZ81mc+DnI5E7HI5TPxfz24FF/w5AFjmZTOL+/ftIJBKwWq0ATheAa7fbcDqduHTpEiwWC1v6dwQW/TtCo9FAOp3G9vY2UqkUNBrNmTzv+Pg4lpeXEQgEoNXyyebvAvy/+I7QarVQLpeRSqWQyWRQqVQGfi69Xg+1Wg2tVovFxUUsLy/D5/NBp9Od4R0zvxYs+neEWq2GfD6PeDyOdDqNarXa93NotVoYDAa43W44nU44nU4sLy9jZmYGNpuN03bvCCz63zHtdhutVgv1eh3xeBybm5vY2dnB4eFhX89jMBjgcDiE2L1eLxwOB2w2G4LBIIxG45ltF5hfHxb9GdBut9FsNtFsNkWwS61Wi6IWubhFaS37sZ703HS9RqOBarWKTCaDJ0+eYG1tDdFotOfn02q1MJlM8Hg8GBsbw+joKNxuNywWC3Q6HXQ6HbRaLWq1GhqNxrHCb7fbHffXy+vr9m/Kn8nPJV+DHnualOSwwqI/AxqNBorFIorFIhqNBlQqFXQ6HTQaDbRaLbRaLTQaDdRqdd+LgfJD32q10Gw2Ua1WUS6Xkc1msbe3h4cPH+LZs2cd6brj0Gq1MJvN8Hg8mJycxMTEBLxeLywWC7RarVjAKpUK8vk8qtUq9Hp9V1HSPTWbTbRarY4yYOXrlF+b8n1QvhfyIkLP22g0xPPrdDro9XoOMPYJv1unpNVqoVKpIJlMIhqNolKpQKPRwGg0dnzp9XrxAdVoNGIROOqDD3R++Omr2WyiXq8LwUejUezu7iISiXS49SqVqmuKTaVSicXIbDZjZGQEfr8fbrcbZrNZWHOyotVqFdlsFsViEQaDATqdruO+ms0marUaqtUqKpUK6vW6yOfTc8ivU74P+jd5UdRoNB2Pk8Ver9dRqVRQq9WgUqlgsVhgt9vF8zC9waIfEPrAVyoVpNNp7O3tYWdnB5VKBXq9HhaLBRaLBTabTfzZaDQK4Zxk/buJVha//DOyfAaDAUajEdVqVVheegzQaVm1Wi30ej0MBoOI1svXIFHW63Xk83lks1no9XqYTCao1Wq02200Gg1UKhUUCgUcHh4Kj6DVanWIWavVdvVkNBoNdDqduG+9Xi88JLofEnytVkOlUkGpVEK5XIZarUar1YLJZILBYPhl/pPfUVj0A0IufSqVwv7+Pl69eoXd3V3U63WYTCbY7XY4nU7U6/UT3V3gTbnscW4+CZGi7BaLRQTe/H4/fD4fstksGo0GyuWyWDhardZbe2E5CCi7zPTvarVapOiq1SpyuZyIAahUKuFtHB4eIpFIIJ1OI5fLoVarAYAQM3k3KpVKWG26F51OB5PJBJvNBrvdDqvVCovF8tbv0LXK5TKKxSKq1arwprhKsH9Y9APQbrdRr9eRzWaxu7uLra0tbG5u4uDgAK1WCzabDfV6HSqVCgaDAWaz+S3hdeMowcuWX14wLBaL8Day2SzS6bSwtrQfJ1HIopYDgbVaTSxM8sJCgrRardDpdKjVasjlcigUCmLBy2QyiMfjiEQiiMfj4t+0Wi2MRiPMZjMMBoPYMpCLTvek1WphtVrhdrvh9Xrh8/ngcrlgtVphMBiER1Gr1VAqlVAsFsVr0ul04p65UrA/WPQD0mw2haXL5XLiA0n/JrvQ5NaT5VO69yS0kwJbSuHT3+v1OsbHx5FOp5FIJJDJZFAulzsEptwSAOhYiOTn1Ol0sFqtcDqdcLvdsNvtMBgMUKlUqFarQvDRaBR7e3sIh8NIJBIolUpot9tiwaDXTRabXHRaZLRaLSwWC1wuF4LBIAqFgsgg0GLTbrdRrVZRKBRQKBRQq9XEYkCBQ6Y/WPSnRBa32WyGWq0WOe+RkRF4vV64XC7Y7XaYTKaOYJ5S7PR83cSuvCb9zGg0wm63C0vpdDrFHpesIAmDFgzZqmu1Wuh0OrFtMJlMcDgc8Hq9GBkZgcPhgMlkgkajQaPREHtqKgbKZDKiCrBarYpFgzwJWghlF51SgCqVCkajEdlsVixScuDOaDQCACqViogZkCdBW4xePCimExb9gJALbDQaxd663W7DYDDA5/NhfHwcgUAAHo8HdrsdZrMZer1eRO6Pi9Yr/9zt7wCg0WjENS0Wi4i+k2jkNBpBYqfXQB4IvY6RkREEg0H4/X44nU6YTCaREqvVatBoNKhUKlCr1UL4+XwepVIJ9XpdLGL1el38HkX4acGQtx2VSgWNRgMAxOKp1WrRarXEIkoe1eHhIVqtFoxGo6gfkGsjmN5g0Q8Iid5sNsNms8HpdIrott/vx+joqKhskwXfzbJ3o9efU5qLXN5qtYpSqSSsaTdByIE0o9EIk8kEt9uNUCiEUCiEQCDQYeFpG0FiJE+iXC4jn8+jUCigXC6j1WqJvbZ8LYr0U8qNRN9ut8UiRV4HzQNoNBqwWq1C9LlcDvl8HgBgt9uh1WpFloJF3x8s+gGQ974Ufa7VaiL67Pf74fF44HA43opGH2fdB4X29ZRNyOfzJ1pBEpnVaoXP58Pk5CRmZmYQDAZht9vFIkWCpy/aCtTr9Y54BkXt5SwEbV/oPhqNhviq1+sd2w36XXqfarUabDZbh+gLhQK0Wi3a7Tb0ej2q1SoP9xgAFv2AyBFum80G4Gc3lqLRsoUn69UtVXdaSEyFQgGJRAKJRAKHh4cnikGj0cBsNsPtdmNqagpzc3MYHx+HzWYTlXfKACJ5FK1WS+Tuc7mc2I/Te6JWq0UNAP29UqmI55G3HvIiIacJ6/U6LBYLVCqVqAosFosin2+xWIToOZjXHyz6ASFLSXth+vBSlZgctPslBU9ZhFgshp2dHSQSCZTL5RPz11qtFk6nE1NTU29Z+KPuk65XLBaRSCQQjUZxeHiIcrksrC+9L7QYUnFOtVrtKNKRKwyBN6LP5XJQqVQikEeipzJnu90uaiB4Tz8YLPoBoQ83BdHoA202m/9hgm+1WqLhZnt7G69evUIqlUKtVjtWCCqVCiaTCaOjo5ifn0coFILD4egose1Gq9VCqVRCIpHAzs4OIpEI8vm8qElotVqiaMZms8HlckGn06FUKglvRFlmC0BY/FqtJqrt6vU69Hq9yNPLAUCPx9ORBZCrCJmTYdEPiOyOUgGKHA3/Rwi+Xq8jl8the3sbL168wOvXr5HP50+0fBqNBh6PB7Ozs5iZmYHb7RZu+HHXrNfrSCaT2NjYwOvXr5FMJkUwjQpwNBqNyL2PjIxAr9eLop1cLidiBfLzytV6VFdPz0k/q1arIiVYLBZRLpc7BM/0Dot+QGTRk4WjvawcpT9rZMHn83mEw2E8evQIT548QTweFwG149Dr9ZiensbCwgL8fr9IjR13Tbre9vY21tbWsL29jUKhIAqRCIPBAJvNBo/HA5/PJzIa1WoVqVSqY4GUtyAketlrkMtwyapT/T2l+ljw/cOiPwWULpOtOjWMnJSSGwRZ8IVCAfv7+3j48CFWV1extbWFUql0YlBLrVbD6/Xi0qVLuHDhAhwOR1eXW3ndcrmMnZ0drK2t4fHjx4jFYiKIRk1DarUaRqMRTqcTPp9PjNgyGAwolUqw2+0ix95tUZTbdEnMVORDX1TVR/t5pn9Y9AMip6Qof01//yXc+m4W/qeffsJ3332Hp0+fIpFIoF6vn/g8DocDi4uLWFpawvj4uOiaO+66tVoNyWQSa2tr+OGHH7C/v9/R0EOPU6vVIiPg9XrhdruFwHO5nKipp/iHbO3lRUBuElIWGdEsAUr5/VIe1bsMi/4UdBP5L/EhJBHUajUUCgWEw2E8ePAA33zzDe7fv49oNCpaWo+7V51Oh9nZWdy5cweXLl0SwbvjaDabyGaz2NjYwPfff49Hjx6JQR2y4FUqFfR6Pex2uxi7Rb3uzWZTtBZTsLBbf4H8d4rsywsA/ZkWAgAs+gFg0Z8CWfRyh9pZWnml4Pf29rC2toavv/4aq6urCIfDPbn1Go0GMzMzuH37Nj744AOEQiHRDHMUlB3Y29vDt99+i7W1NSQSiSOHcxiNRrhcLng8HjidTjErv1KpdGx75C+54Uguzuk2eov+Tu+1ch4B0xss+lMgf3CVba9ngXIPTy49CX5vb0+kw45Dp9NhbGwMd+7cwZ/+9CfMzc2JHPpxNBoNZDIZPH/+HN999x12d3ePDJzpdDpYLBa43W64XC5YLBYYDAbRWEOWm6y33N2nnKCjfP0yct+A3MfA9A6L/pTIoqe/n1VpLe1pS6USYrEYHj16hG+++Qarq6vY39/vSfAqlQp+vx+3b9/Gn//8ZywtLcHlcnWdZqO8fqVSEdH658+fi9r3btcwGo2is1Bu1KEAHBXYKKPu9H6R4Mn9pz18t7Jlepxyyg7TGyz6AVHuReU/n1b0suArlQoSiQSePXuGu3fvYm1tDeFwGMVi8cTotUqlwsjICFZWVvDnP/8Zy8vL8Hq9x1bdEc1mE/l8Hs+ePcNPP/2ETCZz5GOphp+m99jtdhErkOcOyN14ykk+JGS5R4HSgcr3l7rx5P4ApndY9KdAmZZTfkAHhVzharWKdDqNjY0N3Lt3D2tra9jZ2UGpVOqp/NRoNOLChQu4c+cOVlZWEAgETqy6I+r1OtLpNJ49e4aXL18emf+nAN7IyAhCoRB8Pl/HRF3qhU8mk0gmk2IQhlx+K2dBaEGiYB19pzZiCkgqZ/sxvcOiPyW0Xz0qIt0vcloqk8lga2sLDx48wOrqKra3t7taym7o9XqMjo7i+vXreP/99zE6Ogqj0diTSKjcNhKJiHr+owKFOp0OTqcTY2NjmJqagtfrFWlAmrKTSCQQiUSQyWTElkQemSVbetkLkQN1ckqUFgeqImRL3x8s+jOgm6XvF7kBhQT/+vVrrK6u4scff8Tm5iay2WxPggcAq9WKK1eu4Pr165iamhK96b3QarWQzWaxtbWFg4ODY6v8jEYjxsfHcf78eUxOTsLlckGv14vIfzabRSwWQzQaFdN1lPUEclCO3HXK7ysHhtKkH7nUmekPFv0Z0c3S94pciUYjtbe2trC6uiqKb9LpdM9lp1qtFsFgEDdu3MDCwoIYOtErdALuixcvEIvFjnycwWCA1+vFwsICLl68iNHRUVitVmi1WlQqFZTLZSQSCYTDYcTj8Y4R2cDbvfckaLqHbu8jPU4eOcb0B4v+F6LXD6NccFIqlZBMJrG5uYnV1VXcvXsX6+vrSKVSPU+JUalUcLvduHDhAhYXFzE2NnZiPl55P9VqFYlEAi9evEAymez6OLVaDafTifn5eSwtLWFubg5utxtGo1EsYPl8HtFoFAcHB8LKU429nItXFjkdlaOnx/5SRVDDAot+QORpMqd5Diq8KRaLiEajePnyJe7du4fV1VW8evVKdLL1auV1Oh2mpqY63Pp+Dp9sNBrI5/M4ODhAOBzumqZTqX5uzQ2FQlheXsalS5eElddoNKjVamJkdjQaRSwWE512JHrZLVeKWK7Ck4d6EmzhTweL/hQoRd/PB7Fbae2TJ0/w448/4sGDB9jc3EQulxNjrHsVvNvtxqVLl3D16lXR5dbPfdVqNRwcHGBjYwOJREK8Lvn6Op0OPp8Ply9fxsrKCqampuBwOMRenhp0UqkU4vE4MpmMiNh3Cwh2K79Vno2nfJ/PYtEdVlj0A0KilfenvQ5ykAWfz+dFt9w333yDBw8eYHd3Vwy37OWDTde0Wq1YWFgQZ8pT7Xuv0FScly9f4vHjx8LKKwVnsVhw4cIFXLt2DefOnYPH4+k4nKLVaomofSKREIM2uo2rlt11ugdlZ1034QPo+jPmZFj0A0IWiQJO8hDJkyrdlBaeaunv37+P/f19cfptLx9ourbRaMTExATef/99XL16FR6Ppy8rT3v5eDyO9fV1PH36FKVS6a3HUbT+6tWrWFpags/n6xiTDUB0AsZiMaTTadRqtSMtvFxvT/ch5+dliy7HALr9nOkNFv0A0AeTJrpoNJoOgSnLRul36Evuh5ebZ6iWvld3ngRvMBgwPj6OGzdu4ObNm5ienj5xMIaSVquFXC6H9fV10S/fre7d4/FgaWkJy8vLmJychM1mEwU/9Pro7Lt4PC6GdHY7TUeuwqPxYnIrLf1et8pDFvzgsOgHgIRLwxpp/j3wdnRZjkTLLr1s4X/88Ufs7+93HPxwErKFDwQCWFlZwe3bt3H+/HmRK+/VyrdaLZTLZWxvb+O7777D+vo6qtWquA55LxaLBTMzM7h58ybm5+fFdeQTb5vNJkqlEtLptDjfTumGyw02dNAGTdShfbzs1tNzy4sG3TfTPyz6AVAeGmk0GuFwOMQHUx6ZJRfd1Go1HB4eCsF/9913oj2WZr71gmzhR0ZGcO3aNdy+fRtXr15FIBDoO0VXq9UQDodx//593L17F+Fw+K3H6XQ6jI+PY2VlBUtLSwgGgzAajW/NxqdZeBTAq1Qqb8UEqJSWJgnT9GASO92XHMVXvn75/pn+6En0w/zGdhMPnVgbDocRi8VgNBrh9XpRrVZFW6ns8lLTSSaTwc7ODh49eoR79+7h8ePHQvC9jn6SBT86Oorl5WXcuXMH169fx9jYmDjaqteAYq1WQyKRwL179/DFF19gY2NDWHl6jFqthsvlwvLyMj744ANMTU2J1lz5OuTJ0OGWlH1Q5uPJQ7Hb7XC5XGJqLqX66Lqyde/2GeRTawejJ9FzTvTNB6xarSIajeLZs2d49uwZkskkDAYDgsEgxsfHUalUxCGSKpVK7N+TySR2dnbw9OlTPHz4EC9fvuzIwfcK5ciDwaAQ/I0bNzA5OSmq4foRfCwWw/379/Ef//Ef+OGHH3B4ePjWY+12Oy5duoRbt27h8uXLHdNz5S0MufbxeBwHBwciPkH3LQveZrPB5/PB7/fD4XAAgOjCk+Mg3b7TtVjwg8Hu/QlQJLpQKAgL/+zZM9y7dw8bGxsol8uwWCyitjybzYrKtGaziUKhgFgshu3tbbx8+RKbm5tiXvxRUe1ukIU3m80IhUJ477338NFHH+Hq1aviZJqTxlgTrVYLlUoFsVgMDx48wL/927/hq6++QjKZ7FiAVCoVDAYD5ubm8Omnn+LGjRsIBAKioUbpZtNRV5FIBNFoFOVyWVwPgJgWbLfbEQgEMDExgdHRUXFaDQBks9mueXiluMmD4rRd/xwrehrDNGxvKrm0ALC1tYWnT58iFosJt/XVq1fY29sTp7FYLBakUilks1lEo1GRHy+Xy0gmk4hGo4hEIojFYuJEmH6DUDSr/vz586JzjirhqJX1JMFTYKxUKmF3dxd3794VFj4cDotGGBKdRqPB7OwsPvroI/zhD3/A9PQ0LBZL1+0DLSTJZBIHBwdIJBJCyLRA0Ex8v9+P2dlZzM3NwefzQavV4vDwENVq9a1MAP1/0DXouxzdH7bP52k5VvTZbBb379/Hs2fPRJR2GN5gEn2r1cLe3h5ev36NRCKBZDKJeDyObDYrPoBarVYU0tDxUnq9Xpzoks1mkc1mRRlqv8cw6XQ6WK1WjI2NYWFhATdu3MD169fFIRUUTOtF8HJ//t27d/Hll1/iwYMHSCaTHffUbv98Qu3o6Cg++OADfPrpp5ifn4fD4Thy+9BqtVAoFHBwcICDgwNxrDRBbr3X68X09DTOnz8vCojoeplMBnq9XtyDcs8uNybJs/A5it8fJ1r6v/71r/jrX/8K4Oeuql7GLP/eIcG3223YbDaYzWYh4kql0vFYaoXN5/NoNBrIZrNiv1ypVMSevZ+DGeR03MjICC5evIgbN27g6tWrmJ2dhc/nEwdNntR4QhF12mY8evQI//mf/4mvv/4am5ubqFarXe/Lbrfjxo0b+Pjjj8U+/ijBk2ufzWaxvb2NSCQimmvklliHw4FQKITz589jfn5eZABojj31+5PrLgtersVvNBqoVqsi8EeP5dhTbxwr+na7LcYdA+iI6r7LyJaDxjwB3SPI9EGkDzm57lQzP8gpLAaDAYFAAAsLC7h69SoWFxdx7tw5jI2Nwel09jwmigSSy+WwsbGBr7/+Gl999RWePHmCSCRyZADRaDRifn4ef/zjH3Ht2rUTR2yRa59KpbCzs4N4PN6RjdBoNDCZTPD7/ZiZmcHc3BxCoRBcLpfI12ezWXEMtVx2q0zbkeCr1ao4614+9po5mWNFT/tVwmAwDN2pIr2Ilma5dXND+xG8Wq2Gx+PBzMwMlpeX8d5772FxcVEE6uQjoU6CLHwymcTjx4/x97//HX//+9/x9OlTEWA7ivHxcXzwwQciDdjLSbbURhsOh5HL5cTCSTl5m82GsbExzMzMIBQKwe12ixHZjUZDCJ5OsSHhK/fstKDW63UxbJMWXB6o0RsnRu9lq0dNE8zbyAKXK8l6RafTwev14tq1a7hz5w5u3rwpJtFQbXs/lozGVz969Aj//u//js8++wx7e3snbs+MRiMuXryIW7duYXJyEiaT6djWXHLt0+k0wuEwEomE2AJRms5kMmFkZAQTExMIhULweDywWq3Q6XSid4EsOFUlyodTKlN15NqXSiUcHh6K02z7GRQyzPC7dIYMGklWq9UYGxvDrVu38Mknn2BlZQXj4+NCGP26rc1mE4eHh3j58iU+//xz/O1vf8Pu7u6J9QBarRZTU1NYXl7GwsICXC7Xib34VLuQSCSwt7eHfD7fMbqaApGjo6MYHx+Hz+cTr4ssM039zefzKBaLoruw28LZTfSDZEOGGRb9GaGMfveKwWDA1NQUbt++jX/6p38SU2upVbVfwVN8YX9/H19++SW+/PJLvHr1qqffNZlMuHr1Kq5duwafz9dTOS8V5CQSCRwcHIgz7oA3e3mv14vx8XGMjo7C4XCIbQptDUjw2WxWZEKOqraj10fNThRcHbZt52lg0Z8S5Uy8XgWvVqthtVoxNTWFTz75BJ9++mlHS2w/025kaB//8OFDfPHFF3jx4kXPv+v3+7GysoLz58/DYrGcuEemLEU+n0cikRBz/CjIqNfr4XK5EAwGEQqF4PV6RZmwUvDpdFpMyz0uFkKibzQaqNfrKJfLfRU5MSz6UyH30QNvAnjK4hIltH+/cuWKOFvuwoULcLvdfU+6kaEhGOvr6/jyyy+xvr5+YtCOcLlcWFpawsWLF+H3+0W+/KTrUe4/nU6jUqkIsWu1WthsNgSDQUxPTyMYDMLpdHYcgkGWmjryMpmMaDw66r2jjEi9Xu/4zqLvHRb9KaCz6Qkq6lF2lZGbTgc8TkxMYGFhASsrK7h27ZroS+83WCfTbv88omp3dxfffvstvvvuO6RSqZ5/f3p6WlTd9dKLT5a6WCwinU6LtCa1yZpMJoyOjooinEAgIKw8pRJJ8NFoFPF4HLlcTuznj7uu3HYrj9VieoNFPyDUGkp16HJOXjnS2WAwiHrzubk5XL58GRcvXsTExISIzp9m2CO52ZFIBN9//z2++eYbbG1t9SwE6sen2vpethZkqQ8PD8WkW0rv6vV6eDweTE5O4ty5c5iamhLVgwCEW55OpxGLxUTZbi9n8wFvynCVoudcfW+w6AeAOt3oHHa1Wi1cTQDipBbqF3e73ZiamsK5c+cwMzODsbExeDyenmvmj0PulltbW8Pnn3+OJ0+e9Fw56XQ68f777+Ojjz7C1NRUT3t5+STdbDaLfD4PtVoNn88nnpP28WNjYxgZGREdgLRY5HI5JJNJhMNhRKNRZLPZjupAWjiPaqmVMyXyabgs+pNh0Q8AHfJAllqj0Yi9pTwgwmq1wuv1YmpqCnNzc5iYmBDHPlEq7jQfUhJ8PB7HvXv38Nlnn2F1dfXIWfVK/H4/3nvvPfzlL3/BysrKiafZUsyCpgbRXr5Wq8HhcMBms8Fms2FkZAR+vx9erxdOpxNmsxlarbZjsUilUqJOP5FIoFgsCs+EtgDyEBIZpXWXB2hygc7JsOj7RKvVwuVyIRQKYXJyEna7XfTNk6XR6XWDV2gAABnBSURBVHQwmUzweDyYmprC7OwsgsGgGBN9Fgc1ULfcwcEB1tbW8Le//Q1fffXVsSfSEHa7XZxz96c//Qk3b95EKBSC0Wg8sfKOBnomk0lEIhGkUimoVD+fjmu32+H1eoXYLRaLeL0k+FKphEwmg0gkgv39fTFsg6w8HW0lW+5ubbXyl9xxx5wMi75PDAYD/H4/gsEgRkZGYDAYAHT2jGs0GjgcDkxMTGBubk6U0Z4mMk/Ic/b29vZw7949fP7551hdXUU0Gj3WrddqtfD7/bh69So+/PBDXL9+HXNzcxgZGenaIw90nsBDR07TkIxYLCZmBLrdbvh8Pni9XtjtdmHdVSqVqM0ntz4ajWJ/fx+RSATpdBrlclkInrYAFOXvVpWnnJ1HWysWfW+w6PuEik08Hg/MZrOwRBTFp4IUn88nhkScheDJmlEhzPr6Ou7evYu7d++KCT5Hfej1ej3Gx8dx8eJFXLlyBYuLi1hYWHir6k9Zb0CCoi5Cqrrb399HMplErVaD2WxGIBAQU3Bkd54EL88HjMVi2Nvbw+7urpgvQCOyaFAmXf+4SbiyZe+3i3HYYdH3gcFggMvlEs0iZJXkCbhUkDI2NoZAIAC73T5QKa3supJlj8Vi2NnZwfPnz/HgwQP89NNP2N7ePrL7kVpz5+bmsLy8jJs3b4o8PIm9W9ZA3rvTdXd3d7G5uYnt7W0kk0nU63XY7XZMTEzAYrHA6XQKCy+79FRMc3h4iGg0iu3tbWxubiIcDovBmXT+vPL8ANqjK118+eQb8kLYve8dFn0fmM1meDwecQqsHC0mwdPsN1nwvQaXZFeaOsgoJXZwcIBnz57hwYMHePLkCWKx2JEpLrVaDZvNhpmZGXz44Yf48MMPsbCwIO6J+taP6o0noWYyGezt7Ym5fq9evUIqlUKj0RBHX1NDjdlsfuv4aDlSHw6H8erVKzx//hw7OzuimIdqG3Q6HXQ6nRB3vV4/8n2TJ+coW3GZkzlR9PIbr9Pphq7GWS4J1Wg0osWVLCEFnih453a7MTIyAqfTKabanIRs0Uulkhi7tb29jY2NDbx+/VrsgWOxWEfrKtB5oIZarUYwGMS1a9dw69Yt3LhxA7Ozs/B6vaKW/qShG7VaTUzY+fHHH/Hjjz9ia2sLqVQK9XpdnFlHJbdUgSeLnWYLpFIp7O7u4tmzZ3jy5Am2traQTCZRqVTQarXEZF+1Wi3eV7L88j0poSlEPDKrf3iIRg/YbDZxssuVK1cQCASgVqs7prbodDrY7XaRu+9F8GSlarUastks9vf3sbm5idevX2N3dxc7OztiEk02m+34XeXJOcDP8YbJyUncvHkTn3zyScdY7F6q/ahNNp/PY3t7G3fv3sXXX3+N9fV1ZLNZNJtN4baTlSVrD7wZ2iEP1dje3saTJ0/w5MkTbG5uIpFIiK44Ejzw5gAMOT9/XCkzLbr075yq652+hmgYjca+xjX/XlGpVMJahUIh0Xm2srKCyclJ6HQ6VCoVHB4eIpfLoVQqod1udxzccJLI5Ch8NBrFxsYG1tbWsLq6Ks6Fp97yoyb2ENS8MzMzg48//hiffPIJLl++DK/X27O3QfdUqVQQiUTw+PFjfP/991hfX0c6nRZZAWqWofcJeDPNhsZXHyV4cumpP4EGgiin5FA0/rhptzRIg/roT1vkNEwcK3qz2Yx/+Zd/wbVr10TQZ1jcKIoQUw351NQUxsbGYLfbAUB8yHO5HHK5HIrFoqivJ5F1s1Ryd1kqlcLLly/x/fff44cffsDGxgbi8Tjy+fyJ77OcNXC5XFhcXMTHH3+MW7duDdS8Q4tQLpfD5uYmfvrpJ2xsbAjBy/Pu5EMnqdiGOuRqtRqSySRev36Np0+f4sWLF2JyME24oeeg6L58Zl29Xhets+TCH/f/Q1N35OO1mOM5VvROpxN//OMfcefOnX/U/fwmkKPHjUZDBKvkD5bBYIDZbIbFYoHFYhH5ZvIS6ANJzwe8cUnz+Tx2d3fx6NEj/PDDD1hdXcWrV69QKBR6vsd2uw2r1YpgMIilpSXcunULH3zwAWZmZuBwOPqq5afXStN8X758iY2NDWSz2Y7XIPcTUBdesVjs8EoymYyI9G9tbSEWi4lJwHIcgjIf9EULQrVaRblcFlb8OPeeFgS9Xn+qduRh40RLz/xMt7purVYLk8kkLHe1WhVVZ1R2ShaRhk1kMhlsb2/jwYMH+Pbbb/Hw4UMREe8FOoDC4XBgenoa169fxx/+8AcsLS1hdHS0r1NuCDlav7u7K9JytODRXp6ahygt12q1xMLQbrdF4c3u7i4ikYjIwSu3KHL+nhZHebotib7X94QWIbb0vcEpux45SkSyq0sfXprJLp/EWiwWEY/H8eLFC6ytreHRo0fY3t5+az78cdenwyKCwSAuX76MGzdu4MqVK5idnRVVdf1aeAreFQoFxONx7O7uIpFIoF6vC7eZAnYGg0F4NjqdTpxnf3BwIEpz0+m0mIAjB9qU15X/TOKWK/dOKrahykfyPPpJjQ47fIBlD/QyapqaUGg/TmWksqB2dnbw4sULbGxsIBqNvjVD/7jrG41G+P1+0Zp77do1XLp0CWNjYz3PwJeRC3AKhYIYd5VIJNBsNmG1WgFANBHRHH75WGm5lz6bzSKXy/U8yUYuo6WYAU3CPW4vT5DnIQfxuMOuN/gAy1NCH1Y6k13e39IoKOooo1Nu6WCMo1pHCZpCQ+OjFxcXcf36dVy5cgWTk5Nwu919d+zJ5a3UPJNOp3FwcIB4PI5GoyGClVQeS+k0sqR0kEehUOgIZPZioQn5THtlZV0vo8Opk5HSkWzle4fd+1MgR+JzuZwYCEEiIAtIB1seHh6KKrrjPthkWamFd35+HsvLy1heXsb8/DxGR0dht9s7Dr04qeBG7kajfbM8qiqZTKJUKsFqtWJiYgIAOqwnzZnP5XJIpVLiNWUyGRSLxb724HS/8n3TvfU6BYdmGthsNtEsxPQGi35ASERyM0o4HMbu7q44u45GOtPEVvmASLm4hiCx63Q6OBwOjI+P48KFC7hy5QouX76M6enpjn58WZRyoJGeU7agNK2GBl9kMhlkMhlxPHSz2RQTfkwmEwwGg/Ag5OO2m80m4vG4sPKFQqHvwZRUxShbaNni9/ocVBZNh2oyvcGiHxASfblcRjabRTweRywWQyKREAU7lLdWurzK/aecCrNarfB4PAiFQrhw4QIWFxfFuW80Pvq4QySVFr1YLCKXy4mBF6lUCqlUStyjWq0W0308Hg/cbjccDocICtLsPbmwJp/P4/DwEMVise9GFwp8UppNnkVwXAWe8jnUajXMZjO8Xi9sNhuLvg9Y9ANCAahyuYxcLicCWYVCoSOYRZ1iJFRqwSWrTu2kZrNZ9KRPTk5iZmYG09PTGBsbEx9s2Z2XBaIUeqlUEq57LBYTHkgkEhFFNMDPKdmRkRGYzWY4HA74/X4x2orq9Km3nY4tp3HVcjquV6gpicaI6XQ6UfRDz9OL6PV6PQwGA2w2m+h4ZNH3Dot+QGT3vlwuiyCWcpiGwWDoKFulaDNNjLXZbHA6nULwPp8PwWBQDKSgPSt9qOXSVNl1l4OGkUgEe3t72NvbEwE6irLX63WoVCoheLqGx+OB1+vtGNQJ/By0o3FgtIhQIdIggrfb7WKqjlarFQM0qtXqsXPxCLp3m80Gu90uFije0/cOi35ASPRUOQZ07lVlq04LAE3PtdlscDgcojef3GqXywWn0ymOx6Z9tTwdhv4sR9AzmQxSqZSw6jToghp1ZIFSgQ09t8PhEOInt57cbgo2Usnw/v4+wuGwsPK9pnKpotHlcmF0dFT08zcaDVGYVC6Xe0ph6nQ6OJ1OBAIBkb04zSThYYRFfwZQzpjy2PL+lP7NZDLBarXC7XaLOXIejwculwsOhwNWq1X8PvU5ABDbBCr4KZfLYp9OsQSaN0dWnfLlVNoqd6LRPdEMv0AggJGRETgcDnFtehyV5iaTSWxvb2NrawvxePzIM+2Pem8sFgu8Xi+mp6cxNzeH0dFRGAwGFItF7O/vi9hDuVwW25SjMBgMGBkZQSAQEKcBsZXvDxb9KaH9Ollxmu0uT3Yl6+5yuTomxbrdbjFtRg7QdTuO+fDwUATiEomE+KL0WS6XQz6fF5No6PryVB/KDNhsNvj9foRCIYyPj4vRXxStJ2+CAnjb29tYX1/H7u4ucrlcz+O1qUw5GAxiYWEBi4uLmJmZEefSZ7NZ6PV6sYjJNfrK4CDdF80sCAQCcDqdZzJ3cNhg0Q8IiYmEZDAYhKWWm0EoUk17eIvFArPZDLPZ3GHVKTAoH/dEQqfMAH2nc98o7y8f+CjfH32nhYlc7LGxMczNzWFmZqYj508LDpXDptNpvH79Go8fP8aLFy9E8U6vEXaz2Swagq5fv44LFy4gEAjAaDSi2WzC4XAAgMguUNESLTpyLIS2TpTdcLlcHMAbEBb9KZAFReKXrQ7Nz6M9OO3DK5UKyuWy6FQjyylPnE0mk4hGox2VfOl0umt2QM7LA29SghRfoKo+l8uF8fFxzMzMiIM3PB7PW6f0VKtVZLNZ0Q//9OlThMNhkc8/CXLpR0dHceXKFbz//vu4fPkygsGgaAhqNBrQ6/Wo1+vI5XKiZqDRaCCfz3fEDORiJafTCafTKWYWsGvfPyz6U0Cipw8l8CaVRxVqarW6o1qNhEXRdiojpcq+bDaLRCKBSCQixmOR2KnAR3bflXP65IVITmsFAgGMj49jYmIC4+PjCAaD8Hg8sFqtoimIFqdcLof9/X08ffq0ozHoqAYaGYoX+P1+XLx4EdevX8fS0hJCoZCY+y+n6OgYazoph0ZwUeUivT6tVgur1SqCjTSjcNj7QgaBRX8KlFZdDrbJKTxqTqG9eTabhd1uh8VigclkEiIoFovIZDJIJpMizSaLXU7VKT/scn280WgUB0/Q8VIkdIol2Gw2sb2g1J88l/7ly5diph2dYtOL4A0GAzweD2ZnZ3H16lVcvHgRY2NjIlBIiyM1EdGJOBMTEygWi6IyMJvNivhEu90WHYZ0CCYN2+DR1/3Doj8D5I61crks0k/ypBhqnslkMh1BP7kbr1wui2q3Uqkk3Hh55LPyAy4H6fR6PSwWi3Djp6enMTMzg1AoBJ/PJ2bSU5cc7eFpoaL+gdevX+P58+di+i1V4h2HnIcPBoOYn58XkXoaJqqsJKQAqNPpxOjoqJidp9frYTKZxCm2JGx6r6jBqVgs8tn0A8CiHxA5UAa86baT9+1kqZR5fAreyak58hTkfnKy7t0ET9el5ySr6ff7MT09jfn5eczOzmJ8fBxer1ekBEns8v6d6vFpAAbNt6ciHLr/4/oF5EBhMBgUh3QeN5RTTmdS7p0WOdqi5PP5jhhGtVoVHtPh4aGoQaD4CHMyLPpTIAtfrpAjwcpWWg5KyXtvORagPH5ZWa+vDNTJe3eHw4FAIIDZ2VmcP38e8/PzIh0nnyknX0fumqOjpnZ2drC/v49UKiUET9sGeo2ygGnRMRgMsFqtcDqdcDgcwg2Xr0clyTKy8B0OB9xuN4rFovB0KOhJi1ShUBCip4amWq0mZvkzJ8OiPwWycCmCL1t+uctNaR3lcc+yiOTJsHKATvmdtgu0f5ct/Llz54TgrVZrh+DJnaf4AQ3PCIfD4thoOnmG4hFyv0C37QU1z1CVHwBRLVgoFETwjubjK0dcyw1HRqNRPI6CotVqFZVKBbVaTVh/al3O5/NiG8Wi7w0W/SmQ8/R0ygvt0ymdJKe4ZMHILr/sMSgXgqMCdlQbQFV+5FJTeSoV29C16IvESHX0BwcH4vTYdDqNXC4nTp6hOX8UOJO3GXKVH31R1yEN5ZBTgcp4Ar022buRS5upKImsPtUj6PV6kbakGEgvMQfmDSz6AZGnw5pMJtjtdlE7Ty2ncsS9l/FPstiV35UuvewSU7EKBcwAiLSgXCsgN+VQDUAkEhHtwPL0G4oT6PV6kYWQT5VRbj/klCNdn/r3C4WCWIwsFkuH8GmCD3UH0jFeqVRKpPFKpZLIYMhCJ9e/nz4AhkV/KuRKN6fTCZ/Ph1QqJcZMEdRBJltK5d6evshDoIMg6N+BzqAZiV4ezU1z+jKZDBqNhtjn0iReEnwikUA0GkU8HheTb+T0F+3T5QEXtIjJpxzJR0rJM+uVU4PS6TSm/v+5AXQWIHXGkXdAsYVYLCYWImXKkuIk8uRhPtaqf1j0AyJbeko7+f1+5PN54RKTkElUsuUnZLF3i+zL4pNdf3o8AFHFRm54LpcTrjW1rebzeVEDQG58oVAQ90XPT1sTSgGSp0H7Zvo7BSxpoZDdfWo3phOAaFRYsVgU2QT51F+ayrO3tycCiYlEQlh0eWuhPFNAnt3H9AaL/hTI5aFUZFKpVDqCVvRVLBbFwEy5i0wWMI1y1uv1QvRyuksuzCF3myLbdMyWwWAQwzbkQR/5fF5EvmkRov00eRMUA5BLislDUVpzefuidPVVKhVqtRqq1ar4IktN+3WHwwGdTicWqUgkgu3t7Y6z+2j+vdzLIENbEB5/3R8s+lMgi4X217VaTVhMstT0RWKQ029yBoC+y2687GIfldKTvQp5EIUy90/usHL4JF1X7gwkLwF4Ex+gtl5aMI4alSVH5qmVV85w1Ot1OJ1OaDQaVKtVMS1YOd1HWXJM90oLKXUvcrquP1j0p0QWPo2dog+p7IrKQpXr5uk75cPlen1KQ8mWnYQsW1hZFCQ05Rlxcr1At/ShvO0gD4GuTUU8yjPmjttH02tSqVSiHoBm5rfbP5+Go1KpUCqVRGAxHo+LgzLkGgcZalW2Wq1ieg5Pw+0PFv0ZoCyUoXFODodDlNVSFFur1Xac0yZbV+CNC0/eAf2MBCAvIPJ+WvlFz6+cMntUVZ/8OBI88ObMOLrnXkdUy/dNWwE61kulUomTfSh9SHP3yMIre+rlvgKn0wmPxyOCgjxIoz9Y9KdAFlW33m9yQ+VgHIlIWbQjV/MpZ9nTY2Shy3lt+TFK8SstuPL+5bFYJDS5WIh+3o/Yu0GpuWKxCLVaLUZny6O05aAdvS45g6HX60XHYCgUEmO3KBbB9AaLfkBki0qWUE4r0Xf5z7Krr9xbk8jJzaefydeTU37dxC7f13Fi7/Y65AWg27+f1XtGM/Tb7Z9n79HkXnqflIsLCd5gMMDtdmNiYkJMCg4EAjCbzWzl+4RFfwrkllT5A5zP55HL5URTCBWY0J6YPtxHleeStT1O9PSzbt/l5+tVsGcpbvn6ssdDiwq9B/Se0d+77d/lEV+Tk5NYXFzEwsICQqEQXC6XGNXN9A6LfkDI2lKxCLV60h6ectRyYwg1kMgWTSl6pXvd7bqyQOXf7xao+zWhQh+9Xt9Roix3I8rBwW6i1+v1cLlcmJycxLVr17CysoJz587B5/Md28HHHA2LfkDIysuCl/voSdhyMwk1yAAQkXql6Gk/ryzLJU4StOwRyHt1+fsvvSiQZad2X4fDIU7nIbee9uG0rVCOx6Lfd7vdmJqawtLSEm7cuIGLFy8iEAiIvTy79v3Doh8Q2p/KLqoscup+o8CcxWIREXxaHJSFOpT6kwOAcq5e2XXXbVGQq9aokIasabethdwNeNqmFZ1OB4vFIvoQ3G63mGlHe28agEEZDbm2ntKVWq1WpD8DgQDm5+dx6dIlnD9/XgzlYAs/OCz6UyJbThK7XFtPQyk9Hs+R3gD9LqX8qKqOPASy+nS9o+5DDiqSyEnwdD1anORR03J0Xs7vy3/u1lmn9ErkKTiBQAA+n6/jxBzqDaCWWHo/aLwYpQrpPfN6veKIr6mpKfj9flG+yxZ+cFj0AyIX5DSbTTHWWblfpW4wEqEcxZcr6uRDHelL7tHvloZT/l3OItC15e9UPitbeWWAUBZ7t2Eg8naFFiga/W2xWOB0OuH1eoXg5Rp76vKjGf1Umqxs9qGuxZGREYyNjWF0dFR06LFLf3pY9ANCU19VKhUsFkvH/llOy8mW9agpOnJeX1m2q4zgH/clF+1Q0wvNzyeRyR6GspJPvoayuYVeH8UdKDhHrb0ejwdOpxNWq1XMFuh2gAf1ydN9UX6+2WyK46flOACd/iMfnc2cDtUJQZ3fRhj4N8pRabTjrKgseGVbbbchGkdd96jvclWdfAyWPGhTLoDpVuknu/1yV5/8RZae9vAkeOqV7xaIpGvSdkO+p1ar1VHRqDwMRN7iMD3T9Q1j0f/CdEutkcUklAMzzuJ63VpR5YYd5b9RM45cbgt0bj1oqAa52LKHIrfknvQ65HuTvR+5mlEuQ2YGhkU/7HQr1T0qmKfcgshbD7mHna3vbxoWPXMySs/kLL0Q5h8Oi55hhoyuoufcB8MMGSx6hhkyWPQMM2Sw6BlmyGDRM8yQwaJnmCGDRc8wQwaLnmGGDBY9wwwZLHqGGTJY9AwzZLDoGWbIYNEzzJDBomeYIYNFzzBDBoueYYYMFj3DDBkseoYZMlj0DDNksOgZZshg0TPMkMGiZ5ghg0XPMEMGi55hhgwWPcMMGSx6hhkyWPQMM2Sw6BlmyGDRM8yQwaJnmCGDRc8wQwaLnmGGDBY9wwwZLHqGGTJY9AwzZLDoGWbIYNEzzJDBomeYIYNFzzBDBoueYYYMFj3DDBkseoYZMlj0DDNksOgZZshg0TPMkMGiZ5ghg0XPMEMGi55hhgwWPcMMGSx6hhkyWPQMM2Sw6BlmyGDRM8yQwaJnmCGDRc8wQ4b2hH9X/UPugmGYfxhs6RlmyGDRM8yQwaJnmCGDRc8wQwaLnmGGDBY9wwwZ/w8EtWxXXonfKQAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 56; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 57; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 58; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO2dR3ObZ7bn/8g5EUQgAYpJjEqkREpWty3J9u3F9HZ2dz81u9nc1XyD2c5XmE1XzW7qVvmWq7vt6itbWbIlirJEUYwgiUTkDBCYheo8evAKJALZ3bZwflUoJfDFCwj/55znpEfVaDTAMEz/oP5n3wDDMP9YWPQM02ew6Bmmz2DRM0yfwaJnmD5D2+bfObT/G6LRaODg4AB//etf8fDhQ2i1Wuh0OhwdHfV0PZVKhUKhgOHhYfzxj3/EhQsXYDQaz/iumb8jqlZ/2U70zG+ARqMBlUoFlUqFer2OtbU1fPPNNzAYDDAajT2Jnq6XTCYxPz+PL774Amo1O4afAiz6T4xGo4GdnR1sbm6e2TWr1SoKhQJUqpaGg/mNwUv3J4hW+2EtPwuhGgwGFvwnBIv+E0R2w+UFoNtr0M9qtVoW/ScEu/efOL0G8er1OqhEu9drML9O2NJ/gtTr9X/2LTC/Ylj0nyAcZWdOgr8dDNNnsOgZps9g0TNMn8GiZ5g+g0XPMH0Gi55h+gwWPcP0GSx6hukzWPQM02ew6Bmmz2DRf4Jw7T1zEiz6TxCuvWdOgr8dDHOG/L+f9/DH/30X/+3/PEEiX/ln305LuJ+eYc6IWLaMf/u/z1GrN/DqIAO35TX+13+9/M++rY9gS88wZ0SpeoRa/cMA6Wyp9k+8m+Nh0TPMGTEyYMZ/vz0BlQrw2434H19P/bNvqSXs3jPMGfI//8sc/u0PM9Brf7329Nd7ZwzzG+XXLHiARc8wfQeLnmH6DBY9w/QZLHqG6TNY9AzTZ7DoGabPYNEzTJ/BomeYPoNFzzB9BoueYfoMFj3D9BkseobpM1j0DNNnsOgZps9g0TNMn8GiZ5g+g0XPMH0Gi55h+gwWPcP0GSx6hukzWPQM02ew6Bmmz2DRM0yfwaL/BPl7HFXdaDTaP4n5TcCiZ9qiUqmgUqn+2bfBnBEseobpM1j0nxharRZq9Yf/Vvn33ULWvVqtolarsYv/icCi/4Qol8vY399HPp8Xf3d0dNTz9UjkDocDjUbjVNdifj2w6D8ByCLH43E8ffoUkUgEFosFwOkCcI1GA06nE/Pz8zCbzSz6TwQW/SdCrVZDIpHA1tYWkskkNBrNmVzX7/fj4sWL8Hq90Gr5ZPNPAf5f/ESo1+soFos4PDxEMplEuVzu+VpqtRpqtRparRZzc3O4cuUKfD4f9Ho9Go0GR/J/47DoPxGq1SpyuRyi0SgSiURPolepVNDr9bDb7XA4HBgYGMDVq1cxPT0Nh8NxqqAg8+uBRf8bptFooF6vo1qtIhqN4t27d9je3kYmk+nqOmq1GjabDS6XC06nE4ODg7DZbHA6nTh37hxsNhu79p8Q/D95BtTrdRwdHeHo6EgEztRqtShqkR8APnKPO3WX6doUSa/VaiiXy0ilUlhdXcVPP/2EcDjc8X2rVCoYDAbY7Xb4/X4EAgF4vV7Y7XbodDoYDAYYjUbUajXU6/Vj4wTyfSkDhye9t1b/pvw7+XrK66tUKvY+eoBFfwbUajXkcjnkcjlUq1WxH6aHRqMR+XONRiO+rO0WAyVk2Y+OjlCpVFAoFJBKpRAKhfDixQu8fv0ahUKho3uWBT88PIzx8XEMDw/DbrfDYDCIUt5KpYJ8Po9KpQKtVttSlLTg0eJQr9c7WvA6eQ4Jna5LrwEAOp0Oer2evZAu4U/rlBwdHaFUKiEajWJ/fx+FQgFarRZGo7HpYTAYoNfrodPpxGJAAbNOFgD68h8dHaFaraJQKCCdTiMSiWB3dxcHBwfI5XLi+SqV6th0nUqlglarFaL3er3CpdfpdOI+1Go1KpUKstksisWiEBhdm0RYLpdRKpVQKpVQrVZxdHQkfl6j0YiFTvn+6L3TczQaTdNnIb/nWq2GarWKcrmMcrkMlUoFi8UCu90ursN0Bou+R8jilkolxONxbG9vY3NzE6VSCXq9HmazGRaLBRaLBVarFRaLBWazGUajsUn89EWXxa9Wq1tGyY8TMVlWg8EAk8mEcrmMWq3WtN0glJZVq9WKe6HXo+up1WocHR0hn88jm81Cr9dDr9dDpVKJWEKxWEQmk0EqlUI2m0W5XEaj0YBGoxGWmARNr0+/0nMMBkPTokifibywVCoVlEolFAoFFItFqNVq1Ot1mEwmGAyGs/7v/aRh0fcIufQk+LW1NWxubqJWq8FkMsFqtcLhcMDpdIqiFtmtly0a/RsJXSl4+e/IMhoMBlgsFjgcDrjdbng8HgwODiIej6NSqaBYLEKlUrUUPtFoNISgqtWqcJtJkAaDARqNRmQGSMSNRkO4/YlEAtFoFNFoFJlMBpVKBWq1Gnq9HiaTCUajETqdToiUXpcWHPqs7HY7rFarEDF5B/V6vUnwhUIBpVIJGo0GRqORC4Z6gEXfA41GA9VqFYlEApubm3j79i3evn2LUCiEer0Oq9UKl8uFRqMBnU73UTVbJ4E95b/L7q7sYjudTvh8PiSTScTjcaTTaWFtS6USVCpVy7p52YrKXoEseJvNBqvVCp1Oh2q1imw2C5VKhUqlgkwmg8PDQ+zt7SEUCiEcDiOfz6Ner0On08FoNAoR05aB3PRarQYAYuFyOp1ii+F0OmGxWISHQKIvFArI5XIolUo4OjqCTqdDvV5vGTxkToZF3yO1Wg3FYhHpdBqZTAa5XA7FYhGNRkO4m7S3N5vNMJlMwvIZDAbhxsrufbsAn2zxVSoVjEYj6vU63G43AoEA4vE4IpEIEokECoWC2F8rIaG0ioSr1WoYDAY4HA4MDg5icHBQBPeUgt/d3cXm5iZ2d3cRi8VQLBYBQGxvaDuj1WrFdqBcLqNSqYjFy2w2w+12I5lMIpvNwufzwe12w2KxiJ+rVCrI5XLIZDKoVqviczg6Ovq7zA741GHRnwISDQXFTCYTVCqVyHV7PB7hdpMFkwXfKoh3nNhl5OcYjUbY7Xa43e6mYBwAYb1bCRx4n1akPTXtpy0WCwYGBuDz+eD1euF0OmE0GqFWq4WFlgN8iUQC8XgcqVQK5XJZuPYUba9UKsLbKJVKKBaLKJfLODo6glqthtFoRDqdRrFYbPJIarWaWDwpbpDNZlGtVsX7oy0JW/ruYNH3CAnGaDTCZDLBZrOhUqnAYDDA6/UiGAyKvLfL5fpI8K1EDpwsdCVyIIw8CRJYpVIRwcbjRKFWq8We2mq1wul0YmhoCMPDw/D7/XA4HDAajSIIR1Y2n89DpVKhXC4jl8shn8+jWCwKQWq1WuHKazQaEQMoFovI5/MolUpiASkWi6hUKgDQFFSkIJ1KpWryqI6OjsQiVKlUTnx/TGtY9D1CoifROJ1OEZgaGhpCMBiEz+fDwMAArFYrDAaDiNYfJ3QlnRSvyJF/sqaya39S2o727U6nE36/H2NjYzh37hy8Xi8cDsdHATWNRoNarSYseaFQQCaTQT6fF3EEOWBH90oBQ0q3UWoPgMg0yJkEeh2LxSJEn0qlkMlk0Gg0YLPZoNFohMfAou8OFn0P0P6XRG+z2VAul0V6bmhoSAjeZrMJC6+M2MvXOw0UWCwUCmJv3E70ZOUHBgYQDAYxOTmJyclJ+P1+EbyTK/AoD06FMOVyGdlstkn08naFCpLI0sslw7S3p/cub5Poc6pUKrBarVCpVOJ95XI5cT29Xi8WDBZ9d7Doe0SlUonIvM1mE660zWaDx+OB0+mE1WoVgSyymPSzZwVZ0Ww2i2g0ing8jnw+39YCarVa2Gw2BAIBTE9P4/z58xgeHobVav1o+o78nmn7kE6ncXh4iHQ6LSLqtEjIKTudTodKpSIKauQAHNUD0H2m02kR6a9UKjCbzU2WPp/Pi1oBs9ksLD0H87qDRd8jsqW3WCxCJOQutxL8WYod+FACWyqVEIvFEAqFEI/HhQiPQ6V6303n8/kwMzODqakpDA8Pi8aak+6T6hOi0SgikQhyuZyw2soaAgoqkjufyWTEVkE5iUcuK1ar1ahWqzAajQDe7/uz2SwKhYKownM6nTzGq0dY9D0il7LSl1utVovqO9rDH+fSnxZyl8vlMpLJJHZ2drCxsYFUKoVqtXqiENRqNRwOB8bHxzE7O4tgMCgs/En3SdV5kUgE29vbCIfDTf0GVIlnMplE0ZBer0exWMTR0REymYz4TOSMAnlJ5XIZ+XxeiF6n04l6AwoA0uJBAUA5V3/Wn/GnCou+R+QiFopSU96ZLPzfU/CyW7+7u4u1tTXs7Owgl8u1tXxarRbBYBCzs7MYHR2F3W5vK3hKv0WjUbx+/RobGxuIxWIolUoi5w68b4Kx2Wxwu93wer3Q6/XI5/OoVqtIpVIfbXUAiPQd7fUpKKnRaESvQalUElsEqsqj5hu29N3Bou8RZe04fZlPitKfBSR4Ko09ODjA6uoqXr16hWg0KtJfJ2E2mzE1NYX5+XkMDg7CYDCc2LBCr5dOp7GxsYFnz55ha2tLWHCqtqNtg8PhgMfjEdN2qCY/FouJdJtcZSi/L+ogpH06LTaUhtRqtU25fqZ7WPQ9QhF8rVYrUli0z/9HCL5YLCIcDmN1dRXPnj3DxsYGCoVC26CW0WjE6OgoLl26hImJiaZ4xEmvWywWsbm5iadPn+LVq1eIx+PC0spRe7PZDKfTKYqSqF4/n8/Dbrc31eJTQ4/8OlQaLLfT0t6d6iBKpVLTwsBufXew6E8BBa6oDpz+3KqU9rTIgi8UCkLwDx8+xMuXLxGPx0Xu+yQ8Hg+WlpZw4cIFeDweUV570uuWy2VEo1E8efIEDx8+xN7enqjrl11rjUYDi8UCl8uFgYEBuFwu8VnYbDYR6zju85Hz+pR9oNSj/Gc5VUfXYjqHRd8j9IWlphA5P33WX0Sl4CORCF6+fIl79+7h0aNHCIVCKJVKJ1p5lep9//nMzAx+//vf4/z58zCbzW2tPE3ZffXqFe7fv4+VlRUxqEN2zYEP+3kau2W1WoU1N5lMoolGFj29Pv0qC58sPT2UAzWUvQpMZ7DoTwF96ahg5KytO9Dawr98+RJ3797FgwcPsLW1JfLyJ6HX6zE7O4tbt27hypUr8Hq9Iid+HJQd2N7ext27d/H8+XOkUqmWz5Ur/BwOh0hZUiVfq1Fb8udFW6VWC6ayd0DuBqRFhOkcFv0pkL+wcr/7Wbv11NEXiUSwurqKH374AQ8ePMD6+jry+XzbXLXBYMDo6Ci++OIL3Lp1C8FgECaTqa1YqtUq4vE4VldXcf/+fezu7h77XCpBdjqdTXt3qrGnSjxlxF0WPmVAaNtw3J6d0qWtMgFMe1j0p0TOOcuiPwvk4pt4PI7Xr1/j3r17ePDgATY3N0Uq7KT6euD9gRW3bt3Cl19+iZmZGTFiqt1rF4tFvHv3Ds+ePcO7d+9QKpWOfT5V+JGVl3voKf9OBTZ0z3TfspUn0VPunmr5lV6BPJWHRd8d7BedAvlLKEewzwI5fZVMJrGxsYFHjx7h8ePH2NzcFL3l7XLUXq8XV69exVdffYXLly/D5XK1desBiFLbly9f4qeffkI6nT72uRqNBmazWezlTSaTyLGXy2XRf59IJJDL5ZqKaggSsixm2ZLLe365HZgDed3Dlr5H5Dr64x69Qq4tDazY3t7Gs2fP8PTpU6yvr4uGmnaCNxqNmJ2dxe3bt7GwsNDRPp5ev1KpIB6P482bN3j79u2J+X+y8oODg3C5XKJ8lqbtxGIxHBwcIBaLCdHLI8Tk2IgsdDlAqtwCUP8/i757WPSnQNlAoxR8L19GWfBUbffixQs8evQIa2trSKVSYvLMSej1evj9fly9ehXXr1+H3+9vW4Qj30Mul8Pe3h52dnaQTCaPfS4NwhgcHMTw8DCcTif0ej2Ojo5QKBRweHiI/f19hEIhJBIJEYOQRQ98mA0gD95stYjKgz9I9Ex3sOhPiTLPfFoLT2Wn2WwWe3t7eP78OR4+fIhffvkFh4eHTXPfT8JiseDKlStYWlrC6OhoR0U4xNHREZLJJNbW1rC3t3fiAqPT6eB0OhEIBDA8PAyHwwGtVitKhA8ODrCzs4P9/X2xYMk5djnroWzNle9X6REoJ/gyncOi/zvQ7RdRWYJKFv758+e4d+8enj9/jnA43LZ7jl5bo9FgeHgY165dw9zcHBwOhxgx1Qm1Wg3xeBy//PILIpHIia9lNpsxMjKCiYkJ0ZqrUqlEI9D+/j52d3dxeHiIQqEgrDxZc3k0difbI4rcK/P9TOew6HvkpHny9OdOryNPlkmlUtje3sbKygru37+P58+fIxQKfTRD7iRcLhemp6dx+fJlBAKBtlV3MvV6XbTqbmxsnOjaG41GeL1eTE1NYXp6Gj6fT0z+LRaLot334OBABB7l/ncqbDpuUq88MlsZ9GOh9w6L/hScdvyyspY+kUhgY2MDP/30Ex4/foyXL1/i4OBAWMhOXkun02FsbAzLy8sYGxsTo6U6pVarIZVKYW9vDwcHB8em6bRaLZxOJ6ampnDx4kWMj4+LzACNq45EIjg4OEAikRBeinIv3+rzkAdtHDfcU/l8pnNY9KfguCmznf4sNZcUCgVEo1G8efMGT548wZMnT/D69WscHh42tZC2Q6fTYWBgABcuXMDi4iJ8Pl9H0XqZcrmMUCiEtbW1Y628Wq2G2WzG6OgoFhYWMDc3h6GhIVgsFiHUbDaLSCSCeDyOQqHQJPiTREpip2OslMU88q88Mac3WPQ9IteBA2gKSnX6s7VaTQylePXqFR48eIBHjx7h7du3yGQyHQ9+pNe0WCyYm5vD4uIiJiYmYLfbu7LyR0dHyOVyWFtbw8rKCrLZbMvn6fV6DA8P4/Lly1hYWMDo6KgI4MmDLqLRqBiNfZLg5Xp7Erm8FWg11Veux2e6g0XfI/QFlSe5Uvlou661Vs0zP/zwAx4+fCgKb+TW0ZOgwJ3RaMS5c+fw2WefYWFhAYODgyL91en7oYM4V1dX8fr165auvVarhcPhwNzcHJaWlnD+/HnRk0/vvVQqIZ1OI5lMNs3rayVQOWJPiyhZePkUXLpHQtmIw3QOi74H5Eg7nd0m15K3cvnl0VDk0ofDYaysrAjBr6+vi/FTnXyRSfAGgwHBYBBLS0u4fv06xsfHO+qgk6nX60gmk1hZWRH98q3uwWw2Y2JiAsvLy7h06ZII3lE3HS0eqVQKyWRSTNZpFfhUnmorf7ay4Fvt3Xk/3zss+h6QLXU+nxdTcYHm02PkBUC2Yvl8XnTL3bt3D/fv38e7d+/a1tLLyBbe6/VicXERt27dwuzsLAYGBrqy8jTDfmtrC/fu3cPr169Fo4yMTqfD8PAwrl+/jsXFRYyMjDSdqENueD6fF1a+lcci9yhQzp0KbeQAnjKQ1+q+me5h0fcANcEkk0mkUilx9htZJWUjiOwZyCOu7t+/j0ePHmFrawu5XK7jCL1s4T0eD65du4Zbt25hYWEBPp+vqxQdldzu7u6KIRn7+/sfPU+r1WJwcBBXrlzBzZs3MTU1BYfDIerf6b3Tfp7O0zvuuGyNRgO9Xi9O56F7puu0cuuV3hRb+t7oSPT9/MG2Eg8Nedzf30c0GoXBYBBn1zkcDpjNZhE1lzvlkskkdnd3sbq6iqdPn+LFixfY2dnpqD1Wvh+yjj6fD1evXsWtW7ewtLSEYDAIi8XScecZCT4SieDx48f461//io2NjZYTeCwWCy5fvozPP/+8aeqOXFwjT+eNx+MoFostrTzVz9NBIVarVZTu0msrRd3qs2Hh90ZHoudCiA+uZKlUQiQSwZs3b0RprMFggN/vF6eukgVUqVTiHPd4PI7d3V28fv0aKysrePPmjZgm283sdpVKJY7OWlxcxO3bt7G8vCxKbTstTSXBh8NhPH78GH/5y1/w5MkTZDKZj55rtVoxMzODzz//HJ999hmGh4dFJ528hSHXnjrqlFsVefAFjcmmU4DUarUYa63spz/OtecgXm+we98GqoMn9zuZTIp8+tu3b1EqlWA2mzE0NITDw0MEAgG4XC7o9fqmgyG2trbw7t07bG1tIRwOdxWhBz4Ihspel5eX8cUXX2BxcRHBYBB2u73jBhSquotEInj69Cn+/d//HT/88APi8XjT/ahU76fbjo2N4euvv8YXX3yBsbExMSOfngN8WETS6TRisZiYvy9fi96DyWSCy+WC3++H1+uF2WwW3lMul2t6D8qIvfx72vez8LvjRNHTdNV++1CpGQQANjY2sLq6inA4jFQqhXA4jPX1dYRCIWEVbTabsG77+/uwWq0A3n9+iUQC0WgU4XAYsVgM2Wy2pdvbDo1Gg4GBAczMzGBpaQmfffYZ5ufnEQgEhIVvJ3iyjoVCATs7O3jw4AH+/Oc/i308Be/k1OPo6Chu376NO3fuiAEcrQp+6vU6isUi4vG4aKGlGnu6llarhdFoFA06Y2Njot03n8+LDIIy4yH/qkzr8QGW3XOi6FOpFJ4+fYpffvlFBGz64QMm0dfrdezu7mJzcxOxWAyxWAzRaBTpdFqIlspOS6UScrkc9vf3odVqhVufTqfFeW/UEtvNZyifOTc7O4vl5WUsLS1hcnISAwMD4ijpTgRfqVSQSCTw9u1bPHjwAN9//z2ePXv2UXqO3r/P58PNmzfxL//yL7hw4QIGBgZabh8obkHvPxqNftQcRC2x9F7Onz+PiYkJDAwMoNFoIB6PI5fLiTPp5Wsr3wfl8Kljj6P43dHW0v/pT3/Cn/70JwDvZ611Mmb5t44cjbZarcL9JHHL0PHQKpUK1WoViURCuLp0NHO3FklOxw0ODmJubg7Ly8tYXFzE+fPn4fV6YbPZOpoco6z8W1lZwXfffYe7d+9ifX1dHDGtxOFw4Pr16/jqq6+wuLgIt9t9bEkvRe1TqRR2d3cRi8VEnILcegrceb1enD9/HrOzszh37hwsFgvK5TLq9TpisZhYvOQgnby3pxw+1UjIZ9Rz7KkzThR9o9FAPp8Xf6aDCj91ZMuRzWaRzWY/Kroh6EtJX1yKYivntXeDwWCAz+fD/Pw8Ll++jIsXL2J6ehrBYFAMqegkQk+CT6fTWF9fx927d/G3v/0NKysrTe68EqPRiOnpaXz55ZdYWlqCx+M5Me9Prn0ikcDe3h6SyeRHI6r1ej1cLhdGR0cxNTWFiYkJcV2an0evQZ+p/Kv8WrSgFotFUfbLou+cE0WvUr2flU4YDIa+O0qIhNGuSUReFNoVlRyHWq2G2+3GxMQEFhYWRNUbBeooRdbp9JtqtYrDw0Osrq7iu+++w3fffYeXL182LeStCAaDuHnzJpaXlxEMBk+cuEPWN5vNIhwOIxKJIJ/PN71vCkD6/X6MjY1hYmICQ0NDsNvt4vMiL6JdgI7m7lUqFbGlogWXp+h0RtvovWz1qtUq759aQF98OXXVrXXX6/VNlXWUhnO5XOKc924sGbXIrqys4JtvvsF//Md/YHNzs+32zGg0Yn5+XkTqzWbziU07tLiQlU8kEmKeHtXVU/FSMBjE+Pg4/H4/nE4njEYjarWaiBXR6TXkJbXKw8uuPR1hTWfqUUaBORn+lM4I2RXtVvDUA//73/8ed+7cwcLCgjg+uluxAxCWd21tDd9++23HgtdqtRgbG8Pi4iLm5ubgcrnadunR1iYWi2F3dxfZbLap81CtVou9fDAYFHP05Im5lEKkmAm5662sPW0lyL1Pp9Oi8o/pDBb9GdJLZsNms2FychK3bt3CV199JU6fkc986wba84ZCIfznf/4nvv/+e7x9+7ajezOZTFhYWMDVq1fFPbR7fRqASWlJCmrSg1J0w8PDCAQCcLvdTd4DBUKz2SzS6bSw2ifV21cqFXF8dT6fF+490xks+jNAFkanwtfr9XA6nZiZmcFXX32F27dvY3Z2VhT29Lo/pfl2L168wF/+8hesra11fE8+nw/Xrl3DzMxMR4M0KWCZyWQQj8eRTCbFARUUvLPb7fD7/RgZGYHP52sq7KHyZKrVT6VSbSsUqYeBTsyhKj4Wfeew6E+JPBdPjiAf96VVq9WwWCwYGxvD1atX8bvf/Q6Li4sYGxuD0+k81YRXsrqvXr3C999/j9XV1bZBO8LlcuHSpUuYn58X58q3g9zyRCIhRmKpVCrhIVitVvh8Ppw7dw7BYBADAwPi38jC04IRi8VEPcNJMRHa+1PqTp6uw3QGi/4UUD5dFrry/DWqNdfpdLDb7fB6vZicnMSlS5fE3tnn8zXVsvcC9bFvb2/jxx9/xL179xCPxzv++fHxcXz++ecd9+LL+f/Dw0NRnWg0GqHX66HX6+HxeDA+Po7JyUkMDw/DZrNBq9UKwWazWcTjcezv74tqxZMO1aDXpQi//GDRdw6LvkfIfVWmmgCItJpWqxUnuQ4ODmJsbAzz8/O4dOkSJicnhbtLefdeoWKg/f193L9/H3fv3sW7d+86FgJ16y0tLcHn87W9F8pWlMtlZLNZJJNJlMtlWCwWNBoNaDQaOJ1OBINBTE5OYmJiAoODgzCZTACASqWCQqGAeDyOg4MD7O/vixHZndyzXP8gLwCcq+8MFn2PkJjNZrNwVymnTz3iVqsVLpcLwWAQ09PTmJ2dxdjYGHw+nzjZ9bTjnOX22GfPnuHbb7/Fy5cvO66cdDqd+Oyzz3Dr1i3RTNPpXp6GZWSzWWg0GgwODsLtdguPJhgMIhAIwOv1wm63CytfLBaRTCYRDocRCoUQiUREg04n8QfZutMCRH8+zeLZL7Doe4BOdaF8MwAx/JFSVFarFW63GyMjI2IuPFXUUZHNaa1So9FAuVxGNBrFw4cP8c033+DJkycdu/U+nw/Ly8v44x//iGvXrh1bWy+/niz4w8NDxONxlMtlUa5sNpvh8Xjg8Xjg9XrFfAESPB1oGY1GEQqFsL+/j0QiIeb6yyfZHNdaq8zf04LbD30hZwGLvksoQDU0NISxsTE4HA7RN0+Wxmg0wmazYWhoCNPT02JPS5Hrs6gcI4u5t0ZeB2MAABkKSURBVLeHp0+f4ttvv8Xf/va3E0+kIex2O4aGhrC0tISvv/4aN27cwMjICIxG44mCl6f/0F788PAQwPsFxGKxCGvvcrlgsVhEJoKCbvLP7u3tIRqNijZj+nw1Go3YJrQK6imHa9C1eV/fGSz6LjEYDPB6vTh37hwCgYDYp5JrTyeqUjnt5OSkmGhzFmevyUdfbW9v4+HDh/jzn/+Mp0+fIhqNnujWa7Va+Hw+LCws4He/+53o1vN6vccGEsm612o1UQwTi8Wwt7eHcDgsOuOcTic8Hg8GBwfhcDhEFSF9NtSwRO3Hu7u7ODg4QDKZFK3GFPCULXmrqjy6H/p7eXIu0x4WfZfQXDqakKM8ZFGj0cBqtSIQCGB0dFQcAnEawcvdZdQtJ8/Ye/PmDQ4PD491b/V6PYLBIC5cuCAaeObm5j6q+lPWG5CgKGBHLjl10tEAEZ/PB6/XC5/PB5fLJcaFARAjsGhCLh1oGQqFEIvFxKgw6sSTkefkKT8PeXIOW/ruYNF3gVqtht1uh9vtFlF3OUVHrr3H48Hw8DC8Xq9w6bsVvByZLpfLSKfTCIfD2NrawuvXr/Hs2TP8/PPPCIVCx1p3as2dmprC4uIibty4IfLwJPaTrDu58pFIBDs7O3j37p2YLVCtVmGz2TAyMgKr1Qqn0wmHw9Hk0tP+n+YD7u3tYXNzU0wPohTd0dFR09n0VIsvH2ktIx+CoQzkMe1h0XeB2WzGwMCA6HgDmvPxVHLq9/sxNDQk8tLdTKYly1gsFpHL5US1WigUwsuXL/Hs2TMxX++4CTwqlQo2mw0TExO4efMmPv/8c8zNzcHv97fNGpDgyTLv7OxgdXUVL168wPr6OuLxOKrVKqxWK4LBoJjZZ7FYYDQaxcguEi259Lu7u3j79i3evn2Lvb09pNNpsY+XBQ9AxACOC3Yqhd5rC3O/0lb0svuq0+n6rrFB7jnXaDSw2WwwmUziS63Mx1Pk2uFwnNiSKiO70fl8XnSsvXv3Dmtra9ja2sLBwYE4G67V8EpCpVLB7/eLKbnLy8tNp9Ao3fhW91KpVJBMJvH27Vs8fPgQjx49wsbGhuig0+v14nkkWDlASSLM5XLi9NuXL1/i1atX2N7eRjqdFrMZqHiJ9vP087QAnFSOy+OyeoOHaHQA5dsvXryIK1euIBAIiAWQeukpmOV2u0VarpOqNrmUdXt7G+vr69jc3MT29ja2trawvb2NSCSCYrHY9j6NRiOGh4dx8+ZNfP3111heXsbIyIhImXUydIMGgW5tbYlCn19++QWpVEqkJEnwNFaLBEpBxnq9jnw+j2g0ivX1dTx//hyrq6vY3t4WhTwAxOdG16Egniz44xpvyCNSDutg2tPVEA3qf/7UUalUwnUcGRnB5cuXcenSJVy7dg2Tk5MwmUxiBl42mxUjtKxWKxwOh5hbd9KXkFpS0+k09vf38fr1a3Fi7fr6OpLJZFfn2RmNRoyNjeHOnTv4wx/+gIWFBXg8HhGV7wRagA4ODvDixQvcv38fr169QjKZFHEDqkSk39NCUSqVRCCuWCwKwa+srODly5fY3d0VBTi0UOp0upaTcTqx4tRwQwvRWWRG+oUTRW82m/Gv//qvuHr1qgj69IsrRS630WhsahpxOp1iz0n7bhI+DYxQWqpW16XDIl+9eoUff/wRjx8/xrt378RevVNo/z47O4svv/wSd+7cwcWLF5vc+U6gwB2N1vr555+bFh8qcZVLjNVqtci9JxIJMcUmEolgY2MDr169wps3b0TQTq64oyOsKPUmjxijIaLy8dat7peer9PpTl3K3E+cKHqn04k7d+7g9u3b/6j7+VVBXywKVsmCNhgMMBqNogotk8mILjO5EQT4YBFlYW1ubuLnn3/GgwcP8PTpU2xtbbU8JfYkdDod3G435ufncfv27ab23G4DiDQaOxKJiIBbKpVq8uyUZ88B74enxmIxFAoF1Gq1pm3Kzs6OWMTkijm6LzkQJ3fO0SCNdt128jFincZPmA4sPYOPvqwEnSdHrjoNbCTByQEpKk45PDzExsYGHj9+jB9//BErKytNI7U7gebH+/1+XL58GXfu3MGNGzcwPj4uzonv9sTacrmMVColYgnxeLxplJUcsDSZTOIYqlQqJTyBdDqNg4MDhEIhUWl3nJsuxwcoiKlSqVAul4Wlb7eVpP08W/ru4JRdB5xkMSmIBEAIn4Y2kvjppJuDgwORY19ZWRHjpTrdMtEX3G63Y3JyEsvLy7hx4wYuX76MYDDYU4qQ9uRyPj4ajaJWq4nqQhK9Xq8X6Tm9Xo9KpYJoNCrGcyUSCdFmq7Tuytele6TqOvp7En27qDwtQuR5nFV5cz/AB1h2QDsRkaXMZrPIZDIiAk3uPE2K3drawps3b7C+vo5oNNpVNoSGb/j9fszOzuLatWu4du0a5ubmRMCuF5eeBB+LxURfe61Wg8lkahIkWVOj0Si2OdR0Q4d6kNg7rY6Tq/5I5NS41C41TIsQCf4sGpj6BT7A8pTIlWt0Cg598alW/fDwUHSURaNRFAoFEStot6DSl9vhcGBkZASXLl3C9evXcfnyZZw7d67jbAGhrPSjwzVDoRDC4bDomAsEAk3z5GnIJQARxKS5drlcTpxF3+1hnPLgERJ7J9eQF6FOz/Bj3sPu/SkgS0l79VAoJKrN8vk8MpkM0uk0UqkUUqmUCPbJzSLHQa68yWSCx+PB1NQUFhYWsLCwgKmpKVHx18kATXotEhRNkqUBGNFoVCxGVqsV586dE/dA16W0XCaTweHhoajYo2m03R7GKd+z3NTT6aKhVqthNpubPgOmM1j0PUIikhtJtre3EQqFkEwmkcvlhAWUT2IBPp6rJ0Nil6fITk9P49KlS7hw4QLGxsYwODgomlqOG8opC52KZkjoqVQKyWQSyWQSmUxGRN71ej2GhoZgNBphNBrFdoEKdii4F4lEkMlkkM1muxY8vUcSPQXzuj2Blg7QGBgY6GiIJ/MBFn2PKGvLI5GIOOGF9ralUkmcZQd82CYpLTMtApR6or70YDCIqakpzM7OYnJyEkNDQ00z4+WFQ37IFj2XyyGdTiOZTOLw8FA8aNw08D5LQz3wbrdbtMZqtVqRyqPBl/V6XdQmkEvfreC1Wq3Yi1OWQ34fnVyDYhxut1sEMJnO4E+qR2TXnlx4OseeUk7yoQ8UXab8NuW8NRpNU1R8YGAAHo8HgUAAwWBQHBBBX276edkqUscZnRBDFp0Wo1AoJPbs1L8OvJ9z73a7ce7cOdhsNtEiSw1FlHmgo6RrtZpw73O5XNftrOTFGAwGGAwGsajQSOtO0ev10Gq1QvQWi4XTdV3Aou8ROb9MJ67Igxzk6S8UDJNzykajUQjdZrPB4XDA6XQKa0uW1+l0wmKxiBp1WSC0D6ZBk+SCh8Nh7O3tYX9/H5FIBNFoFKlUSrjiVGw0ODgIl8slRnt5PB4MDAyIWn2KptNkIFpEUqmUOJSiU8iToVFiNFuQTs3tJpNhMplgt9tht9ths9lE1yDTGSz6U0CioyIRymvX63UxE44aUkjoFosFdrtdiFz+1WazwWKxwGQyiVHStOctFovI5/Oieq1cLqNQKAj3PZFIiOmyBwcHCIfDImcuH0dNrjUVs9hsNrjdbgwODsJut8NsNjeNuKJ6fDq26uDg4KOS2nZQYw29Fp1yU6vVxAm38jboJGg+IS2K3aYqGRZ9z8hVelSZZzKZYDKZmlJxarW6SewkMPryOxwOWK1WUeUmu6kUKKQHiZyyAiR0GlCZSCTEXls+BEJZ705z6WnEFbUCU3BQDq4VCgWEw2FsbGxgc3MT0WhUVOB1AqUcaSownXSj1+uRzWZFExd5Ie2i93q9HgMDAxgeHsbAwMCJR2gzrWHR9wi568o9OR0UQS49pd0cDgfcbrfYN1MLrtVqFblmCmpReiyXyyGVSiGRSCAWiyEajeLw8BCJREIUw1CWgBYG5Qx4cnvlo6ZoLzw0NCTiBeTSAx88GGqPpeaZ3d1dEenvBGpA8ng8mJiYwOzsLCYmJuByuQAAiUQCer1eNC5RYc5Jwqc4hNfrhdPpZNH3AIv+FChFT245RaHl9BstCrQwmM3mpsISuWCGgnDRaFRMjQ2Hw4jFYiLNRiKnIJ4yoCYLgQpraEovnRM/Pj6OQCAAu90u2mUpdSY336ysrGB9fV0M0eg0wm4wGODz+TA9PY2FhQXMzc1heHgYZrMZ1WoVTqcTjUZDpBGpaIm8DBnKVlCwk6btciVe97Doe4SsKNV+U7pNp9OhVCoJ4ZOYqRmHxFosFkX0mkp25bPd9vb2sLOzI/bR1LpKLrB8ok4rEcrZAdnb8Pv9GB0dxdTUFCYmJuB2u8WWRPYy4vE41tfX8eLFC6yuriIcDh87nqvVa9OswJmZGSwvL+PKlSs4d+6cOPSiUqlAp9OJrsNEIiG8iGKxKLwl+bM2GAwigCdvRZjuYNGfAllYZHHkFloK8MkDHinqXywWhWsvF8BQDTyV7coHOyo71mSxk7VTLkYmkwk2mw1erxdDQ0MYGRkRswG8Xi9sNhs0Go2YKEtDLLe3t8UAjFAohFwu11G0niz8wMAAJicncfXqVSwsLGBiYqLpAEvKQNAgkWQyKY61ovl58jZFq9WKyD/VKXSa12eaYdGfAtrXk9jJopM1pzy2VqsVe2+qxZcj5Y3G+8MnaaZ8NBpFLBZrSrPJFWvHfdFpESKBOBwO+Hw+IfZAIAC/3y8i9RaLRYz9ooq9VCqFUCiEtbU1rK6uYmdnR7TIthMYxQzsdjtGRkZw8eJFzM/PY3R0tCluQF17FosFLpcLQ0NDopy30WhAq9WKYKRc60CZDVqk5DQp5+k7h0XfI8p9pFwcUygUxLnpFPSivb9er4fZbG4ayiF36VGnXj6fR7lcFl/8k1pNZY9DHtA5MjKCsbExjI2NNRX4UIktxRIoHZhMJrG/v4+NjQ2sra1he3sbqVRKpPw67RXwer0YHx/H+fPnEQgERFMQdcPRteizoGg8WXqNRiOKiOQYAt0zne7TSwkww6I/FXINPUW8ad8up6CUlXmUK5e3BFRkQ9V85XL52CCd8vVJ8FSvHwgEMDk5iampKYyNjYnyXblenxaaYrEoquz29/fFEA2aaScXzRzXFUjvy2g0wuFwwOPxwO/3i7p42nsrS48pnUfBuaGhISFyrVbb1MxDi5/cQ5DNZrsuEmJY9KdG2fBCwTASMX2J5aCUvO9WLhqyVW/VjCP/nqLyZGFdLhcCgQCmpqYwMzODiYkJDA0NiVp6eWottf5Slx3FEShwSPtq5X3LwlfeA40Po9N8yZWnNJwcnJNrB/R6vTgwg+oMqMqRPkMKdNI2iURP9f9cldc5LPpTQF96st40NBJonuGmHApBVk8pJDniT9cnS64M2tFrk+CpI29iYgJTU1MYHx9vatChHLx8TNXh4SEODg6wt7eHvb09MVs/nU6LPTy9P7rv4xYwmptHE27lngRKB1J8Q46B0HVoFBdVIsr3S54P1Q7k83lRqERDSTs5Ypt5D4v+FMiDIk0mk8i96/V6MR2XkEUrf9nlBUC+Jom/VQ6aREIuvd1uFy718PAwPB6PaJqhfTsFA+W0oJwloGYcSgtS34C8sMlHSclbFnoPVGeQSqUQDoeF9aVAoRxPoC0GDcCka8tpQ9q3U2CURE9uPQmf6hWYzmDR94jsolPRCzXIUG26XAZLAbtWLrvy0Q4SIRUFUe5aFjqlBclaU/CLBH9wcCDEHovFhJAolUZxAmVfPolS9mSADxOEaFwYTbWlYSKBQEAsRvJWg56nLDFOp9OiX58CelQWLC8E3YznYt7Doj8Fcv6Y6th9Pp8IfsnddbJFk39etpS0PZAHTLRCmYenNlUSUDKZBADk83lhoUulknDpo9GoOCJLmRak61PwjTwFuQWWuu7oPco/R9sH6vqTB3aMjIzA6/WKGAPNzS8UCkgmk4jFYqIrkEqNaW9PXgG9R7pfPqK6e1j0PSK7vRS19vl8yOVyIvqs0WiQSCSg0WiaeuzlMl3ZVZfFJg97lK2p8vXJraYJPo1GQ8yip700ncbTamIO1buTR0B5fhpyQYsGCVsuMqLgozLoqFarxfw9OehGQTgqCqKFSj4Gm0qOqX1XzmLItRByzIHLcLuDRX8K5Np7q9WKwcFBsZenYBQ9aO+ptPjKAxyVKT2CvviyyKgPXZ7iQ/tpeSoNCZBcY7mGgOIGJHZlZZ9s6cm1p4i6fFgF0DzamqwwBeLo97TtoGaZSqUi7nl3dxehUEh0C8qjsFtZc/KyqBWY6QwW/SmR01V2ux1er1f8nXwEs1arFV9k2eLLEXpZfMpMgBzhpz0sWVc6WYd+Rk4DyulDWnDk6j45NqEMzgEQ5bnksssjwFqdCU/3JMczVCoV4vG4uC6VHJMHRKJXzgCQBS+n+KjHgWIpnK7rDhb9KVGmzux2e5MrSqKjB/2bcghFvV4XVrVWqzWJXJ4U2+payuCgMsou5/6VwUS6f6V46XQeeUIQWfhOj4huNdknFosBALLZLNRqtfBODg8PkUwmkc1mW86+p89Do9GIjkUKXlJ8gOkMFv0pkS2QfOyT1WqF3W4X0Xyz2SwsJVliWbCyy04BMdlVlt1lOYAl/xzw8ew8Ze6/VfZAWSNAWwJ6vnzWXCvr3u7zoWtScY1Go0GhUBDReIrU5/P5pnZhGbk92OFwiEEk1BbMou8cFv0pkMUii0nep9NDWbRDrrdc6EKNJPR7goQmV+zJ1pyuq7wnAC2fo4SuRy6+LCC5FPg0UXLybmhCL7XRUqqOgnat9vDyyDGXywW/3y8m8FitVjEslOkMFn2PyPlr2vfSQ3aFy+Vy04P21rSvl6vv6Nx2Zb5efi1Z7EpPQf61E7Er/032LpSv3SvK90KFNxSEpFy70qWnWAAtmDQma3R0FBMTExgfH4ff7xeTipjOYdGfAnnPSoUolJ6iElS50ISCeK0i38CH8lxlGkp2vdu11/ZKJwtEt8jvhX5tNBri/csn1B4Xa6B4idVqxejoKC5evIi5uTmMjIzA5XKJ/nymc1j0PSLnjKkklERPQqcHubOULiOPQFnHLpfdtrK4QGsLLrvCf48FoVcoPkE19TQejGIT5P0cd5yVPFRzdHQU165dw9LSEqanp+H1ekVTD4u+O1j0PSKXmsqCppSWsoCEDnmgMlcqjT3OutFzlK/ZScRcDp4pf/+PWBDk92s2m2G322G1WkWJMO3ryfpXKpWmpiIqWDIajXC5XBgbG8OlS5dw48YNzM/Pw+/3i708u/bdw6LvEQrE0Z6UGkIAiGEWdIiERqOB1WoVEWplj7i8f5ULeuTc/XEotwFyyazcoUZuNEX/5fjAWW0ZqFjGbreLPgSn0wmbzSY6/ag4h7wi+jxoYAhZdypt9vv9mJqawsWLFzEzMyMO7mQL3zss+lMiR5rJOslFLzTJhrwBEryyIo6q8AwGg5iwQ5NiyJopB2Eq8/xk0WlBUQYR5WCjLHjZI5Cr/uRx1MpiIoqoy3t2g8EghmgMDQ3B4/GI4R1yE5DycE+agkuLJhXdDA4OisDd2NgYfD4fLBaL+FyY3mDR9wi5sGazGUdHRzAajU1lqiQ0cvdl0Smr1ZQTdfV6vajoa5XqU1rn48pk5YMy5C2H/PpyBkG+jjIroSzZle+VSmEtFovIoQ8ODoq5/nLTj1yLL3fL0cJDCydVNwYCAQwNDX00hYfpHRZ9j6jVajE62mKxNFlLuYCGItWtyl/lUVdy+a3cbUcoC2iUNQKt+tFJZJlMpqnBRrb0dG35deRaALkgiJ6nbOul03rIlae5AtT9RxV/dF/UiEOzAEn08vbA4XCIB8UDlEdzM72harOP+3WEgX+lKNNo9HeyMI/LqyvTWa2m6ShfS/n7Vr+SYOXDNWnfLDfayClDWijkPyvr3eVYAzUGyYE6OovPaDR+1CKsvDfyQsi1lyfa0sgt+TAQZU8B0zEtPzAW/d+Zdvnv41J0p3092fLL1lopdmUnnLILUI7Ey0dMkxDlVly5B/8klNsI5SQh2eNhTgWLvt9pVaoru/KtynvlLYgsdhI2W99fNSx65mRabSGAs/dGmH8YLHqG6TNaip5zHwzTZ7DoGabPYNEzTJ/BomeYPoNFzzB9BoueYfoMFj3D9BkseobpM1j0DNNnsOgZps9g0TNMn8GiZ5g+g0XPMH0Gi55h+gwWPcP0GSx6hukzWPQM02ew6Bmmz2DRM0yfwaJnmD6DRc8wfQaLnmH6DBY9w/QZLHqG6TNY9AzTZ7DoGabPYNEzTJ/BomeYPoNFzzB9BoueYfoMFj3D9BkseobpM1j0DNNnsOgZps9g0TNMn8GiZ5g+g0XPMH0Gi55h+gwWPcP0GSx6hukzWPQM02ew6Bmmz2DRM0yfwaJnmD6DRc8wfQaLnmH6DBY9w/QZLHqG6TNY9AzTZ7DoGabPYNEzTJ/BomeYPoNFzzB9BoueYfoMFj3D9BnaNv+u+ofcBcMw/zDY0jNMn8GiZ5g+g0XPMH0Gi55h+gwWPcP0GSx6hukz/j9VAUTIp57yKAAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 59; current eta: 0.5, current beta: 64\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 60; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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19e3vWal2AnK7CPznqfv1A+LfhdUCv33/gKSSR+NRvHgwQN88skn+PLLL+vqltPV1YULFy5g//79UKvVNV0zmUxiYmICX375JX788cdNBalUKuHxeODz+eByuWAymSCXy5HNZmGz2WA2m0UcfjNqcSZSAU6pVGLB7wAW/S55UV86EnwoFML9+/fxySef4Nq1a2LX3er+SJzd3d14++23cejQIdjt9prO8qVSCUtLS/j2229x7969DfnxlaJXqVTwer1obm4W1XXlchlqtVqUzNZyzc0cfYS0SQfv9PXDot9Dfs8vX6FQQDgcxr179/Dpp5/iq6++wvz8/LbPI/HY7XZcuXIFf/nLX9Dc3CyGYWz33PX1dYyOjuLatWtYWlp67nWlGAwGeDweuFwuUaRDAiWv/FbjsSqtpq2EL23MwdQHi36XvAinHZ3haYf/4osvNghwO6xWKz744AN88MEHOHjwIEwmU03Py2QymJ2dxd27d/Ho0SOReVdNjDKZDDabDR6PBzabDSqVSjw2m80iHo+LwpzNni9N3a302kuhhp0vMh/iVYJF/wenXC5jbW0NT548wWefffbcjrsdZrMZ586dw7/8y7/g6NGjMJvNNT83kUjgzp07+OGHHzbMx6sGdfFxu92iuSYAEZ9fXFxEIBAQ2XnVoBRe6cIizdEnlEoldDodt+beISz6PzClUgnJZBKjo6P46quv8PXXX297hgc2msaHDh3CBx98gOPHj6Opqanua1NXIGIzk9tms2H//v3weDzQarWQyWQiW5BShP1+P3K53KY7faXoqz1OoVCIMmA6QjD1wcvkHxQqopmcnMS3336LL774AjMzMzU9l8TicDhw6tQpnD59Gna7va7r53I5xGIxLC8viyy/rY4yXq8XfX19cLlcIiqQy+UQDocxNTWF8fFxhMPhTRNqpIU6lZ1xK7voVu70fK6vD97p/4DQiKqZmRlcv34dn3/+OSYmJkQfu62gXVKr1eLMmTN444030NzcXFN4Tnr9aDSKZ8+eiaq3rbDb7di/fz96enpEDTwtWnNzc3j69Cnm5uaQTCa3vO9qZ/pqUKddPtPvDBb9HwwyqycnJ3Hjxg18/vnnePz4cd2jqjweD9566y0cPny4pmIaKcViEcvLy7h16xYWFhbE76uZ2yqVCv39/Th69Cja2tpELX4mk0E0GsX4+Die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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 61; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 62; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO29WXOT57r+eUnWPFmyJFu25REwtrEBMw9mQSAMHfbayV6r9sk+7+qzPvkf9Tfo0/4KfbKquvbOysq0MhAIBAgQCBgDBs+TLFmSNc9jH1D3k9dCtiXZgSx0/6pccWwNr8V7Pc/93KOsWCyCYZj6Qf6uL4BhmLcLi55h6gwWPcPUGSx6hqkzWPQMU2cotvg9u/b/hSgWi3C73fjhhx9w//59KBQKKJVK5PP5ml5PJpMhkUigra0NH330Efbt2weNRrPDV838jsjK/XAr0TP/AhSLRchkMshkMhQKBUxOTuLrr7+GWq2GRqOpSfT0esFgEIODgzhz5gzkcjYM3wdY9O8ZxWIRi4uLmJub27HXzGazSCQSkMnKbhzMvxi8dL+HKBS/reU7IVS1Ws2Cf49g0b+HSM1w6QJQ7WvQcxUKBYv+PYLN+/ecWp14hUIBlKJd62swf0x4p38PKRQK7/oSmD8wLPr3EPayM5vBdwfD1BkseoapM1j0DFNnsOgZps5g0TNMncGiZ5g6g0XPMHUGi55h6gwWPcPUGSx6hqkzWPTvIZx7z2wGi/49hHPvmc3gu4NhdpB/PHHho//nJ/zv/+9DBOKZd305ZeF6eobZIXzRNP7X/zeGXKGIF+4IrPqX+L//uv9dX9Yb8E7PMDtEKptHrvBbA+loKvcOr2ZjWPQMs0N0NOnwf5zthUwGOEwa/J8X9rzrSyoLm/cMs4P8X//bAP7Xxb1QKf64++kf98oY5l+UP7LgARY9w9QdLHqGqTNY9AxTZ7DoGabOYNEzTJ3BomeYOoNFzzB1BoueYeoMFj3D1BkseoapM1j0DFNnsOgZps5g0TNMncGiZ5g6g0XPMHUGi55h6gwWPcPUGSx6hqkzWPQMU2ew6BmmzmDRM0ydwaJnmDqDRc8wdQaL/j3k9xhVXSwWt34Q8y8Bi57ZEplMBplM9q4vg9khWPQMU2ew6N8zFAoF5PLf/lml31cL7e7ZbBbZbJZN/PcEFv17RDqdhsvlQiwWEz/L5/M1vx6JvLGxETKZ7HfxFTBvHxb9ewDtyH6/H48ePYLb7YZarQawPQdcsVhEY2MjBgcHYTab+Vz/nsCif0/I5XIIBoOYn59HIBDYlkClz+3s7MSxY8fgcDigUPBk8/cB/ld8j0in01hbW0MwGEQmk9nWaymVSjQ0NGD//v04fPgw7HY7GhoaduhKmXcJi/49oVgsIplMYnV1FX6/v+bzt0wmg9lsRnNzM+x2Ow4dOoSenh4YDIYdvmLmXcGifw8oFAoIBAKYn5/H/Pw8UqlU1a+h1+tht9thNpvFf5uamtDW1gaNRsO7/HsEi36HKBQK4ouSWWQyGeRy+e/iACsWiygUCshms4hEInjx4gUePnwIt9td1evI5XIYjUY4nU709vaipaUFRqMRDQ0NUCqVUKlUKBaLKBaL7Mh7T2DR7wCFQgGJRALRaBTpdBoymQwqlUp8KRQKET+XLgi1UiwWkcvlkEqlEAwGsbi4iIcPH+Lp06eIRqNVvZZer4fT6URfXx+6u7thMpmgUChEbD6XyyGXy6FQKGy529NCVEq5v7X0Z1t9HrTwSBdWuVzOFkgNsOh3gGw2C7/fj4WFBYRCIcjlcphMJhgMBhgMBuj1emi1WqhUKuEgky4AwNY3vZRisYh8Po94PA63243JyUnMzs4iFApVdd0KhQJ6vR6tra1oa2uD0WiEXC4XwpXL5chkMojH48hkMtBqtWVfp1AoIJfLIZPJIJfLIZ/Pr7N0ylk7pb/f6HH099J7pNNpZDIZyGQyaDQaaLVaFn6VsOhrhOLf2WwWgUAA09PTeP78OaLRKFQqFUwmE8xmM6xWK6xWK8xm8xvOMMqWk8lkVZvPMpkMDQ0NUKvVwppoaGio+jUUCgWUSiWUSiXkcrnYUen6UqkUwuEwEokEVCqVEBg9joQYjUYRiUQQj8eRz+ffuDa6LulRQaFQQK1Wl/0b6DMBsE7w9D5yuRxms1ksokzlsOhrpFAoIJVKYW1tDdPT03j06BGeP3+ObDYLnU4Hs9kMh8OBQqEAtVoNnU6HQqGwI6msJBiDwQCHw4FMJoNAIICFhQUsLy8jlUpV9D75fB7pdBqpVArpdBqFQmHdbtvQ0CD+TnqMQqFYJ/Z4PI5AIACPxwOPxyOOFzqdDgaDATqdDmq1WmT0ZTIZYZ6r1WoYjUZYLBY0NjZCr9eXXSQKhQLy+bywOsLhMBQKBTQaDWcJ1gCLvkZyuRzW1tYwOTmJJ0+e4PHjx5iamkKhUIDZbEZ7ezv0ej0KhQKUSuW63UxqytZi3pNZrFarYTabAQDxeBw+nw9utxvxeBzxeHxLQRQKBSH6fD4vdmA6v+t0OphMJmg0GhSLRWQyGWSzWWQyGcRiMYRCIXg8HiwsLGB2dhYrKytIp9NQKpVobGyExWKB0WgUzkDp4lEoFKDT6dDU1ASn0wmn04mWlhY0NjZCq9UK4dNRht6XjhC08NBCyk7GymHR10gul0MkEoHH44HP5xOmbTabhVqtFuf6pqYmNDY2QqfTlTVha71Z6bkk/J6eHgwPD2NychIejwepVKqiXVAqGplMJkzzxsbGdWLUarWQyWTIZrOIxWLwer1YWlrCzMwMXr58ibm5Ofj9fuTzeahUKhiNRphMJuj1ejQ0NCCTySCRSCAej4tFhhYHp9OJgYEBDA0Nobu7GzabbV2YMJvNIplMIhaLIRaLIZFIQKlUCquBqQ4W/TYgT7JSqYRGo4Fer0exWERrayt6e3uxa9cudHR0wGq1CtOVnHhAdbv7RshkMiiVSlgsFrS1taG1tVVcRyXQtdM1qdVqNDU1obOzE93d3bDb7dDpdGhoaFh33k+lUsJ5OTMzg6WlJcTjcRSLRSiVSiQSCcRiMajVarHLR6NRJBIJpNNp4exTq9VYWlpCMBhELpcTVozZbBb1A3SWDwaDCAaDiMfjUKvVSKVSyOVy2/4M6w0WfY3I5XJoNBoYjUYYDAZYLBbkcjlotVoMDAzg0KFD2LNnD+x2uxD87xWzl8vlUCqVIkIAoCIxKJVKcf0qlQpqtRrt7e3o7e1FV1cXzGaz8I6T2S+TycQ5PZfLIRQKIRAIIBaLIZPJiDBaPp8XeQRSv0AqlVq3Q2ezWeTzeXFGJ4uoWCxCr9dDJpMhkUjA7/fD6/UiFAohm81Cq9UiHo8LU5/N+8ph0ddIQ0MDNBqN8NK3traisbERNpsNAwMD6OvrQ3NzM/R6vfCM/16QaZ7L5cRuWgm0qzc2NsJqtaKnpwd9fX3o6OhAY2PjG9dNuz39nByZ4XAYyWRSWD2lVob0TE4iJwedXC5HMpmEx+OBQqEQi0w2m4XFYkFDQwMikQhcLhc8Hg8SiQTUarXIICTRM5XDoq8R2ulNJhNsNptwzrW0tKC7u/utCR74LW4fi8WwsrKCYDBY0fMUCgUaGxvR2tqKPXv2YHBwEJ2dnSIjrxy0o1LEwOPxIBKJCMuCdvCGhgYRDiS/AR2HyAqgxxcKBcRiMbjdbmg0GshkMqRSKVHkEwgEsLS0BK/XC7lcDrvdjmKxiEQiweZ9DbDoa0Qul4t4fHNzM4xGIzQaDaxWqzgHvw3BA79lBHq9XiwvL69rorEZKpUKVqsV/f39GBoaQmdnJwwGw6bXTBYFee69Xi+SyaT4XbFYhFwuh1arhdFoFNGKRCIhfl+6M1MoLxaLYXl5GcDraAQtpqFQCC6XC6FQSGQMajQaZDIZYTUwlcOirxFKtTUYDMjn88jn8+JGNxgMb03wwOtzMWXmeb3eip9ntVoxPDyMoaEhdHV1wWAwbHk2pgVmbm4OMzMzCIfDyGaz4ixPmXKUp6BWqxEOh0WSz0avTyHBcDgMAEgkEjAajQBeLwChUAjxeBxWqxXNzc2wWCzCX8Cirw4WfY1QRpw0NVWtVkOj0Qin3duA0nFfvnyJ+/fvV2zaazQa9Pb2YmRkBL29vRUJvlgsIp1Ow+fz4dmzZ5icnEQ6nRa/KxaLaGhogNFoRFtbG3p6eqDVauH3+5FKpRAKhRCJRDZ8bUrAiUQiyGQyWFtbE87AdDqNZDIJhUKBZDK5zjfAVAeLfhtQqikJnNJZq02HrRUKhS0vL+PRo0d4/Pgx4vF4Rc9tbW3F8PAw+vr6RA+8rcjn81hbW8OLFy8wPj4Oj8ez7lqA15+BzWZDb28v+vr6oNPpsLq6Kmr919bWkMlkyoqVzvsU0qO0YMrnl+be8y5fOyz6bSCXy0XmGO38b0vwJBCfz4d79+7h/v37WF1d3fJ6yYE2PDyM48ePo7m5GUqlsqL3zGazmJmZwQ8//IDp6ek3fk/hPIfDgV27dmHXrl0iDBcOhzE7OwuXyyU8/eWgRp4kZrIg6Od0/uedvnZY9NuAhF5aO/97i5484V6vF7/88gu++eYbPH36dEsBkNDsdjtGRkYwNDRUkVkPvPbWLy0t4d69e/jpp5/g8/neeIxMJoPJZEJ7ezu6urrQ2toqshADgQCam5uh1Wo3NPFLr5O+lzr/8vn8ulRejs9XD4t+m5SK/W0Inkp5Hzx4gC+++AJ3796tuKxWr9fj+PHjOHTokHC0bQV15rlz5w6+//57LCwsAPjNW0/I5XLYbDa0t7ejubkZjY2NIlHHbrfDYrFAp9Nt6e+gRU2620uvhUx82v1Z+NXBot8GpUL/vUVPTi2/34979+7hs88+w7Vr1yry2JNAOzo6cPnyZezbtw8ajWbL5xWLRUSjUUxNTeGbb77B3bt3y4oReB0CbGlpQVtbm8jmk8lk0Gq1MBgMovimEjZ6DzrbcyZe7bDot8nbuulI8G63G3fv3sXnn3+OmzdvrnOmbXR9ZB63trbi4sWLOHXqFNra2iqqQy8UCnC5XLhx4wYePnwovPWluzzwm+hbWlqg0+lEy2zqHLTVZ1VacbjRcUVaEchz9qqHRb+D/F43H4XKPB4P7ty5g08//RQ//fQT/H5/Rc8FXk+puXLlCj7++GP09vZu2AWn9LmxWAwTExP4/vvvReKM9HWlUGpsU1OTiGpQxl02mxVn8c18D3Rc2qx6jvoJVLKQMG/Cot8mv/dNJzXpb9++jU8//RQ//vhjVa2xjEYjPvroI/zlL3/B4cOHYTKZKnpeKpXC/Py86L9HbarKiVahUMBiscBut4tMPHosxd4DgQAikciGffTIMQpA+ALKvVdDQ4PoP/i28iHeJ1j0f2DIoeX3+3H//n188cUXuHXrVlWCNxgMGB0dxV//+lccP35cNN2ohGg0igcPHuDmzZtbetwNBgM6OzvR3NwsnHUUYw+FQlheXobb7UYsFis7X48ET05RKsYpTduVJkVxa+7a4GXyD0w+n0cwGMTjx4/xxRdf4KeffkIgENjyeVLrY2hoCB9//DFOnDgBm81WcVybimDGxsbw+PFj8fONnm+xWNDX14eWlpZ17bGSySS8Xi9evXolWnltZLpLOwptFBGhmgedTgetVss7fQ3wTv8HhHb4cDiMp0+f4ttvv8WNGze2dNpJnw8ATU1NOHnyJE6fPg2r1VrVUSSTySAUCmFlZUUMz9jItAeA9vZ2DAwMiGQfCi2GQiHMzs7i+fPn8Hg8ZavipCIn5x/5Aso9lgpuaKfnc311sOj/YEgF//z5c3z11Vf4/vvv4XK5Kno+CVOtVuPMmTM4c+YMOjo6KorHE4VCAcFgULTe2orm5mb09fVh9+7dMJvNou4+kUhgaWkJL168wPT09KZHhFLzfqNwnFT0fKavDRb9HwhKNw0GgxgfH8dXX32F7777TjTcrPQ1gNc774ULF3Dw4EHodLqqdsN8Po+VlRXcvXt3S4+9SqXCvn37cOzYMTidTvFeNHlncnIS4+PjW87XK5fzsNlja2n5zbyGRf8HgbzcgUAAY2Nj+Oc//4lvvvkGc3NzVTd/NJvNOHr0KA4ePIi2traKc+uJQqGA1dVV3L9/H0tLS5s+trW1FSdOnMChQ4fQ1NQkTPtMJgOfz4eXL19icnJS1NxXykbHiFKLgKkeFv0fAMoy83q9ePDgAb766ivcuHEDLpcL2Wy2oteQnrf37NmDDz/8EN3d3RVnwEmRnudLX1tKU1MTTp06hVOnTqG7u1t47XO5HOLxOFwuF2ZnZ7G6ulpVhxvy2JdruCG9Hi62qQ0W/TuGpre4XC7cvXsXX331FW7evFn1IEoSgMViwfHjx3Hs2DFYrdaqryeTyWBlZQWzs7ObduBRKBQYGhrCxYsXsW/fPjQ2Nq5zwoVCIczMzGB5eVlk8W1GueEWZOGUEzc1LuEW2NXDon+HUKbd6uqqyLS7efNmxY0wStFqtTh79izOnj0rztfVkkgkMDY2hrt37wqvfTnR7d69G3/6059w9OhROByON4ZTBINBTE1NbVnuC7wpeGlPvdL3lo68ouQd3vGrg0W/DUqTRqqBdvjtZNpJUSgU6O/vx+XLl3HkyJE35uZVQj6fRzQaxa+//orbt2+/MeeexKbX63HixAmcO3cO7e3tIi5Pv89mswgGg5ifn694AZMKn3bwzcRMRyLe6auH4x01QjcndXWp5uajXYwaYPzjH//A7du3heBrcVDt2bMHH330EY4fPw6Hw1G18w6AaLv17NkzMZNOei3FYhEqlQojIyM4e/YsBgcH32ikSdZLMBjE6urqGwtHOSirTuo72GoHpyMA7/LVwzt9jeTzedGrrXRKzGZI6+Hv37+Pf/zjH7h169a64plqbmS5XI6uri5cvHgRH330Ebq7u6FUKqteOLLZLObn53Ht2jVMTExseC09PT24evUqjhw5AqvVKhYXej9qxU398Cu5fmqXTYU2tChuBC0O3C6rNlj0NSANr4XDYTGzbrMZ68BvQx98Ph/u379fVT18OWQyGZxOJ65evYo///nP6Ovrg8lkqjofvdSRODs7W/ZxDocDf/rTn3D27FmxuJRCC5rL5RL9+jby/tNILuquQ88HNg/ZAajoCMCUpyLR1/MHW07AhUIBkUgECwsLWFlZgd1uFwUi5VJDqfCEMtTu37+Pr7/+Gnfv3q3I0bURPT09uHz5Mv7t3/4NBw4cENlw1UBONwoVlut9B7zu9HvixAlcuXIFu3fvFiOnpJBp73K5MDc3t6kjEPhtjh61DKdml1shFX4935u1UpHoOQkCIi2URlS/fPkSjx8/xsrKCqxWK+LxuBhlRQMfgd9aVPt8PszNzeHRo0e4efMmHj58WLPTTqlUoqenBxcvXsQnn3yC/fv3w2KxiN2yUgqFAtbW1vD48WP885//xJ07d8qG15RKJYaHh3HhwgUcOXIEJpOp7D1Bol9cXMT09PSmOQZKpRIGgwHNzc2i8o966FfiB5B6+Vn41cHm/RZks1lEo1ExkTUWi2FychL37t3D8+fPEY1GodPp4Ha7EQwG0dfXB5vNhoaGBrG7ezwePHv2DHfv3sXjx4/FKOlaUCqVGBgYwNWrV3HlyhUMDAzUJHgyw588eYLPPvsMP/7444ae9q6uLnz88cc4c+YM7Hb7hnn8VFW3srKCpaWlDRNyaJxWd3c3du/eDYvFgng8joWFBcTj8S3LeIHfvPcs+OrZ9E5JJBJ1eW6i0UwAMDMzg+fPn2N1dVWMcpqamsLCwgJCoRAKhQJUKhVcLhdWVlawe/du2O12yGQyhEIhuN1uLC8vY3l5GUtLS1Xt7qVnYYvFghMnTuDChQsYHR2t+QyfzWaxtLSE27dvi2OGNMde2rmmo6MDV69excWLF0VL643IZDIIBoPwer3CiVf6N8hkMhgMBvT39+PIkSPo6+uDRqPB6uoqstksPB5PRUM3ODmndjYVfSgUwqNHjzAxMSEqmuphASDRFwoFYar6fD54vV74fD4RzpISiUTg8/kwOTkp5sNT2KpWM54+a4PBgLa2Npw8eRKXL1/G8ePHRd16NYIvFouIx+OYmprC9evX8fXXX+Phw4dv7KwkJLPZjA8//BCffPIJ+vv7N439k59jfn5+08o8g8GAvXv3YnR0FCdOnEBbWxuKxSIMBgO8Xm9FNfLkI6E4fT3ckzvJljv93/72N/ztb38D8NqZU2ku+L8y0tARzUvP5XJIJpMbmqzpdBpra2vCRKbkm+3uRA6HQ+zuR48eRXd3N8xmM1QqVcW+FipzjUQiePnyJb799lt8+umnmJqa2vA5er0eV65cwV/+8heMjIxs2WKL2mSPjY2JFtn03oRCoUB7eztOnTqF06dPY2BgAHq9HplMBul0GjabDSqVakshs+i3x6aip52BqCSH+n1AKtR4PF7RqCgK4+0UTU1NOH78OE6ePImRkREMDg7C4XCIttKVQv+Gc3NzuHnzJq5fv46HDx9uWj2nUqkwPDyMq1ev4ujRoxs67qTQyKvx8fF1RwUpVqsV+/fvx8mTJzE4OCh8H+l0GkajUZTlViJ4aStsNvGrY1PRy2Qy6PV68f9qtbpsf7P3mbcRFpLe6AaDAb29vTh27Bg+/PBDHDlyREyKqbZ+vFgsIhQKYXx8HN999x2+//57PH36VDgRpWd36TW0t7fj4sWLOHLkCGw2W0XvmU6nEQgEMD8/X3aRVCqV6O3txdGjR9Hf3w+bzSb8A/l8XuTu01l9I6RjrdLpNOLxONLptEgFZrZmS5evdBWtNI7KVAeJTavVYnR0FFevXsWpU6fgdDqFKV8L0WgUY2Nj+J//+R/893//9xtn7Y3+LYeGhnDu3Dk4HI6KsgxzuRzC4TDcbve6VGLpYtnY2Ih9+/bhwIEDaG5uFvkM9JhcLodUKoVUKrXpEZIiIqlUCvF4HH6/Hw6HAzqdrqbU43qEQ3bvEOlOa7FYcPnyZXzyySfCUafRaGravcikn52dxeeff46///3vW7a9IuflwMAAzpw5g76+PhiNxorn3LlcLkxOTpbd5TUaDTo7O9Hf34/Ozk4YDAZhtZAnPhaLIRgMbnmUoryHVCqFSCSC1dVVOJ3OdSnBzOaw6N8B0txx4LWz7tKlS/jP//xPHD9+HDabTTyuForFIrxeL27cuIEffvhB9NfbaIgE/Vwul2N0dBQnT55EU1NTxZGBTCaDhYUFvHjxQtTgUzJTsViE2WzG0NAQ9uzZA7PZvK42gMz1tbU1rKysIJFIbPpeuVwO0WgUyWQS8XgcgUAA8Xi87o6d24FF/w4gk1Yul8PpdOLPf/4z/uM//kMMotju2TQej+PFixf4+uuvMTk5KX6+kTlP12Oz2XDo0CH09/dXNOeOXjOVSsHlcmFmZmads5cadDqdTgwPD6Ozs3NdSI6Kj6LRqEjo2Ur0lABERwEqeuJjZ+Ww6N8R1OHm/PnzGB0dRX9/f1WDKDYinU5jYmIC169fx6+//lpR5l+xWERTUxMuXLiAgYEBGI3GirvM5vN5JBIJBAIBBAKBdUMqFAoF2traMDw8jP7+ftjtdrHLk1lPffEXFhbgcrkqihDReCzy3LPgq4NF/xZRq9Ww2+3o7e3FwYMHcfLkSRw+fBhOp7Oi2XJbkclksLi4iG+//RZffvnlloMxpM62Xbt24cqVK+jt7a3qbExe+3A4vM7EVqvVcDgcOHbsGE6fPo3u7m5xlqejDdXdz87OYmZmBsFgsKI8EGktvbT+nqkMFv022WjCqlwuFzXiKpUKFosFHR0dGBkZwenTpzE8PIzW1laR/LNd8vk8PB4Pbt26ha+//lok3mwW96afG41GjIyM4NChQ2hubq54ly8UCqK2IBqNiiOBVquFw+HA8PAwRkdHMTIyIoZg0PNovt3S0hKeP3+O2dlZUd+wFZyUsz1Y9DUil8uhVqvFjU6xY+D1LqfX62GxWMQk1+HhYRw4cAB9fX1ob28Xk113gnw+j0AggCdPnuDzzz/H8+fPxe82EobUeffBBx/g0qVLaGlpqXiXp/M4NczI5/Noa2uDWq1GV1cXBgYGhPPO4XBAr9eLXZ665a6srODFixd48eIFVldXK3bGlTbQ4Eq76mDR14jJZILD4YDVahXOLJrqqtPpYDAYYLVa0dbWhr179+LAgQPo7e2FxWKBUqncscksVA//8OFDfPnll3jw4AGi0WjZHV7qvS8UCjAajRgdHRVRg0qn2dL70lk+Ho/DZrPh9OnTaGlpQW9vL3p6etDW1obGxsZ1NQIUZ/f5fHj16hXGx8cxPz+PWCxWsXBLRc6irw4WfQ3QhNZdu3bBbrcDgHAskVmv1+ths9nQ39+Pffv2ifj0To5hymQycLvdePz4Mb766itcu3ZNxOPLiYAEbzQaYbPZcOLECXzyySc4deoU2traKm73RTu1x+OBx+OBXC7Hnj170NLSgo6ODjQ3N8NkMkGj0awLz+VyOeEDmJmZwfj4OF6+fAmfzydSmLdKw5Veh/R7duZVDou+StRqNdrb27F79250dXWJyjMqxKHd1Gg0YteuXRgcHER3d3fZTjO1QmGrpaUl3LlzB59//jl+/vln+Hy+LZ9rsVhw6dIlfPDBBzh48CC6urpgtVorzrxLpVIIh8PweDxYXFxEIBCAwWBAe3u7OLbo9fo3rJl8Pi+GaCwsLGBsbAzj4+NYWlpCMpkUIq5U9FKkZbY8225rWPRVolAo0NLSgra2NhFio/AU8FqQWq0W7e3t2Lt3Lzo6OqoWPCW2lJLL5cSMuImJCZFP/+rVq3XlvuWci/39/RgaGsKBAwdw+PBhDA0NoaWlRTgbN4MEG4lEsLy8jOnpaczNzSEWi6GpqQn9/f1wOp1obm6GVqsVefREoVBANptFPB7H0tISHj9+jEePHmFmZgbhcHjdgil9TqVwQ43qYNFXCTXBJFNdWpBDqaxWqxW7du2C0+msOJVVSqlgqA3VysoKpqamMDExgSdPnuDnn38u29OOrkelUqGxsRH9/f24cOECzp49i71798JoNEKr1W6ZcVfaw/7ly5eYmJjA7Ows/H4/bDYbjh07BrPZDLPZDD040+MAABerSURBVI1G84bgKR6fSCSwuLiIX3/9Fffv3xdmfTabRT6fXzfAktqSbSZ86WeezWbF46ttKFKPsOirwGg0oqWlBY2NjevMUPpeoVDAbDaju7sbXV1dMJlMNZmbVKYbjUYRDAYRjUYRDocxPj6Oa9eu4fbt21sOkVCpVBgaGsKHH36IM2fOYO/evaIwpRJhFAoFxONxeL1ePH/+HDdv3sTPP/+Mubk5UdW2f/9+qFQq6PX6NwRfmle/vLyMX375Bbdu3cKTJ0+wtra27hzf0NAgvPuZTGbDlOHSz4mulZtkVs6WopfetEqlsu5ynKU3U0NDAywWC3Q6nYhR0w1LzrvOzk50dHTAbDZX1beOdizKNgsEApiYmBC9+Px+P9bW1kRMvBTpImSz2XDu3DlcunQJR48eFQtQpbsgCX5hYQE3btzAd999h2fPnoneflRync1moVary86JpyYiiUQCCwsLuHPnDq5du4bHjx/D5/MJk14qeBK9UqmsSPDSL47bVw430agAirUfOHAABw8eFLPbqIlDLpeDQqGA3W5HZ2cn7HZ71Z1totEoFhcX8ezZMywsLMDtdmN2dlaEtKSUO7PT9w6HA5cvX8Zf//pXHD16FDabTfTjr/RastkslpeXcf36dfz973/HvXv3RDoviZT8Dkqlcl2dP4mQym1nZmZw584d/PDDD2KHl3Yfko6dVigUwjrYCmk3XLomrqevjKqaaGg0mqpGDv+rQs0cCoUCnE4nRkZGcOzYMRw9ehSdnZ1iBns6nUYsFkMkEkGhUIDFYoHNZqvYhKYyUb/fj5mZGdy7dw/Xrl3DkydPNu0Iu9GO1t3djY8//hgff/yxaHFV7fGC4v5jY2P47LPP8Msvv6zL3ydRymQyYYKTI40WA2odNj09jZ9++gk3btzA8+fPEQ6H37h26Y5Or11JPr10lp1CoajIIcm8ZlPR63Q6/Nd//RcOHTokVvR6MKFkMpkwT3U6Hdrb29HT0wOn0ylCdLSbJZNJxGIxZDIZKJVKkXm21a6TzWYRDocxOTmJH3/8ETdv3sT4+Pi6s+5W10j/FkqlEgcOHMDVq1dx6dIlMTq6FpLJJF69eoXbt2/j+fPnZevbaVemI04kEoHRaIRCoUAmk4HH48HTp09x69Yt/PLLL1haWtq0Tp7M82w2u64d1mZQKi9ZWeWOGEx5NhW92WzGuXPncPbs2bd1PX8ISkchKxQKkWgiRalUipTbVCol2j6RiVtuAgwAMRDi/v37uHHjBh48eIBXr16tO+fSNWyVN9/S0oKRkRFcunQJ58+fF9NnaiGbzSIUCuHJkye4e/eucBaWxs7Jh5HP5+H1ejE3N4doNIpUKgW3242JiQmMjY2J9Nqtet7RkYJmBVQSfpMm5DQ0NOxoluP7zpY7PbM5crlcOJ6kWXmlc+2KxSJSqRRCoRAWFxdx9+5dfPnll7h9+/YblWWVpJXKZDJ0dXXh3LlzuHr1Kg4fPiym69QCdcxdWFjAs2fPMDMzU3aunNRxmUwmMTs7i2QyCZVKhUAggKmpKTGXvpKKOal46ahQqbOYPttqfBYMh+x2BNoJ0+k0MpkMFAqFSFKhmzqZTIqJMtevX8fdu3cxNzdXU0txjUaDw4cP49KlSzh79iz6+vpgtVprrtajnTYQCGBychILCwuijoCOOvQ9WTcKhQLxeBwzMzOYnZ1FIpFAMBhEKBSquFqOkA6tqDSPXrqwbjY0lHkTHmBZAZVMXKEOMNQYkqrvcrkcAoEAFhYWxPy7p0+frhtcWWnqqUqlQmdnJw4dOoTz58/j1KlT6O3trbotdikUS3e5XJienkYwGBT95+n6yFmmVCpFPD4SiSAQCCCZTCKZTNYc3amlJp5Mek7GqR4eYLkD0E4eCASwuLiIZDIJAMKcX15exsTEBF68eIGVlZU3bu5KbnaTyYSBgQGcO3cO58+fF33jt9P6WRpL93g8cLlciEajMJlM2LVr17pMOYKKZhKJhGhQmclktl3wUu3GQoVN7LWvHjbvdwBpn7epqSl4vV7EYjH4fD54PB6srq6KzLparCan04nTp0/j/PnzOHLkCDo7O9HY2Fhz91fKpae+8Wtra1heXkYwGERzczMaGxuFoCgfIZFIwO/3i7l84XBYJBK9C0uQjhparXZdJR+zNSz6bZLP55FKpeD3+zE3N4eJiQkhoEAggFAohEQisc4zX6lI7HY7+vr6cOzYMZw5cwYHDhxAa2sr1Gp1Vbsb7egk9kQigbW1NfEVi8WQy+Wg1+vR0tICg8EAvV4vwmB03ifn3tLSktjh39XRjwqbHA5H1dmP9Q5/UtuA8sTD4TBcLhempqYwPT0Nt9uNWCwmOrUC6+fjbYRcLodWq4Ver4fD4cC+fftw6tSpdTPsKtnVpKmpdH1erxerq6tYW1tDKBTC2toaAoEAstmsqBfo6OhAa2srTCbTusYXmUwGjY2NiMViUCqViMViSKVS77SGPZfLQavVoqOjg3veVwmLfhtQx5xAIACXywWXywW/349IJCKqx6SUm/pL4S+tVgubzYaOjg7s3bsXAwMD2LNnD7q7u9HS0gK9Xi8caOVEL01wSSQSIlMwFArB5XLh+fPnePbsGebn5xGNRpHL5URvgJMnT6KlpQVOp1OMm6Kdk3LhyRqIRCIIh8PbmttHfwNZK7UWy+h0OlitVpEYxFQGf1LbQNrgMRQKicw8auZACSwUUqKfaTQa6PV6NDU1wWq1oqmpCXa7HXa7He3t7ejo6EB7ezusVus6M7s0v12aAkvFOoFAALOzs5iYmMDLly/hdrsRCATg8/kQCASEeGUyGaxWq+h0Q1NidDqdWFyk4TOaYrOwsLBlb/qtoLCfTCYTllA16d16vR46nQ5arbZs0hSzOSz6bUApo3S2VSqVUCqVUKlU6wpHKE3UYDDAbDajubkZbW1tottMS0sLrFYrGhsbYTAYoNVqRSycTGwSOJ3PM5kM4vE4gsEgvF4vPB4P/H4/VldXMTc3h5cvX2JmZkZMnJEil8vR0NAAo9GIjo4OdHV1wW63v9EAg2L0qVQKHo8HExMTorS2FtRqNZqamkQSUTKZxNraGvx+f8WiVyqVsNlsookJ7/DVw5/YNqBdUKFQQKfTiXHL0oQbuVwOnU4Hs9mMtrY2dHd3o7e3F06nEy0tLaJjrkajWTeZlnbabDaLbDYrxjjFYjGRD7C2tobFxUVMTk5icnISS0tLiEQiIjNws+tWKBRwOBwYGBhAR0eHMJFLBZ/L5eD1ejE+Pi7SamtBr9eju7sb+/fvx549e6DRaLC6uorx8XHxN1YifIVCgebmZvT09MDhcPAuXwMs+m1AKakajQYmkwkWiwVGo3Gd806pVMJsNqO1tRW7d+9GX18furu7hcOMzFOp+Z7P58UoZmoxvbKygvn5eczOzsLlcsHn8yEYDCISiYivjc7ZpZ1slEolHA4HhoaGsG/fPrS0tLxRsEILTjgcxqtXr/DTTz9hZmamps/JbDZjZGQEo6OjojRZLpfD7XbDYDCImH+5PgGlUKOS9vZ2Mf2Ww3XVwaLfBlLRGwwGNDY2Qq/XI5FIiIIbtVoNrVYrFoWmpiaYzWYx5EJ6fqadlZJ6VlZWMDc3J3rSLSwsYHl5GT6fb8Oqtc1q7YHXJnZrayuOHz+O48ePo6en5w1HGB1N4vE4JicncefOHfzyyy/w+/1Vf0Z2ux1HjhzB5cuXcfLkSXR0dECj0aBQKMBms0Emk8Hr9cLv9285php47fjUarWwWCxijDeLvjpY9NuEJtjQOVw6gplETEkw5PmORCLCkUWOPnIKRqNR+Hw+zM7O4sWLF3jy5AlevXoFr9eLRCJRcQupUlQqFXQ6nZiy86c//QmHDh2CzWZbJxzyHcRiMczPz+P27du4desW3G531R52s9mMY8eO4d///d9x6tQpOJ1OMZee6uB3796NQ4cOwe12Y21tDeFweNO/UaPRiCEj1eYrMK9h0W8DaeiJhEsipzNqQ0MDMpmMqB6jkFo4HEZTU5PIm6f20NKU3ampKXg8HuFxr/UaGxsb0dHRgf7+fgwPD2NwcFBMnqGGH9JFippY3r59G9evX8fExERFgzClmEwmHDlyBFeuXMHo6Cg6Ojqg0+nWFfFoNBrY7Xbs27cPLpcLHo8HU1NTInOxdJFRq9UwGAzCpOcWWbXBot8m0nM45aRT6I7qwmmHDwaD8Hg8mJ+fR3NzM5qamqDT6URbMp/Ph6WlJczPz2NpaQmhUKjmBBiFQgGLxQKn04m+vj709/djYGAAvb29aGlpgdFoFJYJmfM0+31paQkPHjzAtWvXMD4+vmkXn3Ko1Wr09vbi7NmzwqSnxU1aDkt9BZ1OJ/bv3w+v14tsNouFhQWkUimx0FEIlI5KCoUCqVQK0WhUNN5gE79yWPQ7AJnm1EUnHo8jm82uS1ONRCIIBoOi953RaBQxeGpEGQqFEAqFkEwma05xpbFara2tGBoawtGjR7F//350dnaKQRSlxxCyTsLhMJaXl/Ho0SP8+OOP+PXXX7G2tlb1+zscDoyMjODo0aPo6OhYl90n9TnIZDKoVCqYTCbs3r0b4XBYFCt5PB4kEol1s+cp1AhALKLvKvf/XxkW/Q5AmXCpVArJZFLsUqUNIdLpNJLJJCKRCLxe7xuz2il0VetNLJfLYTKZsHfvXuGo6+/vh8PhgNFoXJfkU2rOh0IhzM/P4/Hjx/j555/LNrGsBLVajY6ODgwODsLhcECr1ZY9d0t3fI1GA5vNht27dyMUCgkhe71esQCSr4EWUxJ9KpVi0VcJi34blOvxLh28IG0OQUj/n3a1nUCpVMJisWDv3r0YHR3F6Ogo+vv7RfltuY61NHWGHIdjY2N49OgRXrx4IRJmqikQonRiGn5BMfRy7cOkMwMaGhqg0+lgs9nQ1dUFt9sNn8+HSCQifAnUpCQej4uchUQiIXISOEmncviT2iZ0NqXwm7Spw9vYgajE1GQyobe3F6dOncLo6CgGBwdhtVrLCp5ae0UiEbjdbkxPT2NsbAxjY2OYnp5e15e+muugz4L69gcCATQ1NYn3L93xS4VP/QYNBsMbC4Y0nEmOUVoEMpmMaFrCbA2LfpuQg8lkMsFsNgtHUzabrWkYY7XvTTXlbW1tGBgYwMDAgOjaW5pDL+3gK40UjI2NYWJiAouLiwiFQuucY+V2542gqkO3241nz56Junyn07mucq90bBd9kZDJL0L1+tLuuOl0Gul0Wjw2HA4jkUiILsTM1rDotwG1kSLTlPLofT4fYrGYCCntlPClxwnaVdVqNRobG2G1WsWIaGpPLe0qS0ePWCyG1dVVkQfw4sULzMzMiGumo0npqCnabTf6m+h4k0ql4HK5RHKPz+fDwYMH0dvbC5vNJppe0K5P/pBkMolwOAy3242VlRWRgESCl/4dtNvTBN1EIoF8Ps+irxAW/TYgYVBZbE9PD/bu3Stmt1G/vEonqpaKWvoz6WOkTSpVKpUozqEhEx6PR/TspyYYiUQCgUAAbrcb8/PzmJycxNTUFNxut5gcK3U6Uhsqqb9C+lXu76FjA4k4GAxidXUVKysrOHToEPbu3Yu2tjaYTCbhVKThltImJLQIScN2RD6fF/346Evq4We2hkW/TRoaGsR02M7OToyMjKBQKECtVmNhYQGBQEDcvBvt+lKxS8+/pedgaehK+hhK7Jmfn0ehUBBnaTrnUqccygGg3H1yhEnHQ1FYrHS+nNQC2AqqzPP7/YjH40L4Ho8HBw8eFOY+HYOCwSBmZ2fx+PFjjI2NYXFxUYQ9S6HuP9LKxtJJuczmsOi3Ae245LVuaWnB4OAgFAqFKJGdnZ2Fz+dDMpkUwpGKn25WqdjJdC9XQy99LuUH0E5Mffqoak8ul4uQHFXmkTlMz9vIupAuKmTaS/9bCZTsQ6Y4ed0HBwfR0tICtVqNRCIBl8uFZ8+e4cmTJ5ienhZ+hc0+92KxKGL8lYzdZn6DRb9NSBxKpRJGoxHt7e2iUQZ58+VyuYg5lxvZJBWeVGzSEltKOyWHF0H5ARRrd7vdb1Tr0dSYckjbT9P3tFjQ+9LrbGbab0Ymk4HP58PExIRoItrW1ga1Wo1wOIyFhQW8evUKCwsLCAaDmyYmkR+DPmOz2cxOvCph0e8AZJarVCoYjUbxcyqPpTOodJck4ZZWw9FuWuo1JxO7dNfdiFp6yUsbf0ivYaOcg2pel0Zmzc/Pi6m4crlcLFR+v19YBZX0EdTpdCK8x+W11cGi3yFI+EqlUjTNaG1thdfrFd7oWCy2ruuMVJiUX76Rd5x+Lt1pf49wIC0u1YTqKn1d8j0Ui0X4/X4Ui0XRFETaRHQzqKqRypQrnRDM/AaLfoeQntHpnK9SqcTXRjdmqXktTU8lqh35tBPs9PvQwkaNOSg8KK1IrAQy6Ts6OtDR0QGDwcDltVXCot8GpfHr0iaV0vZW1CCCHrdRrHujXfx9yC+XHlGA32bMVyp4o9GI7u5u0S3Y6XRCr9ez6KuERb9NpLFrik9Ho1H4/X6srKyITjexWKzieHK58+nvnd33tpBaLbRYVsquXbtw9uxZnD59Grt37xadc5jqYNFvA8p6o8qvdDqNaDQqklJcLpfoCBONRkUbra14H8RdikqlElWFFMGodIc3GAzo7u7G+fPnceHCBQwODqKpqYlbZdUIi34bUAYaTXyhxg40PYZGNqvVatEsg8pEpUcDKeUy8Wq9saXv8Tb9AdIkI8pYlHrZqdkIOe9KoxHk/6BOwnv27MEHH3yADz/8EPv37xdz/Nisrw0W/TagxJdgMCgyyGKxmOico9Fo4HA4oFKp4HA4ROiu1IFF02EpIYdGMJNoSheCcguCNJcd+C38RiFDGrO1U1NmN0Kr1cJqtYrW3tTPjnLuaeGjYpp0Oi0WzFwuJ+rrKRZvtVoxPDyMs2fPYnBwkE36HYBFXyNShxvFsKVpsmq1WsTs9Xo97Ha7OAbQUSCTyYgwFeXRa7Va0WSzNMW01AlY+kXXQT4GGoqRTCZFm2lKECrNDpTmEJTmDkgr4ShjUJotSF55hUIBk8kkBmhQARCZ4alUap1jU9oUg3Z96qaj1+thsVjQ1dWFwcFB9Pf3o6mpifvc7wAs+hqRmq5msxkajQa5XE5MfKWW2LS7S7u/kCClQqJRTzqdDjqdbt3wCwDrBE3WgTRqIPWES79opyfBU+++zUROSN9PmnsvHWOtUCjE4kQddx0OB5xOJxwOhzDFqdsNDdAkkdMiSEk5lHFHE3R7enrQ2dlZ8fBOZmtkW5zz3j+P0g4ideRJR05R2yvayaUCLf28pam3NMyS0nfLNb+Qfkl3eakVQN9TS22/3w+v1ytmyld6tpc2r6C/QXrkoB25ra0Nra2twvSWLl7UpppKYsnqoF0/EomIBpfUl4DGe9EYMGriyYKvmrIfGIt+ByhNsNnsi5A2qNjov/T9Rjtxue+lxTi5XE403CTHorQHX+l1S60JqRVCIi9XAajT6WC324UpL01CktYQlC5O0vBmIpFALpcTacwk8nKLH1MVLPp6hM71UrMeKC/4cgU6ZL5TOzDpWR6AaHNFPohqkB4disWiqC5kM37HYNEz6ykVfunxAfjNd0G7fWkLLeYPDYueYeqMsqLn7AaGqTNY9AxTZ7DoGabOYNEzTJ3BomeYOoNFzzB1BoueYeoMFj3D1BkseoapM1j0DFNnsOgZps5g0TNMncGiZ5g6g0XPMHUGi55h6gwWPcPUGSx6hqkzWPQMU2ew6BmmzmDRM0ydwaJnmDqDRc8wdQaLnmHqDBY9w9QZLHqGqTNY9AxTZ7DoGabOYNEzTJ3BomeYOoNFzzB1BoueYeoMFj3D1BkseoapM1j0DFNnsOgZps5g0TNMncGiZ5g6g0XPMHUGi55h6gwWPcPUGSx6hqkzWPQMU2ew6BmmzmDRM0ydwaJnmDqDRc8wdQaLnmHqDBY9w9QZLHqGqTNY9AxTZ7DoGabOYNEzTJ3BomeYOoNFzzB1BoueYeoMFj3D1BmKLX4veytXwTDMW4N3eoapM1j0DFNnsOgZps5g0TNMncGiZ5g6g0XPMHXG/w8xkPfZwY0oKAAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 63; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 64; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 65; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 66; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 67; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 68; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 69; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 70; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current iteration: 71; current eta: 0.5, current beta: 128\n", - "Starting forward run...\n", - "Starting adjoint run...\n", - "Calculating gradient...\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO29WXOT57r+ecma58GWJXnAI7bBZgwGDIYkEBKyqlZW2HvXPtjnXX3WJ/+j/gZ92l+hT1LVtVd2mkwrIYQhgQUshoBHbONBSB4kWdY8D31A3U9eCdmWbCck6P5VuSBGevVK0fU893OPsmKxCIZh6oeGN30DDMP8vrDoGabOYNEzTJ3BomeYOoNFzzB1hmKbf2fX/p+IYrGIlZUVXL9+Hffv34dCoYBSqUQ+n9/R9WQyGRKJBFpaWvCXv/wFg4OD0Gg0e3zXzG+IrNIvtxM98yegWCxCJpNBJpOhUChgZmYG33zzDdRqNTQazY5ET9fb2NjAwYMHce7cOTQ0sGH4NsCif8soFotwu91YWFjYs2tms1kkEgnIZBU3DuZPBi/dbyEKxa9r+V4IVa1Ws+DfIlj0byFSM1y6ANR6DXquQqFg0b9FsHn/lrNTJ16hUAClaO/0GswfE97p30IKhcKbvgXmDwyL/i2EvezMVvC3g2HqDBY9w9QZLHqGqTNY9AxTZ7DoGabOYNEzTJ3BomeYOoNFzzB1BoueYeoMFj3D1Bks+rcQzr1ntoJF/xbCuffMVvC3g2H2kP/vFy/+8n//hP/t/3mIYDzzpm+nIlxPzzB7hD+axv/6f58iVyhiciWCRv00/q9/P/ymb+s1eKdnmD0ilc0jV/i1gXQ0lXuDd7M5LHqG2SPabTr87+92QyYDnCYN/o+L+9/0LVWEzXuG2UP+z48P4H9d6odK8cfdT/+4d8Ywf1L+yIIHWPQMU3ew6BmmzmDRM0ydwaJnmDqDRc8wdQaLnmHqDBY9w9QZLHqGqTNY9AxTZ7DoGabOYNEzTJ3BomeYOoNFzzB1BoueYeoMFj3D1BkseoapM1j0DFNnsOgZps5g0TNMncGiZ5g6g0XPMHUGi55h6gwWPcPUGSz6t5DfYlR1sVjc/kHMnwIW/VvIXo+qlslkkMlke3pN5s3BomeYOoNF/5Yhl8tLzPvd7Pq0u+dyOWSzWTbx3xJY9G8RmUwGq6uryGaz4nf5fH7H1yORG41GyGSy38RXwPz+sOjfAmhHDgQCePr0KWKxGJxOJ4DdOeCKxSLMZjOGhoZgsVj4XP+WwKJ/S8hmswgGg3C73VhfX9+V8036vM7OToyMjMDlckGh4MnmbwP8f/EtIpPJYGNjAz6fD6FQaFe7vEKhgEKhwJEjRzA8PAyHwwG5XL6Hd8u8KVj0bxH5fB6hUAiBQADJZHLH1zGbzbDb7WhubsaxY8fQ0dEBvV6/h3fKvElY9G8JmUwGoVAIKysrCIfDNT9fqVSisbERdrsddrsdNpsNjY2NcDqdUCqVfJ5/i2DR7xHFYlH80Hn6txZKsVhEoVBAJpOB1+vF5OQklpaWSrz31aBSqeByudDT04P29nZYLBYolUrxk8vlUCgU9jzph3kzsOj3gGKxiEwmg2QyiWw2i4aGBqhUKigUCsjlcjQ0NKChoUEsAnuxGBSLReRyOSQSCeG1/9e//oWVlZWartPQ0AC73Y6enh709/ejsbERarUa2WwW2WwW6XRavC+1Wr3tPUn/rOZ91vJZSBdWei4vRLXDot8D8vk8IpEI1tbWEI/HoVAoYDQaodVqodVqoVKpoFQqSxYAALtaBEj0kUgEi4uLePr0KWZmZpBOp2u6jkqlQnNzM9rb22Gz2aBUKkU8Xi6XIxaLIRAIwGazQaVSVbxXsjhyuRzy+TwKhYIQpHSxkz6e3jf9bLUoktDpNciSUSqVUKlULPwaYdHvklwuh2g0Cq/Xi4WFBUQiEajVajQ2NsJiscBiscBoNEKj0YjdHygVPB0JqkW629EXPp/PI5vN1ryAKBQKaDQaaDQayOXy164di8WwurqKpqYmqNVqaDQacQ+FQkEIMZVKIZlMikVHqVRCrVaLxY4oFAolxyCKEpBVtNmiUiwWkc/nkU6nkUgkIJPJoNPpoFQqa3q/DIt+x5BJH41Gsby8jJmZGczNzSGRSMBoNCKTyQB4tZOS4KWC2g20OyoUCuj1erhcLnR1daG9vR1erxepVKrm90JipOsT6XRaRAQ0Gg10Oh0ACNM/lUohHo8jHA4jEokgm81CpVLBaDTCZDJBr9cLRyAtTNlsFoVCAXK5XFxTp9NBo9FAoVBUtA6kCwx9tmSVcCixNlj0OySfzyMWi8Hr9WJmZgbPnz+Hx+NBNpuF3W6HxWIRzi+5XP7a2V7q6NuJeU/X0el0sNvt6Ovrw+DgIBYXFxGNRpFOp3e1wJDJrVar0dDQgEQigfX1dUSjUWSzWcTjcUQiEQSDQfh8Pvh8PoTDYchkMpjNZjgcDjQ3N8NsNkOtVotFMh6PI5FIIJvNQi6Xw2g0ioiB1WqFXq8XJjt9LiR4+qnVMmJKYdHvkEKhIITg9/uxsbGBeDwO4JUgdTod9Ho9dDrda0693QqekMlkUCqVMBgMaG9vx8DAAH755Rd4PB5kMpmqRK9QKMT9SY8KKpUKFosFTqcTzc3NMBqNQvy085PY3W43lpeXEYlE0NDQAIvFApfLhZaWFlitVqhUKnEMCgaDCIVCSCaTYoFoa2vDwMAA9u/fD4fDAaPRCKVSKe6nUCggn88jl8uJH7IcuAiodlj0ewCZqSaTCRqNBq2trWhpaYHdbofJZIJWqy1x5AF748EnlEolzGYznE6n8L5XK3iDwSB212KxiIaGBhiNRjQ1NYn3QSE8chyGw2Ekk0lsbGzA4/FgcXERKysrSCaTkMvlSCQSyOfzyOfzwrFJUYa1tTUEg0HEYjEUi0UYDAa0tbUhkUigoaEBSqUSCoVCHF+AX/0VdJyg44tGo+EioB3Aot8hZPqaTCbYbDZks1k0NTXBbDajo6MDHR0dsNls0Ol0WzqpdguZ4SqVCmq1WpxvqxG9UqmE1WqFxWIRzzWbzWhvb0dnZ6fYdclrn8/noVQqkU6n4fP5REKQz+fDxsYGcrmccPZls1lkMhlkMhnkcjnEYjFsbGwgGAwiGAwilUohn88LU5/8AOT0pM9XJpMJR2EikUAkEkE8HodcLodWqxW7PZv71cOi3yH0paRdkcxRs9kMl8uFpqYmscP/1ok6dH0yoatNwVWr1bBarWK3J4fgvn37YLfbYTAYSopsyBFpMBggl8sRj8fF0YY86nQfVNJLpnkymRR+gHg8jkwmg3w+j0wmg2w2C4VCAZ1OJ0KdMpkMer0eDQ0NyGQyiEQiCIVCCIfDSKVSUKvV0Gq1yOVyv8ln+jbDot8hZH7qdDo0NjZCr9eL+LzVav3dBA+URhJ8Ph8ikUhVz1OpVNDpdLBYLGhra0NfXx+6urrQ2Ni4afybwmtU1be6uiqce+S0zOfzkMlkkMvlUCgUIqMvk8kgnU6XePDpGLC2tgaVSiWOQ4VCAVarVRwNyH8QjUaFA9BkMonmHrzTVw+LfoeQ6OkLajAYoFQqRQhK6hj7raHkIK/XC7/fX7VzS+oEPHjwILq7u8X5vZKIaAErFAoIh8NYW1vD+vo6kskkGhoaROhPJpNBrVbDYDDAZDKJnZpyEsgZJ83gi8ViWFtbw9TUlDhCNDc3Q6lUIhQKwev1YmVlBfl8XtQINDc3c0efHcCi3wVk4hMKhULkq/9egi8Wi0in01haWsLExASCwWBVz1MqlbBYLGhvb0d/fz+6urpgtVq3TXYpFotIJBLweDxYWlpCPB4XzjR6z7Rj2+12NDU1IZVKIRaLVUzjpaQbmUyGSCQCt9uNhoYGxONxNDU1oaGhAaFQCMvLy/D7/dBqtejt7YVKpUIikShZPJjqYNHvAvI2064ojcf/XuZmLpdDOBzG5OQkHj58WLVpr1ar0draiqGhIfT09FQl+EKhgGQyCZ/Ph5mZGZGXQP8GvLIGDAYD7HY7WltbYbfbkUgkkEwmsbi4CJVKBaA0q5CET45BWkwMBgMAIBaLiRwBq9WKpqYmNDY2Ip1O76odWL3Cot8FdG6lv1Pyze+5y8diMczNzeHhw4eYnp4W2WrbYbPZMDAwgKGhITQ3N1fVFSefz8Pn82FsbAwzMzOIRqOvPUYulwsLor29HY2NjYjH44jH42hsbIRGo9k01TafzyOVSiEUCiGTyYiMOyr6SSQSIiRIvgFpJiFTHSz6XVBe5fV77vAkhpWVFdy+fRuPHj1CLBbb8jl0pgaAgYEBDA8Po729XXjJt4KchXNzc7hx4wYWFxcrPk6tVqOpqQnt7e1wuVwwmUzQ6XSIRCJobGwU/o5K16eMOwrnkf+AogG5XA7pdFrE69m03xks+l0iFf7vVUdPQlheXsadO3dw/fp1zMzMbPs8EkhTUxPeeecdHD9+HFartSrLJJPJYGlpCQ8ePMCDBw8qNuogr7rD4YDL5SrJU7DZbLDZbCLcB5QuQnR/dEyQmv7k5QcgrAGpac+e+9pg0e+C8i/b7/Hlox3X5/Phn//8J7766is8ffq06iIbg8GAU6dO4eTJk2hra9u2Rh54tcgEg0HcvXsXN27cEDX75aJtaGiA1WoVmYEGg0Fk+hkMhpIY/FavRYlA9H7JAgAgKu0ozs/UDot+D5B+iX9L4RcKBWSzWfj9fvz888/4/PPPcfv2bYRCoaqv0dHRgcuXL+PQoUPQ6XTb3m+xWEQ0GsXs7Cy+++47/POf/yz5NykKhQLNzc1wuVyi0EYul4u69/Iy261ekxaUcmHTsYbj8zuHRb+H/NaCz+fzWF1dxd27d/H3v/8dP/3007aCl+7GHR0d+PDDDzE6OoqWlpaqBFgoFOD1enHz5k08fvxYeOvLd3ngVRjQ5XLB5XKJZCXp8YeOJZXO4ZWaaZSb+vR3aaENz9mrHW45skv2sgXWVuRyOfh8Pty/fx//8z//g9u3byMQCGz7PBKH1WrF5cuX8emnn6Krq2tbM5ueG4/HMT09jR9++AFer/e160qhVF673S6acpAzjhJ0YrHYptVx5RWIW/kaKNuPBV87LPo94Lf84lEG28bGBh48eICrV6/ixo0bVQmeMJvN+OSTT3DlyhUcPXoUJpOpquel02m43W48fvwYz549Qzqd3vS9Uq89l8tVktVHR5JoNIpAIICNjY3XGneWt83aLuxJBUbcKmtn8Cf2B6dYLCIUCmFsbAzffPMNfvzxx5oEbzQacf78eVy5cgUnTpyAyWSqepGKRqN4+PAh7ty5s21bbbPZjO7ubrS0tAgPPZni1HLr5cuXCAaDJU46Qip2shDKd36Cah60Wi13zdkBLPo/MIVCAbFYDNPT0/j2229x8+bNqrrdSkUyODiIv/71rxgeHobNZqv6tcm0/+WXX/D48eOS31fC4XDg8OHDaGtrE0eHYrGIbDaLQCCA2dlZeDweRKPRipVxJHKqpy/3B0gfp1KpoNVqS44QTPWw6P+gFAoFxONxzM7O4ubNm/j++++xtLRU1XOl02aHh4cxMjICm81Wkziy2SzC4TBevnwpUns3e75SqURXVxcOHz4Mh8NR0hMvHo/D4/FgYmICXq+3YhsvEjf1HaCfSq9HCwN1JeKdvnbYe/8HhFpxLSws4Pr16/j6668xNzdX0xALtVqNs2fP4uzZs2htba0qHk/QkWJ+fr6qo0RPTw+Gh4fR29sLs9kshJjNZrG+vo4XL15genoa6+vrm1oKlNJMC0aloSHSDrp8pt85LPo/GGTSz87O4saNG/j6668xNjZWdfINCaapqQnvv/8+jh07Br1eX9Mun8/nsbKygnv37sHtdovfVxKsxWLByMgIRkZG4HQ6RbcbapzhdrsxNTWF5eXlLd8D7fbltQybPY76+rFpXzss+j8QVDFHgr969SrGx8dFw81qKBaLUKvVOHDgAI4cOYK2tjZR2VYtJPq7d++WiL4cjUaDoaEhjI6OYnBwEEajUYiWFq+5uTlMT09vWf0ndeI1NDSI+Lw0Ti+Ny//elYxvGyz6PwCUeENe+n/84x+4du0aZmdnqxa8NFmmu7sbly5dQnd3txhOUQvZbBahUAhut1ukxVba5dvb23Hp0iUcO3ZMdNuROvDoiLCwsLDt5J1yL335CKvyxzI7h0X/hqGw1traGh4/fox//OMfuHHjBubm5mrq/0bi0Gg0GB4exrlz5+BwOGoWSCaTwcrKipjWsxlWqxWnTp3C+fPn0dnZKfrjk1BTqRR8Ph88Hs+WZ3mgNE5f3t9+s2635Zl5TPWw6N8g1PXG7/fj/v37uHr1Kn744Yeah1ASKpUKw8PDGB0dRU9PD4xGY82iTyaTePr0Ke7evSvO4JW87SdOnMAHH3yAvr4+mEymkkrDQqGAaDQKj8eD1dXVbR2Q5c466ptXabeXLg4s+p3Bon9DSItnfvrpJ3zxxRe4desWfD7fjq/Z0tKCS5cu4fTp0zUl4RDUa+/hw4e4ffv2po631tZWnDlzBidPnoTNZhOJONL3FgqFMDc3B7/fv+VrlufcS0W/VYMM6WOY2mDR74JyB1O1IqPUWnKWUfEMCWSzM/RWuFwuXLhwAefOnUNnZ+eOBjvG43FMTU1hfHy8JDYvvRej0YiRkRGcOnVqUydhLpdDMBjE7OzstqIvH/clnau3laClOz3v9rXBot8hJFzpvLpqRF8sFpFMJrG2toY7d+7g888/x82bN7GxsVHymFqw2Wx499138emnn2JgYGBHSSuZTAYLCwu4du0aJicnN72Xnp4efPjhhzhw4IAYSgGgxDzPZDIIBoNYWlraNn2XmotS6S2N49pql2fzfnew6HdILpcTvdqoFXb54MVKz0kmk1heXsZPP/2EL7/8suZ6+HIsFgsuXryITz/9FO+88w6amppqFnwul4PH48FPP/2Er776CgsLCxUft2/fPrz33ns4ceIEnE5nRWuCcu0DgcC2nXkVCoUYWqHX68W9VOO5lzr8mNqoSvT1vJpuJuBMJgO/3w+/3y8mx1osFiF82gFp16K01tnZWdy9exfXrl3Dw4cPdyV4u92Oc+fO4cqVKzhz5gzsdntVDS6l5PN5BAIB3LlzB1evXsWLFy8qPk6lUuHUqVO4dOkS9u3bt2koMJPJYG1tDW63e9MjAv1OqVTCZDKJaUCpVAqZTKaq481WtfnM1lT1DeG46K9tnAAgkUjA6/VibGwML168gNFoRHd3Nzo6OsQXmHZbqiNfWVnB7OwsHjx4gNu3b2NqaqrmOfJSHA4Hzp8/j3//93/HmTNn4HQ6dyT4tbU1PHjwAF9//TXu3btX0dOuUCgwODiI9957D0eOHIHRaKx4PQrVLS4uYmpqSozXqiRMtVqNxsZGtLe3i3sPBAKIx+NVfd+oWSaLvnbYvN8GqgWnoQ6FQgF+vx9Pnz7FvXv3sLCwAI1Gg76+Phw6dEj0kKfxTpFIBEtLS3j8+DH+9a9/4fnz5wiFQjXl0ZfT2tqKDz/8EJ988glOnDghJsHU+r5WV1fx4MED/P3vf8etW7cqtrQGXkUF/vrXv2JkZASNjY2bvhb5K168eIHJyclNFzUanLl//34MDg6iublZTLylXP/tzHaaZMstsGtnS9EnEom6/FBpZHOxWMTi4iKmp6extraGeDwuKs9mZ2fhdruRSCSgVCqxuLiIubk57Nu3DxaLBcViEeFwGH6/HysrK2Is03aZaVKkzjHgVeLN0aNH8e677+L999/H4cOHd2TSk9OOUn0fP36MtbW1ktel13Q4HPj4449x6dIl9Pb2blm4Q6OsX758CY/Hs+mZ3Gg0YmBgAGfOnMHAwACMRiPW19eRSCQwPz9fVUcf6Tw8pja2/LaEQiE8evQIU1NT4qxaTwsA7eoejwdra2vw+XwIBAIIBAKv7WLhcBirq6uYmJiARqMRefS72dXps1apVHA4HDh+/DguXryI8+fPo6Oj47WpsttBlsfMzAyuX7+Or776Co8fP35tIaLXNRgMuHDhAv7t3/4NQ0NDm5r19JxYLAaPxwOv1ys+n/LzucFgQG9vL06fPo0zZ86gtbUVDQ0N0Gg0WF5eLpmAs9Vr8U6/c7bd6T/77DN89tlnAF6dw3Zjlv5ZaGhoEOfF5uZm2Gw2JBIJ+P3+TcdA0zGABk7sVeKI0WjEkSNH8OGHH+Ls2bPo7e1FY2MjtFpt1WWlVPyyvr6OiYkJfP/99/jyyy83HVgBvLIqSPAnTpyA2Wze9jWCwSCePXu26XVlMhmcTidOnTqFkZER9Pf3w2g0ivnzVLCz1ecmdYzyuX5nbCl66p5C1GKa/pmRful8Ph/C4bCIP2/FXs5KNxqNOHHiBE6ePImjR49iaGgI+/bt21FqbTQaxdjYGH744QfcunUL09PTWF1d3fI5PT09+Pjjj3Hq1ClYLJZtX5OiAI8ePSoRvVSQFosFAwMDOHnyJPr7+9HU1ASFQoFMJgONRiPGWG0lZMqPyOVyQvhs4tfGlqKXyWQifgq82unrbcAAjVL6LZGawEajER0dHcKUHx4eFkMpNhshvRnFYhHr6+t4+PAhrl69imvXrmFubk78u7SMVYrT6cT58+cxPDxcddFOJpNBIBDA3NxcxTCkQqFAR0cHjh07hoGBAdExl2rv6c90Or3l4kljr2jWfSwWQyqVEnX8zPZseyCUfinYcfLbID1Dj46O4i9/+QtGRkbQ2toKi8Wyo/JYciQ+ePAAn332Ga5evfpa1Zz0/6V04RkaGsJHH32Effv2VbXQ5PN54dMg73v5WV6n06G/v1+01KKwJiXhZDIZxONxJBKJLS0qSnCi8dfr6+twOp3Q6/U7Sj2uRzhk9waRCsNut+Py5cv45JNPMDw8jObm5k0nvG4HCf7Zs2f47//+b3z55ZfbjrCmVlSdnZ0YHR3F4cOHYbVaq97ll5eXMTMzU7H+X6lUwul0oq+vD11dXTAajaLrDTnlotEo/H4/YrHYlmd0ckYmk0lEIhGsrq6ira0NTU1NLPoqYdG/AejLTl/utrY2XL58Gf/xH/+BEydOiK61OzVX8/k8PB4Pvv32W/z4448i/30zc55+L5PJRF+9asdXA698PYuLiyVdfqSjqfR6Pfr6+tDb24umpqYSU5zMdQptbtc0JJfLIR6PI5lMIh6PIxgMIh6P76k/5W2HRf8GILErlUq0t7fjb3/7Gz799FMcOXJkRyWx5dcOh8OiA4+0g+5WDSmAV9NsT548icHBwaqPFDRbzuv14sWLFyXRjWKxCIVCAafTiUOHDqGrqwt6vV5kK5JZH4lE4PV64Xa7N42OSK9J5j2NrKa5dkx1sOjfEBaLBadPn8alS5cwOjqK/v7+bcNi1ZBOpzE5OYmbN29ifn4ewPalusViERaLBe+++y6GhoZERmE1UJvr9fV1BINBUXVYKBSgUCjQ1NSEAwcO4ODBg3A6naKlFnnp4/E4VldXsbi4iOXl5aqcppSYQ557jtXXBov+d4I6uFosFnR2duLYsWM4d+4choeH0draCq1Wu+vXSKfTmJ+fx3fffYfvvvtOnOO3KlGlf+vs7MTly5fR29tbUyPNVCqF9fX118ZVqVQq2Gw2HD16FGfOnMH+/fthsVigUChErD2VSgmP//z8PEKhUFVmenlnHaY2WPS/AdSbnYYsqlQqmM1mOBwOHDx4EKOjozh+/Dja29uh1+tr7lZbiXw+D6/Xix9//BHffPONMOu32uXp91qtFseOHRN5/LUk/SQSCayuriIcDkOlUokZ9DabDQMDAzh79ixOnjyJlpYW4ZikI0EoFMLLly8xOTkJt9uNVCpVlYg5IWd3sOh3SXmvdpVKBb1eD4vFArPZDJVKBYPBgM7OTgwODoqzrTROvVuk1XKff/75lk0wpPdNzrsLFy7g8uXLaGlpqXoBovN4NBqFz+dDJpMR1XLt7e0YGBjA0NAQ+vr60NraKjz2lDdPKbtTU1OitqHaHJDyppi849cGi36HqNVqWK1WYbLm83nRBcZsNsNqtcJkMsFisaCtrQ39/f3Yv3+/mN2+V+OY8vk8/H4/7t27h6tXr+LJkydiumy5EMp7yuv1eoyOjuI///M/MTIyArPZXHX3H2qW4ff7EQ6HRXdch8OB7u5udHV1oa2tDVartaTUOJvNIpFIYG1tDbOzsxgfH4fH40EikSjx+G/3+uX/zaKvHhb9DlAqlXC5XOjq6hK7Wy6XE2OZNBoNtFqtyK47cOAAOjs7S5ps7AWZTAZer1d00r1x44bIhqskAhK8Xq8XnvorV67g3LlzaGlpqeq+aKeORqPwer2imq63txdOpxMdHR1iXLVWq4VCoRCFWpTdGAgEMD8/j/HxcczOziIYDNYccpO+v+366TGlsOhrRKFQwOVyob+/H93d3a/tjpRlplar0dLSggMHDogZb3uVPFIoFJBMJrG0tITbt2/jiy++wP3796vqwmM2m3HhwgVcuHABx48fR1dXF5qamrYVPIk2kUhgY2MDHo8HCwsL8Pv90Ov1aGtrQ2dnJ+x2OwwGQ0nrMGlVHJUmj42NYXJyEsvLy6KEm6bX1Hpml3bG5dl228OirxES/b59+2C32yv2xJPJZLBarejt7UVHR4c4AlQLmbnlUJFJJBLB5OQkrl27hm+//RbPnz9/Lb5dbiZ3dnZiaGhIOOwOHz4Ml8sFpVK5pVBIsOl0GhsbG6IrzosXLxCJRNDY2IjW1lZ0dnaipaUFer1e7O70fOk5/uXLl3j69CmePn2KxcVFRKNRcTSSvu9ahJ/P57l1Vg2w6KuERGSxWOBwOGC1WqFUKsWXTZplZzabsW/fPnR0dMBms9Xc5EIqeIpB0+SZ2dlZTExM4MmTJ7h79+6msXi6J5PJhL6+Prz33nt4//33MTg4KM7Z291XsVgU5jh1w5mYmMDc3Bx8Pp84x1utVthsthJzXgp5+T0eD54+fYoHDx7g+fPnCAQCovstOUSlbcm2MvmlTjxpzJ5HV28Pi75KisUiDAYDnE6nSF4pdzxRqM7pdKKrqws2m23H4Tg6N29sbCAajYosu+vXr+P27duvdTBsKIIAABddSURBVJqt5LTr7OzEhQsX8MEHH4idvdrCFKrB93q9+OWXX3Dz5k0xxTaXy5WMizYYDNBqtSVWg9Ssp+s8evQIP//8M8bHx+H3+0UBlzS8SaLfaoZe+Xvmdti1sa3opau2Uqmsu9Ja6ZdJLpfDarVCp9OJczUNawAgMtBaW1vhcDig0+lqCslls1lRNhoKhTAzM4P79+/j2bNnWF1dxfr6OlZXVysWz0gFYjabcebMGVy4cAGnTp1CX18fGhsbq7Y4aCzV3Nwcvv/+e1y7dg1TU1MIBAJi91WpVCgUCtBoNFCr1SWptSRa8gG43W7cvXsXP/zwA548eSJ2eODX75dSqRQhPdq9t4IeV/7DbA830agCg8EAu92Oo0eP4siRI3A4HJDL5Uin00in08hkMsjn8zAYDGhpaYHL5aqplRV9zi9fvsTExIRISV1aWsLExASeP3/+2nMqmfPAq/z5ixcv4sqVKzh9+jQcDgeUSmXVZi+Z9IuLi/juu+/wxRdf4NGjR8I7Lj2rUxvr8kEfJPhwOIz5+XncvXsXP/74I3755Rf4/f4Ss50+o4aGBiiVyqqaldBr0NFHOiGH2Z6ammhQ77e3HWroUCgU0NrainfeeQejo6N455130NbWhoaGBuRyOUSjUaytrSEQCCCZTMJoNMLhcMBisVRlQlPueSAQwMLCAv71r3/h+vXrePToUcnEm0pU2tWcTif+9re/4cqVK6LFVbWTdwiar/fo0SNcvXoVT58+LQmH0d9JrCTwbDYrfpdOp7G+vo4XL17g559/xs2bNzE2NiY6EBFSPwj9lE+t3eqzk57jt3NIMr+ypeh1Oh3+67/+C8ePHxcrej2YUFLzVKfToa2tDb29vWhtbYVOpxNn1VQqhebmZvj9fgSDQdHptZrGEzS/fXZ2Frdu3cKtW7cwMTFRsenmZvdI/y8UCgWGhobw8ccf4/Llyzh06BCsVmvN75sq2CYmJnDr1i08f/684q5LAyfJQgmHw9jY2EAymUQmk8Hq6irGxsbw888/4+HDh3C73RVLZknoJGBaTOlnu3uV+gT2Mv/hbWdL0VssFrz33nt49913f6/7+UMgdUIVi0WRcCM116UjmQwGA4xGI2KxmPBA0xdaKn76XSqVwtLSEh48eICbN2+Kfvj0RadhmFudU6W1+EeOHMGFCxfw3nvvoa+vDwaDYUfvO5vNIhAI4MmTJ7h///6mE2rIrM9ms/D5fHjx4oWoaV9bW8PMzAyePn2KqakprK2tbbtjy+VyIeB8Po9MJrNtso3UIlAoFBWjBkxltt3pma2hIpNMJiP6tsXjcSiVSuHgIsuBEluWlpZw7949fPPNN7h79+5ru1o1TimlUomenh5cvHgRH330EQ4fPoympqYd/z8j593CwgLGx8extLQkhFd+L+RtT6fTcLvdyGaz0Gg0CIfDWFhYwIsXL147u2/32tI+9tV0XJZOCZaOEWO2h0N2ewB9ASnMlk6nkc1mxfRYMptXV1fx+PFj3Lx5E48ePYLH49mRj8TpdGJkZATvv/8+hoeH0dPTU7UfoRJkKgcCAYyPj2NxcVHclzRfv7x6MJlMYnFxES9fvkQqlUIkEhHTgGp5bWmEpNrQG2Xv0aLKTrzq4QGWVbDdF6pQKCCTySAWi8Hn8wEAAoEAFAqFSD31er2YnZ3Fs2fPMD09XZIyW+08eqvVisHBQQwPD+PcuXM4evQoXC7XrjvBUt85t9uN58+fIxgMiiIi8o6T2KXe+kQigVgsVtLBZieQ8Onv1cAm/c7hAZZ7ADWECIVCYvwVmfOhUAherxfz8/NYWlqqmB+/3RedJtyMjIzgo48+EvXplOO+m/uWlrlSWqxer8e+fftKdntamMjJlk6nheNut12Sd7KpUIivlnAk8wo27/cAacuo5eVlrK+vIxwOw+fziaSaSCSyoym1RqMRQ0NDuHjxIkZHR3HgwIFd1+KTs4zaSPt8PszPz2N9fV1U31GyDO34iUQCgUAAKysrWFlZQSwWE36MN2EJkoPVbDbXNO2HYdHvGtoto9EoVldX8fLlS3i9XjHzLhKJiFpxoHpTXqVSobOzU+QInDp1Ct3d3TCZTDXvbOQVz+VyyGQySCQSWF9fh9/vh8/nQygUQjqdhsFgwLFjx2A0GqHX66FWq9HQ0IBMJoP19XXMzs6Khh3ZbPaNCZ7ek16vR2trq6iDYKqDRb9L8vk8kskkNjY2sLKyAo/HA4/Hg1AoJMJY0umzW4mkoaEBer0eZrMZ3d3dGBkZwejoKA4dOlTz/DpKdKFus36/Xwyj2NjYwPr6ukgqMhgM6OjoQHd3txiwIW18kU6n4fP5kEgkxAjqdDr9Rn09+XweOp0Ora2tW47PZl6HRb8LKGU0Ho9jY2MDwWAQGxsbiMViJdV35f3mK8W8tVotmpub0dvbi8OHD+Pw4cPo6+tDW1tb1c036MydTCYRi8UQiUSET2FychJjY2NYWFgQk3SpGciJEyfQ0tKCrq4uNDc3i2o5skpUKpXwyJPzbreZmVKPe63+AHquWq2GxWKBTqdj874GWPS7gLL2yKFFqbsU2qLZf+QFp98rFAoYDAaYTCY0NjaiqakJDocDLS0t6OzsRE9PjxC7RqMR3vJKdfbSNNh0Oo1oNAq3242JiQmMj4/j5cuX8Pl8YmePRqNCsBaLBS6XC06nU/QHoJoBqXXS0NCAbDYrji+JRGJXnxs54eg91eoINJvNsNlsMBqNUKlU7MirERb9LqHsO5VKBZPJBIPBIBxc0t1eoVBAp9PBaDSisbERdrsdLpcLLS0toirPZrPBZDKJ83R5SIpMdmknmlgshkAgAK/Xi+XlZaysrGBhYQFTU1OYmpp6rQQX+LWZp8lkEh1vnE4ndDrda69JkYm1tTU8f/4cbre7qoKYSlB9Py1m1FiTchuqgSIZ0lZl9R5SrhUW/S4gQVMzTIfDAZ/PB7lcLopBpM0ym5ub0draitbWVrhcLjQ1NcFiscBgMECn05UIXWr60m5OTrh4PI5oNIpIJAKfz4e5uTk8e/YMExMT8Hq9iMfjW059od27qakJ/f392LdvH0wmU8kRgrIIKdV2fHwc09PTYkBlrSiVSjQ1NaG3txddXV3Q6XQIBoOYnZ3F0tJS1bu9UqkUx6D29nZotVoOKdcIi34X0Hldo9HAZrPB6XQiEAiIWvNCoSDSdJubm9HW1oa2tja4XC40NjbCYDCIEdTSVFLpTp7JZMSwxkAggJcvX2J+fh4LCwtYWVkpccyFw+GKwinP/5fL5ULwg4ODcDqdwlMvfRy15pqZmcHPP/8suvTUilqtRm9vL06ePInjx4+jpaUFCoUCKysrsFqt4oi03Ugr4FVPAyphdjgce9ZGvJ5g0e8SuVwOtVpdYrYDv3rqydnkcrnQ1taGlpaWEsFLzWnyCVCb6GAwiOXlZbjdbhEKpOiA1+utaLoDKDmPS/8Efm30cfjwYZw8eRI9PT0wm80lxUS06MTjcczOzuLu3bt4+PDhjnZ5Gl558eJFnDt3ThQEFYtFtLe3Q6PRiPRdr9e7bVafRqOB0WiExWIRZ3oWfW2w6HcB7fTSttdarVb0HaByUWnVHjndstlsScutcrGvrKxgfn4ek5OTmJycxPz8vAixbWcGVzLrFQoFNBoN7HY7hoaGcP78eZw4cQIOh+O1KbLU4mppaQl37tzB7du3sby8XPPZWa1W48CBA7h8+TI++OAD7N+/X5Qe5/N5aDQaFItFRCIRRCIREQXZLDKgVCphMplgMplE1SMLvnZY9LuEwkck7lwuh1QqJdpeyWQy4d0nwadSKZFJJu0WE4lERPPLyclJzMzMwOPxIBgMbju3fSu0Wi0cDgf279+PwcFBDA0N4cCBA2hvb4fBYBCLDx0pkskk3G437ty5gx9//BFTU1M1ZxOq1Wqxw1+6dAn9/f2iKzAtcnK5HC0tLTh69CjC4TDi8TimpqaE8MtDm3q9HlarFQaDQTQ6YSde7bDo9wjKR49Go1hfX0c0GhX93ClE5/V6xRGAvrzk9AuHw/D7/XC73Zifn8fi4iJ8Pt+OUneBVyIxm82iSWdfXx8GBgbQ29tbMnmGFh1akCgP/+HDh/jhhx/w7NkzMd++ltd2uVw4c+YMzp8/XyJ4OspQEY/RaERnZycSiQQymQxUKhVmZ2cRCoVEGJSsIaPRKCwFyo+geQK841cPi36XVAqf0UBHqRddLpdDo9HAYDCIGD15ntPptPDE+3w+EcLaSRNSmUwGjUYDh8OBvr4+HDt2DIcPHxbz84xGIzQaTYlQaMGiasDHjx/j9u3bePLkCdbX12u+B7PZjP7+fpw+fVqc4cujEsCvk3zNZjN6e3sBvDqzm81mzM3NIRgMCisJ+LWyLpfLiWQoylRk0VcPi34PoHRXalnt9/tFXTmF7oBf4+P05SXnGYmO4vs7LVGlnbO3txcnTpzAiRMnxABJs9n8WqKP1I9AzT2ePXuGe/fuYWxsrKZGGIRSqRRHiba2NphMpopnb/pvcoQ2NjaWhEC1Wi3m5+fh8/kQiUTErp9KpZBMJkXdAL03pnpY9LtEKh6qWovH44jH40ilUsIjvxPnW7XQtFwaD3369GmcPn0aAwMDaGpqKkmrld6ztAfAwsICxsbG8OTJE0xPT8Pn89UseEpCkibgSF+z0m5MzTAoytHe3i4+R0rckZYqk8MvHA4jHA4Li4iz8qqHRb9LpI484NfRU9IebuUNIrYyRWsVv0KhEIkv/f39OHv2LEZGRtDX1webzVayu9P1accMhULCcTg+Po7x8XHMz8+LQRS1QlYMxfeDwSCi0ajIAZC+7/K/k/D1ej1MJpMYbU1HJ1pU6dhEztJEIoFsNrurvgL1Bot+l9DuRud1SqFNJpOvJcVU+vtOIUeYSqWCxWJBd3c3Dh8+jEOHDqG9vf21DDtpZh+FBd1uN6ampjA+Po6ZmRksLy+LYhxp+jA507a7b7p+MBjEzMwM7Ha7OG9LR2lttuPTZ5PL5cRuHo1GkUwmRaJSIpEQuztZKqlUimvqa4BFvwtoh5dm3bW2top6czrPb9ZgstL1tvo97Zb0umq1WgzioGw/qsgj8dBr0xBKCgvOz89jamoK09PTWFxcxPr6uvBBACjJaZfm+5f3tJNCrxkMBjE9PS2ab8RiMQwMDKC5uRk6nU44Ecutj2w2i3g8jtXVVbjdbqysrAgTniwPGjBCackkep5YWz0s+l0iFT2NpqZxVzKZTIS7SEyVxEJffmm8X/pT/m/kECTrgnZ1Cv0FAoESk5eafKyvr4uCnJmZGczPz2N1dVVMjqUKQbo+/SnNFJTmyJe/F0rdlYb/wuEwQqEQYrEYhoaGRJsvafRAWvfv8Xjw/PlzPH/+HGtra0gkEiUxe3osLRK0IHC8vnpY9LuABEIVdE6nE0NDQ1AqldDr9dBoNFhaWsLGxoZw6lXaJcsFTWKTdnqV+g3oMZSCmk6nEQwGsbCwIBpekLBIfJQDsLS0JFp6UWxc2u2WXlupVIrjASUPVfJPVIJGY+XzeUxOTiISiYj2WoVCQYz9IucbCd7tduPp06d48uQJ5ufnEYlEXhM0LSy081PDTqZ6WPS7RGpqWywWdHV1QavVwmQywWw2w2g0CucYmc+0cxIkYqnYpaOaynPpCWpXRd17aKQ0Oe9IfNIdNxKJiNi31KNOzjRpOy9abKROye3GTUnJ5XIinRf4Nc5eLBZht9uhVqvFdNyXL1+K8dsTExNYX1/ftjuPUqkUE3NZ+NXDot8DSKzktFKpVNDpdNDr9SLrTS6Xw+fziYQd6Y5f7skm64GuC6DkbC5dNKgyTWqS0+PJ/CVzuxLlRTmU3kqPp37+5EjbiSmdSqWwvLyM8fFxGI1GyOVyxONx6HQ6pFIprK6uYmpqCg8fPsTY2BhWV1c3FTx9vvQnJTnxeb56WPS7hHZGEqpGoykRIDm3pI01aLesFLuXxv2l/eBJ6NI/yz3qUgFLR2tVC3nf6fWosQW93k5z3YvFV6O8VlZWMDU1BZVKhY2NDTEVh5yKNBlnqx2eCpy0Wi10Op1YVJnqYdHvEWQKy+Vy4T23Wq1wuVzw+/3weDxYXV1FKBSqGMojgZLQKSdfWqFX3jmnUunsbqEFR3qPu+lpL70G5fUrFAr4/X7IZDIROqTPZjuTnnoK2mw2McaLTfvaYNHvIVKnGyWqqNVqaDSakph5ucClz6dzdj6ff62LrvQ8/Vt6q2u1EKqBrAiqmw8Gg0in0wiFQgiFQiLJZrtuwRaLBU6nEz09Pejo6IDBYGDTvkZY9LtEKhASprTPfCqVQjweRywWe62BZrm5XC62rZph/BmhI8PGxoaookskEmIk1nY7fHNzM4aGhnD06FEcPHgQLS0t0Ol0XGxTIyz6XVK+a0tr0sPhMNbW1uDxeLC2tiZCUNXk4tO1pWzmxf+zQOE28nOQr6OaHH+dTocjR47g0qVLOHXqlNjl+TxfOyz6XSDd2WnnJo95LBZDMBjE6uoqVlZW4PP5RN74VoL/swp6K5RKpXC6UWmsNLFmKxQKBRobG3Hw4EFcunQJo6Oj6OzsLInzM7XBot8F0iw1adYaNbKkuHg6nRYNNGmHky4WUqTdaKV/boc0vk5IfQF74YyrFvJpUNagyWSCzWaDwWAA8GpgRjgchkqlEhl30vuTlt02NTXh6NGj+PDDD3H27Fl0d3dDr9eXFBExtcGi3wWFQgHpdFp8cQGIc2o0GkUqlYJcLofdbkc+n0dzczOSyaTIH6cYOnnppbX20jRYaYLOZnXp0vg8iZ1i6/F4HIlEQhSr7LRvfTXQIAqLxQK9Xi/ShE0mE5RKZckEnkQiIfwclK1H3nmKgrS2tuLUqVM4ffo07/B7BIt+F0h3UvLC065KX16TyQSn0wmtVitEJ/2Rdtah5hHUXFOtVr+WcFMeg5fG8cl5KG3ASSOlSfgkeuk1tooMlL9eeX0A/Xsul4NKpUJzczO6u7vR2dkJu90umljK5XJRGkslt3Sep3uVLn5arRY2mw19fX0YGhpiT/0ewqLfBdJEEXIo5XI5sVvTv1mtVsTj8ZIEHfohISmVSlFPTudfEr00Vi8VtzRKIO2yK/0hS4REL3UkVgrNSf9bmpRTXm4r/aHRUtQBZ9++fejs7ITD4RCmeC6XK2kJRt1wyJlH90PpxzSRloZqUiYfm/S7R7aN4+jt8yrtISREqYDKx0LTzio990vFJi2mIfOezFvpLi/dcaWiLXckSoVKLbyotRSVqVbrLJTu4tIGlXRvVG9AY7mol79WqxXjrilllsJ10vAldRiimgSVSiV6ElAzDTomcLvrHVHxA2PR7zHlGXblKbfl+faVzurSktqtrr/Z76RijcfjYpouiavS46ULmDS3v7zUVmraK5VKGI1GOBwOkR0n9TGUHwPKrRVaBJLJJPL5vNjhqeaefBt8ht8xLPp6pFLeP1BZ8GTG03EBgDDfVSqV2G2lCxVlHdJRpBYoXk9WhNTaYfYEFj1TSiWrpDyUuFltP/OngEXPMHVGRdFz/INh6gwWPcPUGSx6hqkzWPQMU2ew6BmmzmDRM0ydwaJnmDqDRc8wdQaLnmHqDBY9w9QZLHqGqTNY9AxTZ7DoGabOYNEzTJ3BomeYOoNFzzB1BoueYeoMFj3D1BkseoapM1j0DFNnsOgZps5g0TNMncGiZ5g6g0XPMHUGi55h6gwWPcPUGSx6hqkzWPQMU2ew6BmmzmDRM0ydwaJnmDqDRc8wdQaLnmHqDBY9w9QZLHqGqTNY9AxTZ7DoGabOYNEzTJ3BomeYOoNFzzB1BoueYeoMFj3D1BkseoapM1j0DFNnsOgZps5g0TNMncGiZ5g6g0XPMHUGi55h6gwWPcPUGSx6hqkzWPQMU2ew6BmmzmDRM0ydwaJnmDqDRc8wdYZim3+X/S53wTDM7wbv9AxTZ7DoGabOYNEzTJ3BomeYOoNFzzB1BoueYeqM/x/3BueqrgPJiwAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "algorithm = nlopt.LD_MMA\n", - "n = Nx * Ny # number of parameters\n", + "n = Nx * Ny # number of parameters\n", "\n", "# Initial guess\n", "x = np.ones((n,)) * 0.5\n", - "x[Si_mask.flatten()] = 1 # set the edges of waveguides to silicon\n", - "x[SiO2_mask.flatten()] = 0 # set the other edges to SiO2\n", + "x[Si_mask.flatten()] = 1 # set the edges of waveguides to silicon\n", + "x[SiO2_mask.flatten()] = 0 # set the other edges to SiO2\n", "\n", "# lower and upper bounds\n", - "lb = np.zeros((Nx*Ny,))\n", + "lb = np.zeros((Nx * Ny,))\n", "lb[Si_mask.flatten()] = 1\n", - "ub = np.ones((Nx*Ny,))\n", + "ub = np.ones((Nx * Ny,))\n", "ub[SiO2_mask.flatten()] = 0\n", "\n", "# insert dummy parameter bounds and variable\n", - "x = np.insert(x,0,0.5) # our initial guess for the worst error\n", - "lb = np.insert(lb,0,0) # we can't get less than 0 error!\n", - "ub = np.insert(ub,0,1) # we can't get more than 1 error!\n", + "x = np.insert(x, 0, 0.5) # our initial guess for the worst error\n", + "lb = np.insert(lb, 0, 0) # we can't get less than 0 error!\n", + "ub = np.insert(ub, 0, 1) # we can't get more than 1 error!\n", "\n", "cur_beta = 4\n", "beta_scale = 2\n", "num_betas = 6\n", "update_factor = 12\n", "for iters in range(num_betas):\n", - " solver = nlopt.opt(algorithm, n+1)\n", + " solver = nlopt.opt(algorithm, n + 1)\n", " solver.set_lower_bounds(lb)\n", " solver.set_upper_bounds(ub)\n", " solver.set_min_objective(f)\n", " solver.set_maxeval(update_factor)\n", - " solver.add_inequality_mconstraint(lambda r,x,g: c(r,x,g,eta_i,cur_beta), np.array([1e-3]*nf))\n", + " solver.add_inequality_mconstraint(\n", + " lambda r, x, g: c(r, x, g, eta_i, cur_beta), np.array([1e-3] * nf)\n", + " )\n", " x[:] = solver.optimize(x)\n", - " cur_beta = cur_beta*beta_scale" + " cur_beta = cur_beta * beta_scale" ] }, { @@ -1915,35 +379,24 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "lb = 1-np.min(evaluation_history,axis=1)\n", - "ub = 1-np.max(evaluation_history,axis=1)\n", - "mean = 1-np.mean(evaluation_history,axis=1)\n", + "lb = 1 - np.min(evaluation_history, axis=1)\n", + "ub = 1 - np.max(evaluation_history, axis=1)\n", + "mean = 1 - np.mean(evaluation_history, axis=1)\n", "\n", "num_iters = lb.size\n", "\n", "plt.figure()\n", - "plt.fill_between(np.arange(1,num_iters+1),10*np.log10(lb),10*np.log10(ub),alpha=0.3)\n", - "plt.plot(10*np.log10(mean),'o-')\n", + "plt.fill_between(\n", + " np.arange(1, num_iters + 1), 10 * np.log10(lb), 10 * np.log10(ub), alpha=0.3\n", + ")\n", + "plt.plot(10 * np.log10(mean), \"o-\")\n", "plt.grid(True)\n", - "plt.xlabel('Iteration')\n", - "plt.ylabel('Average Insertion Loss (dB)')\n", + "plt.xlabel(\"Iteration\")\n", + "plt.ylabel(\"Average Insertion Loss (dB)\")\n", "plt.show()" ] }, @@ -1956,30 +409,23 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "opt.update_design([mapping(x[1:],eta_i,cur_beta)])\n", + "opt.update_design([mapping(x[1:], eta_i, cur_beta)])\n", "plt.figure()\n", "ax = plt.gca()\n", - "opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n", - "circ = Circle((2,2),minimum_length/2)\n", + "opt.plot2D(\n", + " False,\n", + " ax=ax,\n", + " plot_sources_flag=False,\n", + " plot_monitors_flag=False,\n", + " plot_boundaries_flag=False,\n", + ")\n", + "circ = Circle((2, 2), minimum_length / 2)\n", "ax.add_patch(circ)\n", - "ax.axis('off')\n", + "ax.axis(\"off\")\n", "plt.show()" ] }, @@ -1992,70 +438,37 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Starting forward run...\n" - ] - } - ], + "outputs": [], "source": [ - "f0, dJ_du = opt([mapping(x[1:],eta_i,cur_beta)],need_gradient = False)\n", + "f0, dJ_du = opt([mapping(x[1:], eta_i, cur_beta)], need_gradient=False)\n", "frequencies = opt.frequencies\n", "source_coef, top_coef = opt.get_objective_arguments()\n", "\n", - "top_profile = np.abs(top_coef/source_coef) ** 2" + "top_profile = np.abs(top_coef / source_coef) ** 2" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plt.figure()\n", - "plt.plot(1/frequencies,top_profile*100,'-o')\n", + "plt.plot(1 / frequencies, top_profile * 100, \"-o\")\n", "plt.grid(True)\n", - "plt.xlabel('Wavelength (microns)')\n", - "plt.ylabel('Transmission (%)')\n", - "plt.ylim(98,100)\n", + "plt.xlabel(\"Wavelength (microns)\")\n", + "plt.ylabel(\"Transmission (%)\")\n", + "plt.ylim(98, 100)\n", "plt.show()\n", "\n", "plt.figure()\n", - "plt.plot(1/frequencies,10*np.log10(top_profile),'-o')\n", + "plt.plot(1 / frequencies, 10 * np.log10(top_profile), \"-o\")\n", "plt.grid(True)\n", - "plt.xlabel('Wavelength (microns)')\n", - "plt.ylabel('Insertion Loss (dB)')\n", - "plt.ylim(-0.1,0)\n", + "plt.xlabel(\"Wavelength (microns)\")\n", + "plt.ylabel(\"Insertion Loss (dB)\")\n", + "plt.ylim(-0.1, 0)\n", "plt.show()" ] }, diff --git a/python/examples/antenna-radiation.py b/python/examples/antenna-radiation.py index 9d6ea4cb1..4b5d0b778 100644 --- a/python/examples/antenna-radiation.py +++ b/python/examples/antenna-radiation.py @@ -1,116 +1,116 @@ -import meep as mp import math -import numpy as np + import matplotlib.pyplot as plt +import numpy as np +import meep as mp resolution = 50 # pixels/um sxy = 4 dpml = 1 -cell = mp.Vector3(sxy+2*dpml,sxy+2*dpml) +cell = mp.Vector3(sxy + 2 * dpml, sxy + 2 * dpml) pml_layers = [mp.PML(dpml)] fcen = 1.0 df = 0.4 src_cmpt = mp.Ez -sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=df), - center=mp.Vector3(), - component=src_cmpt)] +sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=df), center=mp.Vector3(), component=src_cmpt + ) +] if src_cmpt == mp.Ex: - symmetries = [mp.Mirror(mp.X,phase=-1), - mp.Mirror(mp.Y,phase=+1)] + symmetries = [mp.Mirror(mp.X, phase=-1), mp.Mirror(mp.Y, phase=+1)] elif src_cmpt == mp.Ey: - symmetries = [mp.Mirror(mp.X,phase=+1), - mp.Mirror(mp.Y,phase=-1)] + symmetries = [mp.Mirror(mp.X, phase=+1), mp.Mirror(mp.Y, phase=-1)] elif src_cmpt == mp.Ez: - symmetries = [mp.Mirror(mp.X,phase=+1), - mp.Mirror(mp.Y,phase=+1)] - -sim = mp.Simulation(cell_size=cell, - resolution=resolution, - sources=sources, - symmetries=symmetries, - boundary_layers=pml_layers) - -nearfield_box = sim.add_near2far(fcen, 0, 1, - mp.Near2FarRegion(center=mp.Vector3(0,+0.5*sxy), - size=mp.Vector3(sxy,0)), - mp.Near2FarRegion(center=mp.Vector3(0,-0.5*sxy), - size=mp.Vector3(sxy,0), - weight=-1), - mp.Near2FarRegion(center=mp.Vector3(+0.5*sxy,0), - size=mp.Vector3(0,sxy)), - mp.Near2FarRegion(center=mp.Vector3(-0.5*sxy,0), - size=mp.Vector3(0,sxy), - weight=-1)) - -flux_box = sim.add_flux(fcen, 0, 1, - mp.FluxRegion(center=mp.Vector3(0,+0.5*sxy), - size=mp.Vector3(sxy,0)), - mp.FluxRegion(center=mp.Vector3(0,-0.5*sxy), - size=mp.Vector3(sxy,0), - weight=-1), - mp.FluxRegion(center=mp.Vector3(+0.5*sxy,0), - size=mp.Vector3(0,sxy)), - mp.FluxRegion(center=mp.Vector3(-0.5*sxy,0), - size=mp.Vector3(0,sxy), - weight=-1)) + symmetries = [mp.Mirror(mp.X, phase=+1), mp.Mirror(mp.Y, phase=+1)] + +sim = mp.Simulation( + cell_size=cell, + resolution=resolution, + sources=sources, + symmetries=symmetries, + boundary_layers=pml_layers, +) + +nearfield_box = sim.add_near2far( + fcen, + 0, + 1, + mp.Near2FarRegion(center=mp.Vector3(0, +0.5 * sxy), size=mp.Vector3(sxy, 0)), + mp.Near2FarRegion( + center=mp.Vector3(0, -0.5 * sxy), size=mp.Vector3(sxy, 0), weight=-1 + ), + mp.Near2FarRegion(center=mp.Vector3(+0.5 * sxy, 0), size=mp.Vector3(0, sxy)), + mp.Near2FarRegion( + center=mp.Vector3(-0.5 * sxy, 0), size=mp.Vector3(0, sxy), weight=-1 + ), +) + +flux_box = sim.add_flux( + fcen, + 0, + 1, + mp.FluxRegion(center=mp.Vector3(0, +0.5 * sxy), size=mp.Vector3(sxy, 0)), + mp.FluxRegion(center=mp.Vector3(0, -0.5 * sxy), size=mp.Vector3(sxy, 0), weight=-1), + mp.FluxRegion(center=mp.Vector3(+0.5 * sxy, 0), size=mp.Vector3(0, sxy)), + mp.FluxRegion(center=mp.Vector3(-0.5 * sxy, 0), size=mp.Vector3(0, sxy), weight=-1), +) sim.run(until_after_sources=mp.stop_when_dft_decayed()) near_flux = mp.get_fluxes(flux_box)[0] # half side length of far-field square box OR radius of far-field circle -r = 1000/fcen +r = 1000 / fcen # resolution of far fields (points/μm) res_ff = 1 -far_flux_box = (nearfield_box.flux(mp.Y, - mp.Volume(center=mp.Vector3(y=r), - size=mp.Vector3(2*r)), - res_ff)[0] - - nearfield_box.flux(mp.Y, - mp.Volume(center=mp.Vector3(y=-r), - size=mp.Vector3(2*r)), - res_ff)[0] + - nearfield_box.flux(mp.X, - mp.Volume(center=mp.Vector3(r), - size=mp.Vector3(y=2*r)), - res_ff)[0] - - nearfield_box.flux(mp.X, - mp.Volume(center=mp.Vector3(-r), - size=mp.Vector3(y=2*r)), - res_ff)[0]) +far_flux_box = ( + nearfield_box.flux( + mp.Y, mp.Volume(center=mp.Vector3(y=r), size=mp.Vector3(2 * r)), res_ff + )[0] + - nearfield_box.flux( + mp.Y, mp.Volume(center=mp.Vector3(y=-r), size=mp.Vector3(2 * r)), res_ff + )[0] + + nearfield_box.flux( + mp.X, mp.Volume(center=mp.Vector3(r), size=mp.Vector3(y=2 * r)), res_ff + )[0] + - nearfield_box.flux( + mp.X, mp.Volume(center=mp.Vector3(-r), size=mp.Vector3(y=2 * r)), res_ff + )[0] +) npts = 100 # number of points in [0,2*pi) range of angles -angles = 2*math.pi/npts*np.arange(npts) +angles = 2 * math.pi / npts * np.arange(npts) -E = np.zeros((npts,3),dtype=np.complex128) -H = np.zeros((npts,3),dtype=np.complex128) +E = np.zeros((npts, 3), dtype=np.complex128) +H = np.zeros((npts, 3), dtype=np.complex128) for n in range(npts): - ff = sim.get_farfield(nearfield_box, - mp.Vector3(r*math.cos(angles[n]), - r*math.sin(angles[n]))) - E[n,:] = [np.conj(ff[j]) for j in range(3)] - H[n,:] = [ff[j+3] for j in range(3)] + ff = sim.get_farfield( + nearfield_box, mp.Vector3(r * math.cos(angles[n]), r * math.sin(angles[n])) + ) + E[n, :] = [np.conj(ff[j]) for j in range(3)] + H[n, :] = [ff[j + 3] for j in range(3)] -Px = np.real(E[:,1]*H[:,2]-E[:,2]*H[:,1]) -Py = np.real(E[:,2]*H[:,0]-E[:,0]*H[:,2]) -Pr = np.sqrt(np.square(Px)+np.square(Py)) +Px = np.real(E[:, 1] * H[:, 2] - E[:, 2] * H[:, 1]) +Py = np.real(E[:, 2] * H[:, 0] - E[:, 0] * H[:, 2]) +Pr = np.sqrt(np.square(Px) + np.square(Py)) # integrate the radial flux over the circle circumference -far_flux_circle = np.sum(Pr)*2*np.pi*r/len(Pr) +far_flux_circle = np.sum(Pr) * 2 * np.pi * r / len(Pr) -print("flux:, {:.6f}, {:.6f}, {:.6f}".format(near_flux,far_flux_box,far_flux_circle)) +print(f"flux:, {near_flux:.6f}, {far_flux_box:.6f}, {far_flux_circle:.6f}") -ax = plt.subplot(111, projection='polar') -ax.plot(angles,Pr/max(Pr),'b-') +ax = plt.subplot(111, projection="polar") +ax.plot(angles, Pr / max(Pr), "b-") ax.set_rmax(1) -ax.set_rticks([0,0.5,1]) +ax.set_rticks([0, 0.5, 1]) ax.grid(True) ax.set_rlabel_position(22) plt.show() diff --git a/python/examples/antenna_pec_ground_plane.py b/python/examples/antenna_pec_ground_plane.py index 6b65db7ad..f16e7ebc8 100644 --- a/python/examples/antenna_pec_ground_plane.py +++ b/python/examples/antenna_pec_ground_plane.py @@ -2,99 +2,100 @@ # positioned a given height above a perfect-electric # conductor (PEC) ground plane and compares the result # to analytic theory. - -import meep as mp import math -import numpy as np + import matplotlib -matplotlib.use('agg') -import matplotlib.pyplot as plt +import numpy as np +import meep as mp + +matplotlib.use("agg") +import matplotlib.pyplot as plt resolution = 200 # pixels/um -n = 1.2 # refractive index of surrounding medium -h = 1.25 # height of antenna (point dipole source) above ground plane -wvl = 0.65 # vacuum wavelength -r = 1000*wvl # radius of far-field circle -npts = 50 # number of points in [0,pi/2) range of angles +n = 1.2 # refractive index of surrounding medium +h = 1.25 # height of antenna (point dipole source) above ground plane +wvl = 0.65 # vacuum wavelength +r = 1000 * wvl # radius of far-field circle +npts = 50 # number of points in [0,pi/2) range of angles -angles = 0.5*math.pi/npts*np.arange(npts) +angles = 0.5 * math.pi / npts * np.arange(npts) -def radial_flux(sim,nearfield_box,r): - E = np.zeros((npts,3),dtype=np.complex128) - H = np.zeros((npts,3),dtype=np.complex128) +def radial_flux(sim, nearfield_box, r): + E = np.zeros((npts, 3), dtype=np.complex128) + H = np.zeros((npts, 3), dtype=np.complex128) for n in range(npts): - ff = sim.get_farfield(nearfield_box, - mp.Vector3(r*math.sin(angles[n]), - r*math.cos(angles[n]))) - E[n,:] = [np.conj(ff[j]) for j in range(3)] - H[n,:] = [ff[j+3] for j in range(3)] + ff = sim.get_farfield( + nearfield_box, mp.Vector3(r * math.sin(angles[n]), r * math.cos(angles[n])) + ) + E[n, :] = [np.conj(ff[j]) for j in range(3)] + H[n, :] = [ff[j + 3] for j in range(3)] - Px = np.real(E[:,1]*H[:,2]-E[:,2]*H[:,1]) # Ey*Hz-Ez*Hy - Py = np.real(E[:,2]*H[:,0]-E[:,0]*H[:,2]) # Ez*Hx-Ex*Hz - Pr = np.sqrt(np.square(Px)+np.square(Py)) - - return Pr + Px = np.real(E[:, 1] * H[:, 2] - E[:, 2] * H[:, 1]) # Ey*Hz-Ez*Hy + Py = np.real(E[:, 2] * H[:, 0] - E[:, 0] * H[:, 2]) # Ez*Hx-Ex*Hz + return np.sqrt(np.square(Px) + np.square(Py)) def free_space_radiation(src_cmpt): sxy = 4 dpml = 1 - cell_size = mp.Vector3(sxy+2*dpml,sxy+2*dpml) + cell_size = mp.Vector3(sxy + 2 * dpml, sxy + 2 * dpml) pml_layers = [mp.PML(dpml)] - fcen = 1/wvl - sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen), - center=mp.Vector3(), - component=src_cmpt)] + fcen = 1 / wvl + sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=0.2 * fcen), + center=mp.Vector3(), + component=src_cmpt, + ) + ] if src_cmpt == mp.Hz: - symmetries = [mp.Mirror(mp.X,phase=-1), - mp.Mirror(mp.Y,phase=-1)] + symmetries = [mp.Mirror(mp.X, phase=-1), mp.Mirror(mp.Y, phase=-1)] elif src_cmpt == mp.Ez: - symmetries = [mp.Mirror(mp.X,phase=+1), - mp.Mirror(mp.Y,phase=+1)] + symmetries = [mp.Mirror(mp.X, phase=+1), mp.Mirror(mp.Y, phase=+1)] else: symmetries = [] - sim = mp.Simulation(cell_size=cell_size, - resolution=resolution, - sources=sources, - symmetries=symmetries, - boundary_layers=pml_layers, - default_material=mp.Medium(index=n)) - - nearfield_box = sim.add_near2far(fcen, - 0, - 1, - mp.Near2FarRegion(center=mp.Vector3(0,+0.5*sxy), - size=mp.Vector3(sxy,0)), - mp.Near2FarRegion(center=mp.Vector3(0,-0.5*sxy), - size=mp.Vector3(sxy,0), - weight=-1), - mp.Near2FarRegion(center=mp.Vector3(+0.5*sxy,0), - size=mp.Vector3(0,sxy)), - mp.Near2FarRegion(center=mp.Vector3(-0.5*sxy,0), - size=mp.Vector3(0,sxy), - weight=-1)) + sim = mp.Simulation( + cell_size=cell_size, + resolution=resolution, + sources=sources, + symmetries=symmetries, + boundary_layers=pml_layers, + default_material=mp.Medium(index=n), + ) + + nearfield_box = sim.add_near2far( + fcen, + 0, + 1, + mp.Near2FarRegion(center=mp.Vector3(0, +0.5 * sxy), size=mp.Vector3(sxy, 0)), + mp.Near2FarRegion( + center=mp.Vector3(0, -0.5 * sxy), size=mp.Vector3(sxy, 0), weight=-1 + ), + mp.Near2FarRegion(center=mp.Vector3(+0.5 * sxy, 0), size=mp.Vector3(0, sxy)), + mp.Near2FarRegion( + center=mp.Vector3(-0.5 * sxy, 0), size=mp.Vector3(0, sxy), weight=-1 + ), + ) sim.run(until_after_sources=mp.stop_when_dft_decayed()) - Pr = radial_flux(sim,nearfield_box,r) - - return Pr + return radial_flux(sim, nearfield_box, r) def pec_ground_plane_radiation(src_cmpt=mp.Hz): - L = 8.0 # length of non-PML region + L = 8.0 # length of non-PML region dpml = 1.0 # thickness of PML - sxy = dpml+L+dpml - cell_size = mp.Vector3(sxy,sxy,0) + sxy = dpml + L + dpml + cell_size = mp.Vector3(sxy, sxy, 0) boundary_layers = [mp.PML(dpml)] - fcen = 1/wvl + fcen = 1 / wvl # The near-to-far field transformation feature only supports # homogeneous media which means it cannot explicitly take into @@ -105,53 +106,61 @@ def pec_ground_plane_radiation(src_cmpt=mp.Hz): # equivalent to a PEC boundary condition on one side. # Note: This setup means that the radiation pattern can only # be measured in the top half above the dipole. - sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen), - component=src_cmpt, - center=mp.Vector3(0,+h)), - mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen), - component=src_cmpt, - center=mp.Vector3(0,-h), - amplitude=-1 if src_cmpt==mp.Ez else +1)] - - symmetries = [mp.Mirror(direction=mp.X, - phase=+1 if src_cmpt==mp.Ez else -1), - mp.Mirror(direction=mp.Y, - phase=-1 if src_cmpt==mp.Ez else +1)] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=boundary_layers, - sources=sources, - symmetries=symmetries, - default_material=mp.Medium(index=n)) - - nearfield_box = sim.add_near2far(fcen, - 0, - 1, - mp.Near2FarRegion(center=mp.Vector3(0,2*h), - size=mp.Vector3(2*h,0), - weight=+1), - mp.Near2FarRegion(center=mp.Vector3(0,-2*h), - size=mp.Vector3(2*h,0), - weight=-1), - mp.Near2FarRegion(center=mp.Vector3(h,0), - size=mp.Vector3(0,4*h), - weight=+1), - mp.Near2FarRegion(center=mp.Vector3(-h,0), - size=mp.Vector3(0,4*h), - weight=-1)) + sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=0.2 * fcen), + component=src_cmpt, + center=mp.Vector3(0, +h), + ), + mp.Source( + src=mp.GaussianSource(fcen, fwidth=0.2 * fcen), + component=src_cmpt, + center=mp.Vector3(0, -h), + amplitude=-1 if src_cmpt == mp.Ez else +1, + ), + ] + + symmetries = [ + mp.Mirror(direction=mp.X, phase=+1 if src_cmpt == mp.Ez else -1), + mp.Mirror(direction=mp.Y, phase=-1 if src_cmpt == mp.Ez else +1), + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=boundary_layers, + sources=sources, + symmetries=symmetries, + default_material=mp.Medium(index=n), + ) + + nearfield_box = sim.add_near2far( + fcen, + 0, + 1, + mp.Near2FarRegion( + center=mp.Vector3(0, 2 * h), size=mp.Vector3(2 * h, 0), weight=+1 + ), + mp.Near2FarRegion( + center=mp.Vector3(0, -2 * h), size=mp.Vector3(2 * h, 0), weight=-1 + ), + mp.Near2FarRegion( + center=mp.Vector3(h, 0), size=mp.Vector3(0, 4 * h), weight=+1 + ), + mp.Near2FarRegion( + center=mp.Vector3(-h, 0), size=mp.Vector3(0, 4 * h), weight=-1 + ), + ) sim.plot2D() - plt.savefig('antenna_pec_ground_plane.png',bbox_inches='tight') + plt.savefig("antenna_pec_ground_plane.png", bbox_inches="tight") sim.run(until_after_sources=mp.stop_when_dft_decayed()) - Pr = radial_flux(sim,nearfield_box,r) - - return Pr + return radial_flux(sim, nearfield_box, r) -if __name__ == '__main__': +if __name__ == "__main__": src_cmpt = mp.Ez # TM/P: Hz or TE/S: Ez Pr_fsp = free_space_radiation(src_cmpt) Pr_pec = pec_ground_plane_radiation(src_cmpt) @@ -162,22 +171,27 @@ def pec_ground_plane_radiation(src_cmpt=mp.Hz): # as derived in Section 6.2 "Two-Element Array" of # Antenna Theory: Analysis and Design, Fourth Edition # (2016) by C.A. Balanis. - k = 2*np.pi/(wvl/n) # wavevector in free space - Pr_theory = np.zeros(npts,) - for i,ang in enumerate(angles): - Pr_theory[i] = Pr_fsp[i] * 2*np.sin(k*h*np.cos(ang)) + k = 2 * np.pi / (wvl / n) # wavevector in free space + Pr_theory = np.zeros( + npts, + ) + for i, ang in enumerate(angles): + Pr_theory[i] = Pr_fsp[i] * 2 * np.sin(k * h * np.cos(ang)) - Pr_pec_norm = Pr_pec/np.max(Pr_pec) - Pr_theory_norm = (Pr_theory/max(Pr_theory))**2 + Pr_pec_norm = Pr_pec / np.max(Pr_pec) + Pr_theory_norm = (Pr_theory / max(Pr_theory)) ** 2 plt.figure() - plt.plot(np.degrees(angles),Pr_pec_norm,'b-',label='Meep') - plt.plot(np.degrees(angles),Pr_theory_norm,'r-',label='theory') - plt.xlabel('angle (degrees)') - plt.ylabel('radial flux (normalized by maximum flux)') - plt.title('antenna with {}$_z$ polarization above PEC ground plane'.format('E' if src_cmpt==mp.Ez else r'H')) - plt.axis([0,90,0,1.0]) + plt.plot(np.degrees(angles), Pr_pec_norm, "b-", label="Meep") + plt.plot(np.degrees(angles), Pr_theory_norm, "r-", label="theory") + plt.xlabel("angle (degrees)") + plt.ylabel("radial flux (normalized by maximum flux)") + plt.title( + f"antenna with {'E' if src_cmpt==mp.Ez else r'H'}$_z$ polarization above PEC ground plane" + ) + + plt.axis([0, 90, 0, 1.0]) plt.legend() - plt.savefig('radiation_pattern.png',bbox_inches='tight') + plt.savefig("radiation_pattern.png", bbox_inches="tight") - print("norm:, {:.6f}".format(np.linalg.norm(Pr_pec_norm-Pr_theory_norm))) + print(f"norm:, {np.linalg.norm(Pr_pec_norm - Pr_theory_norm):.6f}") diff --git a/python/examples/bend-flux.py b/python/examples/bend-flux.py index 0b788fd3b..f56ab6492 100644 --- a/python/examples/bend-flux.py +++ b/python/examples/bend-flux.py @@ -1,57 +1,68 @@ -# -*- coding: utf-8 -*- - # transmission around a 90-degree waveguide bend in 2d -from __future__ import division +import matplotlib.pyplot as plt +import numpy as np import meep as mp -import numpy as np -import matplotlib.pyplot as plt -resolution = 10 # pixels/um +resolution = 10 # pixels/um sx = 16 # size of cell in X direction sy = 32 # size of cell in Y direction -cell = mp.Vector3(sx,sy,0) +cell = mp.Vector3(sx, sy, 0) dpml = 1.0 pml_layers = [mp.PML(dpml)] pad = 4 # padding distance between waveguide and cell edge -w = 1 # width of waveguide +w = 1 # width of waveguide -wvg_xcen = 0.5*(sx-w-2*pad) # x center of vert. wvg -wvg_ycen = -0.5*(sy-w-2*pad) # y center of horiz. wvg +wvg_xcen = 0.5 * (sx - w - 2 * pad) # x center of vert. wvg +wvg_ycen = -0.5 * (sy - w - 2 * pad) # y center of horiz. wvg -geometry = [mp.Block(size=mp.Vector3(mp.inf,w,mp.inf), - center=mp.Vector3(0,wvg_ycen,0), - material=mp.Medium(epsilon=12))] +geometry = [ + mp.Block( + size=mp.Vector3(mp.inf, w, mp.inf), + center=mp.Vector3(0, wvg_ycen, 0), + material=mp.Medium(epsilon=12), + ) +] fcen = 0.15 # pulse center frequency -df = 0.1 # pulse width (in frequency) -sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df), - component=mp.Ez, - center=mp.Vector3(-0.5*sx+dpml,wvg_ycen,0), - size=mp.Vector3(0,w,0))] - -sim = mp.Simulation(cell_size=cell, - boundary_layers=pml_layers, - geometry=geometry, - sources=sources, - resolution=resolution) +df = 0.1 # pulse width (in frequency) +sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=mp.Ez, + center=mp.Vector3(-0.5 * sx + dpml, wvg_ycen, 0), + size=mp.Vector3(0, w, 0), + ) +] + +sim = mp.Simulation( + cell_size=cell, + boundary_layers=pml_layers, + geometry=geometry, + sources=sources, + resolution=resolution, +) nfreq = 100 # number of frequencies at which to compute flux # reflected flux -refl_fr = mp.FluxRegion(center=mp.Vector3(-0.5*sx+dpml+0.5,wvg_ycen,0),size=mp.Vector3(0,2*w,0)) -refl = sim.add_flux(fcen,df,nfreq,refl_fr) +refl_fr = mp.FluxRegion( + center=mp.Vector3(-0.5 * sx + dpml + 0.5, wvg_ycen, 0), size=mp.Vector3(0, 2 * w, 0) +) +refl = sim.add_flux(fcen, df, nfreq, refl_fr) # transmitted flux -tran_fr = mp.FluxRegion(center=mp.Vector3(0.5*sx-dpml,wvg_ycen,0),size=mp.Vector3(0,2*w,0)) -tran = sim.add_flux(fcen,df,nfreq,tran_fr) +tran_fr = mp.FluxRegion( + center=mp.Vector3(0.5 * sx - dpml, wvg_ycen, 0), size=mp.Vector3(0, 2 * w, 0) +) +tran = sim.add_flux(fcen, df, nfreq, tran_fr) -pt = mp.Vector3(0.5*sx-dpml-0.5,wvg_ycen) +pt = mp.Vector3(0.5 * sx - dpml - 0.5, wvg_ycen) -sim.run(until_after_sources=mp.stop_when_fields_decayed(50,mp.Ez,pt,1e-3)) +sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, pt, 1e-3)) # for normalization run, save flux fields data for reflection plane straight_refl_data = sim.get_flux_data(refl) @@ -61,25 +72,39 @@ sim.reset_meep() -geometry = [mp.Block(mp.Vector3(sx-pad,w,mp.inf),center=mp.Vector3(-0.5*pad,wvg_ycen),material=mp.Medium(epsilon=12)), - mp.Block(mp.Vector3(w,sy-pad,mp.inf),center=mp.Vector3(wvg_xcen,0.5*pad),material=mp.Medium(epsilon=12))] - -sim = mp.Simulation(cell_size=cell, - boundary_layers=pml_layers, - geometry=geometry, - sources=sources, - resolution=resolution) +geometry = [ + mp.Block( + mp.Vector3(sx - pad, w, mp.inf), + center=mp.Vector3(-0.5 * pad, wvg_ycen), + material=mp.Medium(epsilon=12), + ), + mp.Block( + mp.Vector3(w, sy - pad, mp.inf), + center=mp.Vector3(wvg_xcen, 0.5 * pad), + material=mp.Medium(epsilon=12), + ), +] + +sim = mp.Simulation( + cell_size=cell, + boundary_layers=pml_layers, + geometry=geometry, + sources=sources, + resolution=resolution, +) # reflected flux refl = sim.add_flux(fcen, df, nfreq, refl_fr) -tran_fr = mp.FluxRegion(center=mp.Vector3(wvg_xcen,0.5*sy-dpml-0.5,0),size=mp.Vector3(2*w,0,0)) -tran = sim.add_flux(fcen,df,nfreq,tran_fr) +tran_fr = mp.FluxRegion( + center=mp.Vector3(wvg_xcen, 0.5 * sy - dpml - 0.5, 0), size=mp.Vector3(2 * w, 0, 0) +) +tran = sim.add_flux(fcen, df, nfreq, tran_fr) # for normal run, load negated fields to subtract incident from refl. fields -sim.load_minus_flux_data(refl,straight_refl_data) +sim.load_minus_flux_data(refl, straight_refl_data) -pt = mp.Vector3(wvg_xcen,0.5*sy-dpml-0.5) +pt = mp.Vector3(wvg_xcen, 0.5 * sy - dpml - 0.5) sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, pt, 1e-3)) @@ -92,15 +117,15 @@ Rs = [] Ts = [] for i in range(nfreq): - wl = np.append(wl, 1/flux_freqs[i]) - Rs = np.append(Rs,-bend_refl_flux[i]/straight_tran_flux[i]) - Ts = np.append(Ts,bend_tran_flux[i]/straight_tran_flux[i]) + wl = np.append(wl, 1 / flux_freqs[i]) + Rs = np.append(Rs, -bend_refl_flux[i] / straight_tran_flux[i]) + Ts = np.append(Ts, bend_tran_flux[i] / straight_tran_flux[i]) if mp.am_master(): plt.figure() - plt.plot(wl,Rs,'bo-',label='reflectance') - plt.plot(wl,Ts,'ro-',label='transmittance') - plt.plot(wl,1-Rs-Ts,'go-',label='loss') + plt.plot(wl, Rs, "bo-", label="reflectance") + plt.plot(wl, Ts, "ro-", label="transmittance") + plt.plot(wl, 1 - Rs - Ts, "go-", label="loss") plt.axis([5.0, 10.0, 0, 1]) plt.xlabel("wavelength (μm)") plt.legend(loc="upper right") diff --git a/python/examples/bent-waveguide.py b/python/examples/bent-waveguide.py index 17d465c83..b2d0b4e57 100644 --- a/python/examples/bent-waveguide.py +++ b/python/examples/bent-waveguide.py @@ -1,31 +1,41 @@ -# -*- coding: utf-8 -*- - # From the Meep tutorial: plotting permittivity and fields of a bent waveguide -from __future__ import division - import meep as mp -cell = mp.Vector3(16,16,0) -geometry = [mp.Block(mp.Vector3(12,1,mp.inf), - center=mp.Vector3(-2.5,-3.5), - material=mp.Medium(epsilon=12)), - mp.Block(mp.Vector3(1,12,mp.inf), - center=mp.Vector3(3.5,2), - material=mp.Medium(epsilon=12))] +cell = mp.Vector3(16, 16, 0) +geometry = [ + mp.Block( + mp.Vector3(12, 1, mp.inf), + center=mp.Vector3(-2.5, -3.5), + material=mp.Medium(epsilon=12), + ), + mp.Block( + mp.Vector3(1, 12, mp.inf), + center=mp.Vector3(3.5, 2), + material=mp.Medium(epsilon=12), + ), +] pml_layers = [mp.PML(1.0)] resolution = 10 -sources = [mp.Source(mp.ContinuousSource(wavelength=2*(11**0.5), width=20), - component=mp.Ez, - center=mp.Vector3(-7,-3.5), - size=mp.Vector3(0,1))] +sources = [ + mp.Source( + mp.ContinuousSource(wavelength=2 * (11**0.5), width=20), + component=mp.Ez, + center=mp.Vector3(-7, -3.5), + size=mp.Vector3(0, 1), + ) +] -sim = mp.Simulation(cell_size=cell, - boundary_layers=pml_layers, - geometry=geometry, - sources=sources, - resolution=resolution) +sim = mp.Simulation( + cell_size=cell, + boundary_layers=pml_layers, + geometry=geometry, + sources=sources, + resolution=resolution, +) -sim.run(mp.at_beginning(mp.output_epsilon), - mp.to_appended("ez", mp.at_every(0.6, mp.output_efield_z)), - until=200) +sim.run( + mp.at_beginning(mp.output_epsilon), + mp.to_appended("ez", mp.at_every(0.6, mp.output_efield_z)), + until=200, +) diff --git a/python/examples/binary_grating.py b/python/examples/binary_grating.py index dd63e2770..4b0182bc0 100644 --- a/python/examples/binary_grating.py +++ b/python/examples/binary_grating.py @@ -1,52 +1,63 @@ -# -*- coding: utf-8 -*- - -import meep as mp import math -import numpy as np + import matplotlib.pyplot as plt +import numpy as np -resolution = 60 # pixels/μm +import meep as mp + +resolution = 60 # pixels/μm -dpml = 1.0 # PML thickness -dsub = 3.0 # substrate thickness -dpad = 3.0 # padding between grating and PML -gp = 10.0 # grating period -gh = 0.5 # grating height -gdc = 0.5 # grating duty cycle +dpml = 1.0 # PML thickness +dsub = 3.0 # substrate thickness +dpad = 3.0 # padding between grating and PML +gp = 10.0 # grating period +gh = 0.5 # grating height +gdc = 0.5 # grating duty cycle -sx = dpml+dsub+gh+dpad+dpml +sx = dpml + dsub + gh + dpad + dpml sy = gp -cell_size = mp.Vector3(sx,sy,0) -pml_layers = [mp.PML(thickness=dpml,direction=mp.X)] +cell_size = mp.Vector3(sx, sy, 0) +pml_layers = [mp.PML(thickness=dpml, direction=mp.X)] -wvl_min = 0.4 # min wavelength -wvl_max = 0.6 # max wavelength -fmin = 1/wvl_max # min frequency -fmax = 1/wvl_min # max frequency -fcen = 0.5*(fmin+fmax) # center frequency -df = fmax-fmin # frequency width +wvl_min = 0.4 # min wavelength +wvl_max = 0.6 # max wavelength +fmin = 1 / wvl_max # min frequency +fmax = 1 / wvl_min # max frequency +fcen = 0.5 * (fmin + fmax) # center frequency +df = fmax - fmin # frequency width -src_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub,0,0) -sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=src_pt, size=mp.Vector3(0,sy,0))] +src_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * dsub, 0, 0) +sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=mp.Ez, + center=src_pt, + size=mp.Vector3(0, sy, 0), + ) +] -k_point = mp.Vector3(0,0,0) +k_point = mp.Vector3(0, 0, 0) glass = mp.Medium(index=1.5) -symmetries=[mp.Mirror(mp.Y)] +symmetries = [mp.Mirror(mp.Y)] -sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - k_point=k_point, - default_material=glass, - sources=sources, - symmetries=symmetries) +sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + k_point=k_point, + default_material=glass, + sources=sources, + symmetries=symmetries, +) nfreq = 21 -mon_pt = mp.Vector3(0.5*sx-dpml-0.5*dpad,0,0) -flux_mon = sim.add_flux(fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(0,sy,0))) +mon_pt = mp.Vector3(0.5 * sx - dpml - 0.5 * dpad, 0, 0) +flux_mon = sim.add_flux( + fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(0, sy, 0)) +) sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mon_pt, 1e-9)) @@ -54,25 +65,41 @@ sim.reset_meep() -geometry = [mp.Block(material=glass, size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub),0,0)), - mp.Block(material=glass, size=mp.Vector3(gh,gdc*gp,mp.inf), center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh,0,0))] - -sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - geometry=geometry, - k_point=k_point, - sources=sources, - symmetries=symmetries) - -mode_mon = sim.add_flux(fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(0,sy,0))) +geometry = [ + mp.Block( + material=glass, + size=mp.Vector3(dpml + dsub, mp.inf, mp.inf), + center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub), 0, 0), + ), + mp.Block( + material=glass, + size=mp.Vector3(gh, gdc * gp, mp.inf), + center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh, 0, 0), + ), +] + +sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + geometry=geometry, + k_point=k_point, + sources=sources, + symmetries=symmetries, +) + +mode_mon = sim.add_flux( + fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(0, sy, 0)) +) sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mon_pt, 1e-9)) freqs = mp.get_eigenmode_freqs(mode_mon) nmode = 10 -res = sim.get_eigenmode_coefficients(mode_mon, range(1,nmode+1), eig_parity=mp.ODD_Z+mp.EVEN_Y) +res = sim.get_eigenmode_coefficients( + mode_mon, range(1, nmode + 1), eig_parity=mp.ODD_Z + mp.EVEN_Y +) coeffs = res.alpha kdom = res.kdom @@ -81,30 +108,36 @@ mode_tran = [] for nm in range(nmode): - for nf in range(nfreq): - mode_wvl.append(1/freqs[nf]) - mode_angle.append(math.degrees(math.acos(kdom[nm*nfreq+nf].x/freqs[nf]))) - tran = abs(coeffs[nm,nf,0])**2/input_flux[nf] - mode_tran.append(0.5*tran if nm != 0 else tran) - print("grating{}:, {:.5f}, {:.2f}, {:.8f}".format(nm,mode_wvl[-1],mode_angle[-1],mode_tran[-1])) - -tran_max = round(max(mode_tran),1) + for nf in range(nfreq): + mode_wvl.append(1 / freqs[nf]) + mode_angle.append(math.degrees(math.acos(kdom[nm * nfreq + nf].x / freqs[nf]))) + tran = abs(coeffs[nm, nf, 0]) ** 2 / input_flux[nf] + mode_tran.append(0.5 * tran if nm != 0 else tran) + print( + "grating{}:, {:.5f}, {:.2f}, {:.8f}".format( + nm, mode_wvl[-1], mode_angle[-1], mode_tran[-1] + ) + ) + +tran_max = round(max(mode_tran), 1) plt.figure() -plt.pcolormesh(np.reshape(mode_wvl,(nmode,nfreq)), - np.reshape(mode_angle,(nmode,nfreq)), - np.reshape(mode_tran,(nmode,nfreq)), - cmap='Blues', - shading='nearest', - vmin=0, - vmax=tran_max) +plt.pcolormesh( + np.reshape(mode_wvl, (nmode, nfreq)), + np.reshape(mode_angle, (nmode, nfreq)), + np.reshape(mode_tran, (nmode, nfreq)), + cmap="Blues", + shading="nearest", + vmin=0, + vmax=tran_max, +) plt.axis([min(mode_wvl), max(mode_wvl), min(mode_angle), max(mode_angle)]) plt.xlabel("wavelength (μm)") plt.ylabel("diffraction angle (degrees)") -plt.xticks([t for t in np.arange(0.4,0.7,0.1)]) -plt.yticks([t for t in range(0,35,5)]) +plt.xticks(list(np.arange(0.4, 0.7, 0.1))) +plt.yticks(list(range(0, 35, 5))) plt.title("transmittance of diffraction orders") cbar = plt.colorbar() -cbar.set_ticks([t for t in np.arange(0,tran_max+0.1,0.1)]) -cbar.set_ticklabels(["{:.1f}".format(t) for t in np.arange(0,tran_max+0.1,0.1)]) +cbar.set_ticks(list(np.arange(0, tran_max + 0.1, 0.1))) +cbar.set_ticklabels([f"{t:.1f}" for t in np.arange(0, tran_max + 0.1, 0.1)]) plt.show() diff --git a/python/examples/binary_grating_n2f.py b/python/examples/binary_grating_n2f.py index 8ad39fdbb..77de0bc3a 100644 --- a/python/examples/binary_grating_n2f.py +++ b/python/examples/binary_grating_n2f.py @@ -1,166 +1,227 @@ -# -*- coding: utf-8 -*- - -import meep as mp import math + +import matplotlib.pyplot as plt import numpy as np from numpy import linalg as LA -import matplotlib.pyplot as plt -resolution = 25 # pixels/μm +import meep as mp + +resolution = 25 # pixels/μm -dpml = 1.0 # PML thickness -dsub = 3.0 # substrate thickness -dpad = 3.0 # padding between grating and PML -gp = 10.0 # grating period -gh = 0.5 # grating height -gdc = 0.5 # grating duty cycle +dpml = 1.0 # PML thickness +dsub = 3.0 # substrate thickness +dpad = 3.0 # padding between grating and PML +gp = 10.0 # grating period +gh = 0.5 # grating height +gdc = 0.5 # grating duty cycle -nperiods = 10 # number of unit cells in finite periodic grating +nperiods = 10 # number of unit cells in finite periodic grating -ff_distance = 1e8 # far-field distance from near-field monitor -ff_angle = 20 # far-field cone angle -ff_npts = 500 # number of far-field points +ff_distance = 1e8 # far-field distance from near-field monitor +ff_angle = 20 # far-field cone angle +ff_npts = 500 # number of far-field points -ff_length = ff_distance*math.tan(math.radians(ff_angle)) -ff_res = ff_npts/ff_length +ff_length = ff_distance * math.tan(math.radians(ff_angle)) +ff_res = ff_npts / ff_length -sx = dpml+dsub+gh+dpad+dpml +sx = dpml + dsub + gh + dpad + dpml cell_size = mp.Vector3(sx) -pml_layers = [mp.PML(thickness=dpml,direction=mp.X)] +pml_layers = [mp.PML(thickness=dpml, direction=mp.X)] symmetries = [mp.Mirror(mp.Y)] -wvl_min = 0.4 # min wavelength -wvl_max = 0.6 # max wavelength -fmin = 1/wvl_max # min frequency -fmax = 1/wvl_min # max frequency -fcen = 0.5*(fmin+fmax) # center frequency -df = fmax-fmin # frequency width +wvl_min = 0.4 # min wavelength +wvl_max = 0.6 # max wavelength +fmin = 1 / wvl_max # min frequency +fmax = 1 / wvl_min # max frequency +fcen = 0.5 * (fmin + fmax) # center frequency +df = fmax - fmin # frequency width -src_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub) -sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=src_pt)] +src_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * dsub) +sources = [ + mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=src_pt) +] k_point = mp.Vector3() glass = mp.Medium(index=1.5) -sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - k_point=k_point, - default_material=glass, - sources=sources) +sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + k_point=k_point, + default_material=glass, + sources=sources, +) nfreq = 21 -n2f_pt = mp.Vector3(0.5*sx-dpml-0.5*dpad) +n2f_pt = mp.Vector3(0.5 * sx - dpml - 0.5 * dpad) n2f_obj = sim.add_near2far(fcen, df, nfreq, mp.Near2FarRegion(center=n2f_pt)) sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, n2f_pt, 1e-9)) -ff_source = sim.get_farfields(n2f_obj, ff_res, center=mp.Vector3(ff_distance,0.5*ff_length), size=mp.Vector3(y=ff_length)) +ff_source = sim.get_farfields( + n2f_obj, + ff_res, + center=mp.Vector3(ff_distance, 0.5 * ff_length), + size=mp.Vector3(y=ff_length), +) sim.reset_meep() ### unit cell with periodic boundaries sy = gp -cell_size = mp.Vector3(sx,sy) - -sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df, is_integrated=True), - component=mp.Ez, - center=src_pt, - size=mp.Vector3(y=sy))] - -geometry = [mp.Block(material=glass, size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub))), - mp.Block(material=glass, size=mp.Vector3(gh,gdc*gp,mp.inf), center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh))] - -sim = mp.Simulation(resolution=resolution, - split_chunks_evenly=True, - cell_size=cell_size, - boundary_layers=pml_layers, - geometry=geometry, - k_point=k_point, - sources=sources, - symmetries=symmetries) - -n2f_obj = sim.add_near2far(fcen, df, nfreq, mp.Near2FarRegion(center=n2f_pt, size=mp.Vector3(y=sy)), nperiods=nperiods) +cell_size = mp.Vector3(sx, sy) + +sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df, is_integrated=True), + component=mp.Ez, + center=src_pt, + size=mp.Vector3(y=sy), + ) +] + +geometry = [ + mp.Block( + material=glass, + size=mp.Vector3(dpml + dsub, mp.inf, mp.inf), + center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub)), + ), + mp.Block( + material=glass, + size=mp.Vector3(gh, gdc * gp, mp.inf), + center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh), + ), +] + +sim = mp.Simulation( + resolution=resolution, + split_chunks_evenly=True, + cell_size=cell_size, + boundary_layers=pml_layers, + geometry=geometry, + k_point=k_point, + sources=sources, + symmetries=symmetries, +) + +n2f_obj = sim.add_near2far( + fcen, + df, + nfreq, + mp.Near2FarRegion(center=n2f_pt, size=mp.Vector3(y=sy)), + nperiods=nperiods, +) sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, n2f_pt, 1e-9)) -ff_unitcell = sim.get_farfields(n2f_obj, ff_res, center=mp.Vector3(ff_distance,0.5*ff_length), size=mp.Vector3(y=ff_length)) +ff_unitcell = sim.get_farfields( + n2f_obj, + ff_res, + center=mp.Vector3(ff_distance, 0.5 * ff_length), + size=mp.Vector3(y=ff_length), +) sim.reset_meep() ### finite periodic grating with flat surface termination extending into PML -num_cells = 2*nperiods+1 -sy = dpml+num_cells*gp+dpml -cell_size = mp.Vector3(sx,sy) +num_cells = 2 * nperiods + 1 +sy = dpml + num_cells * gp + dpml +cell_size = mp.Vector3(sx, sy) pml_layers = [mp.PML(thickness=dpml)] -sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df, is_integrated=True), - component=mp.Ez, - center=src_pt, - size=mp.Vector3(y=sy))] - -geometry = [mp.Block(material=glass, size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub)))] +sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df, is_integrated=True), + component=mp.Ez, + center=src_pt, + size=mp.Vector3(y=sy), + ) +] + +geometry = [ + mp.Block( + material=glass, + size=mp.Vector3(dpml + dsub, mp.inf, mp.inf), + center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub)), + ) +] for j in range(num_cells): - geometry.append(mp.Block(material=glass, - size=mp.Vector3(gh,gdc*gp,mp.inf), - center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh,-0.5*sy+dpml+(j+0.5)*gp))) - -sim = mp.Simulation(resolution=resolution, - split_chunks_evenly=True, - cell_size=cell_size, - boundary_layers=pml_layers, - geometry=geometry, - k_point=k_point, - sources=sources, - symmetries=symmetries) - -n2f_obj = sim.add_near2far(fcen, df, nfreq, mp.Near2FarRegion(center=n2f_pt, size=mp.Vector3(y=sy-2*dpml))) + geometry.append( + mp.Block( + material=glass, + size=mp.Vector3(gh, gdc * gp, mp.inf), + center=mp.Vector3( + -0.5 * sx + dpml + dsub + 0.5 * gh, -0.5 * sy + dpml + (j + 0.5) * gp + ), + ) + ) + +sim = mp.Simulation( + resolution=resolution, + split_chunks_evenly=True, + cell_size=cell_size, + boundary_layers=pml_layers, + geometry=geometry, + k_point=k_point, + sources=sources, + symmetries=symmetries, +) + +n2f_obj = sim.add_near2far( + fcen, df, nfreq, mp.Near2FarRegion(center=n2f_pt, size=mp.Vector3(y=sy - 2 * dpml)) +) sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, n2f_pt, 1e-9)) -ff_supercell = sim.get_farfields(n2f_obj, ff_res, center=mp.Vector3(ff_distance,0.5*ff_length), size=mp.Vector3(y=ff_length)) +ff_supercell = sim.get_farfields( + n2f_obj, + ff_res, + center=mp.Vector3(ff_distance, 0.5 * ff_length), + size=mp.Vector3(y=ff_length), +) -norm_err = LA.norm(ff_unitcell['Ez']-ff_supercell['Ez'])/nperiods -print("error:, {}, {}".format(nperiods,norm_err)) +norm_err = LA.norm(ff_unitcell["Ez"] - ff_supercell["Ez"]) / nperiods +print(f"error:, {nperiods}, {norm_err}") freqs = mp.get_near2far_freqs(n2f_obj) -wvl = np.divide(1,freqs) -ff_lengths = np.linspace(0,ff_length,ff_npts) -angles = [math.degrees(math.atan(f)) for f in ff_lengths/ff_distance] +wvl = np.divide(1, freqs) +ff_lengths = np.linspace(0, ff_length, ff_npts) +angles = [math.degrees(math.atan(f)) for f in ff_lengths / ff_distance] wvl_slice = 0.5 -idx_slice = np.where(np.asarray(freqs) == 1/wvl_slice)[0][0] +idx_slice = np.where(np.asarray(freqs) == 1 / wvl_slice)[0][0] -rel_enh = np.absolute(ff_unitcell['Ez'])**2/np.absolute(ff_source['Ez'])**2 +rel_enh = np.absolute(ff_unitcell["Ez"]) ** 2 / np.absolute(ff_source["Ez"]) ** 2 plt.figure(dpi=150) -plt.subplot(1,2,1) -plt.pcolormesh(wvl,angles,rel_enh,cmap='Blues',shading='flat') -plt.axis([wvl_min,wvl_max,0,ff_angle]) +plt.subplot(1, 2, 1) +plt.pcolormesh(wvl, angles, rel_enh, cmap="Blues", shading="flat") +plt.axis([wvl_min, wvl_max, 0, ff_angle]) plt.xlabel("wavelength (μm)") plt.ylabel("angle (degrees)") -plt.grid(linewidth=0.5,linestyle='--') -plt.xticks([t for t in np.arange(wvl_min,wvl_max+0.1,0.1)]) -plt.yticks([t for t in range(0,ff_angle+1,10)]) +plt.grid(linewidth=0.5, linestyle="--") +plt.xticks([t for t in np.arange(wvl_min, wvl_max + 0.1, 0.1)]) +plt.yticks([t for t in range(0, ff_angle + 1, 10)]) plt.title("far-field spectra") -plt.subplot(1,2,2) -plt.plot(angles,rel_enh[:,idx_slice],'bo-') -plt.xlim(0,ff_angle) +plt.subplot(1, 2, 2) +plt.plot(angles, rel_enh[:, idx_slice], "bo-") +plt.xlim(0, ff_angle) plt.ylim(0) -plt.xticks([t for t in range(0,ff_angle+1,10)]) +plt.xticks([t for t in range(0, ff_angle + 1, 10)]) plt.xlabel("angle (degrees)") plt.ylabel("relative enhancement") -plt.grid(axis='x',linewidth=0.5,linestyle='--') -plt.title("f.-f. spectra @ λ = {:.1} μm".format(wvl_slice)) +plt.grid(axis="x", linewidth=0.5, linestyle="--") +plt.title(f"f.-f. spectra @ λ = {wvl_slice:.1} μm") plt.tight_layout(pad=0.5) plt.show() diff --git a/python/examples/binary_grating_oblique.py b/python/examples/binary_grating_oblique.py index 0214b6318..4b209cda7 100644 --- a/python/examples/binary_grating_oblique.py +++ b/python/examples/binary_grating_oblique.py @@ -1,143 +1,180 @@ -# -*- coding: utf-8 -*- - -import meep as mp -import math import cmath +import math + import numpy as np -resolution = 50 # pixels/μm +import meep as mp -dpml = 1.0 # PML thickness -dsub = 3.0 # substrate thickness -dpad = 3.0 # length of padding between grating and PML -gp = 10.0 # grating period -gh = 0.5 # grating height -gdc = 0.5 # grating duty cycle +resolution = 50 # pixels/μm -sx = dpml+dsub+gh+dpad+dpml +dpml = 1.0 # PML thickness +dsub = 3.0 # substrate thickness +dpad = 3.0 # length of padding between grating and PML +gp = 10.0 # grating period +gh = 0.5 # grating height +gdc = 0.5 # grating duty cycle + +sx = dpml + dsub + gh + dpad + dpml sy = gp -cell_size = mp.Vector3(sx,sy,0) -pml_layers = [mp.PML(thickness=dpml,direction=mp.X)] +cell_size = mp.Vector3(sx, sy, 0) +pml_layers = [mp.PML(thickness=dpml, direction=mp.X)] -wvl = 0.5 # center wavelength -fcen = 1/wvl # center frequency -df = 0.05*fcen # frequency width +wvl = 0.5 # center wavelength +fcen = 1 / wvl # center frequency +df = 0.05 * fcen # frequency width ng = 1.5 glass = mp.Medium(index=ng) use_cw_solver = False # CW solver or time stepping? -tol = 1e-6 # CW solver tolerance -max_iters = 2000 # CW solver max iterations -L = 10 # CW solver L +tol = 1e-6 # CW solver tolerance +max_iters = 2000 # CW solver max iterations +L = 10 # CW solver L # rotation angle of incident planewave; counter clockwise (CCW) about Z axis, 0 degrees along +X axis theta_in = math.radians(10.7) # k (in source medium) with correct length (plane of incidence: XY) -k = mp.Vector3(fcen*ng).rotate(mp.Vector3(z=1), theta_in) +k = mp.Vector3(fcen * ng).rotate(mp.Vector3(z=1), theta_in) symmetries = [] eig_parity = mp.ODD_Z if theta_in == 0: - k = mp.Vector3(0,0,0) - symmetries = [mp.Mirror(mp.Y)] - eig_parity += mp.EVEN_Y - -def pw_amp(k,x0): - def _pw_amp(x): - return cmath.exp(1j*2*math.pi*k.dot(x+x0)) - return _pw_amp - -src_pt = mp.Vector3(-0.5*sx+dpml+0.3*dsub,0,0) -sources = [mp.Source(mp.ContinuousSource(fcen,fwidth=df) if use_cw_solver else mp.GaussianSource(fcen,fwidth=df), - component=mp.Ez, - center=src_pt, - size=mp.Vector3(0,sy,0), - amp_func=pw_amp(k,src_pt))] - -sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - k_point=k, - default_material=glass, - sources=sources, - symmetries=symmetries) - -refl_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub,0,0) -refl_flux = sim.add_flux(fcen, 0, 1, mp.FluxRegion(center=refl_pt, size=mp.Vector3(0,sy,0))) + k = mp.Vector3(0, 0, 0) + symmetries = [mp.Mirror(mp.Y)] + eig_parity += mp.EVEN_Y + + +def pw_amp(k, x0): + def _pw_amp(x): + return cmath.exp(1j * 2 * math.pi * k.dot(x + x0)) + + return _pw_amp + + +src_pt = mp.Vector3(-0.5 * sx + dpml + 0.3 * dsub, 0, 0) +sources = [ + mp.Source( + mp.ContinuousSource(fcen, fwidth=df) + if use_cw_solver + else mp.GaussianSource(fcen, fwidth=df), + component=mp.Ez, + center=src_pt, + size=mp.Vector3(0, sy, 0), + amp_func=pw_amp(k, src_pt), + ) +] + +sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + k_point=k, + default_material=glass, + sources=sources, + symmetries=symmetries, +) + +refl_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * dsub, 0, 0) +refl_flux = sim.add_flux( + fcen, 0, 1, mp.FluxRegion(center=refl_pt, size=mp.Vector3(0, sy, 0)) +) if use_cw_solver: - sim.init_sim() - sim.solve_cw(tol, max_iters, L) + sim.init_sim() + sim.solve_cw(tol, max_iters, L) else: - sim.run(until_after_sources=100) + sim.run(until_after_sources=100) input_flux = mp.get_fluxes(refl_flux) input_flux_data = sim.get_flux_data(refl_flux) sim.reset_meep() -geometry = [mp.Block(material=glass, size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub),0,0)), - mp.Block(material=glass, size=mp.Vector3(gh,gdc*gp,mp.inf), center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh,0,0))] - -sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - geometry=geometry, - k_point=k, - sources=sources, - symmetries=symmetries) - -refl_flux = sim.add_flux(fcen, 0, 1, mp.FluxRegion(center=refl_pt, size=mp.Vector3(0,sy,0))) -sim.load_minus_flux_data(refl_flux,input_flux_data) - -tran_pt = mp.Vector3(0.5*sx-dpml-0.5*dpad,0,0) -tran_flux = sim.add_flux(fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0,sy,0))) +geometry = [ + mp.Block( + material=glass, + size=mp.Vector3(dpml + dsub, mp.inf, mp.inf), + center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub), 0, 0), + ), + mp.Block( + material=glass, + size=mp.Vector3(gh, gdc * gp, mp.inf), + center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh, 0, 0), + ), +] + +sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + geometry=geometry, + k_point=k, + sources=sources, + symmetries=symmetries, +) + +refl_flux = sim.add_flux( + fcen, 0, 1, mp.FluxRegion(center=refl_pt, size=mp.Vector3(0, sy, 0)) +) +sim.load_minus_flux_data(refl_flux, input_flux_data) + +tran_pt = mp.Vector3(0.5 * sx - dpml - 0.5 * dpad, 0, 0) +tran_flux = sim.add_flux( + fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0, sy, 0)) +) if use_cw_solver: - sim.init_sim() - sim.solve_cw(tol, max_iters, L) + sim.init_sim() + sim.solve_cw(tol, max_iters, L) else: - sim.run(until_after_sources=200) + sim.run(until_after_sources=200) -nm_r = np.floor((fcen*ng-k.y)*gp)-np.ceil((-fcen*ng-k.y)*gp) # number of reflected orders +nm_r = np.floor((fcen * ng - k.y) * gp) - np.ceil( + (-fcen * ng - k.y) * gp +) # number of reflected orders if theta_in == 0: - nm_r = nm_r/2 # since eig_parity removes degeneracy in y-direction + nm_r = nm_r / 2 # since eig_parity removes degeneracy in y-direction nm_r = int(nm_r) -res = sim.get_eigenmode_coefficients(refl_flux, range(1,nm_r+1), eig_parity=eig_parity) +res = sim.get_eigenmode_coefficients( + refl_flux, range(1, nm_r + 1), eig_parity=eig_parity +) r_coeffs = res.alpha Rsum = 0 for nm in range(nm_r): - r_kdom = res.kdom[nm] - Rmode = abs(r_coeffs[nm,0,1])**2/input_flux[0] - r_angle = np.sign(r_kdom.y)*math.acos(r_kdom.x/(ng*fcen)) - print("refl:, {:2d}, {:6.2f}, {:.8f}".format(nm,math.degrees(r_angle),Rmode)) - Rsum += Rmode - -nm_t = np.floor((fcen-k.y)*gp)-np.ceil((-fcen-k.y)*gp) # number of transmitted orders + r_kdom = res.kdom[nm] + Rmode = abs(r_coeffs[nm, 0, 1]) ** 2 / input_flux[0] + r_angle = np.sign(r_kdom.y) * math.acos(r_kdom.x / (ng * fcen)) + print(f"refl:, {nm:2d}, {math.degrees(r_angle):6.2f}, {Rmode:.8f}") + Rsum += Rmode + +nm_t = np.floor((fcen - k.y) * gp) - np.ceil( + (-fcen - k.y) * gp +) # number of transmitted orders if theta_in == 0: - nm_t = nm_t/2 # since eig_parity removes degeneracy in y-direction + nm_t = nm_t / 2 # since eig_parity removes degeneracy in y-direction nm_t = int(nm_t) -res = sim.get_eigenmode_coefficients(tran_flux, range(1,nm_t+1), eig_parity=eig_parity) +res = sim.get_eigenmode_coefficients( + tran_flux, range(1, nm_t + 1), eig_parity=eig_parity +) t_coeffs = res.alpha Tsum = 0 for nm in range(nm_t): - t_kdom = res.kdom[nm] - Tmode = abs(t_coeffs[nm,0,0])**2/input_flux[0] - t_angle = np.sign(t_kdom.y)*math.acos(t_kdom.x/fcen) - print("tran:, {:2d}, {:6.2f}, {:.8f}".format(nm,math.degrees(t_angle),Tmode)) - Tsum += Tmode + t_kdom = res.kdom[nm] + Tmode = abs(t_coeffs[nm, 0, 0]) ** 2 / input_flux[0] + t_angle = np.sign(t_kdom.y) * math.acos(t_kdom.x / fcen) + print(f"tran:, {nm:2d}, {math.degrees(t_angle):6.2f}, {Tmode:.8f}") + Tsum += Tmode -print("mode-coeff:, {:11.6f}, {:.6f}, {:.6f}".format(Rsum,Tsum,Rsum+Tsum)) +print(f"mode-coeff:, {Rsum:11.6f}, {Tsum:.6f}, {Rsum + Tsum:.6f}") r_flux = mp.get_fluxes(refl_flux) t_flux = mp.get_fluxes(tran_flux) -Rflux = -r_flux[0]/input_flux[0] -Tflux = t_flux[0]/input_flux[0] -print("poynting-flux:, {:.6f}, {:.6f}, {:.6f}".format(Rflux,Tflux,Rflux+Tflux)) +Rflux = -r_flux[0] / input_flux[0] +Tflux = t_flux[0] / input_flux[0] +print(f"poynting-flux:, {Rflux:.6f}, {Tflux:.6f}, {Rflux + Tflux:.6f}") diff --git a/python/examples/binary_grating_phasemap.py b/python/examples/binary_grating_phasemap.py index f75fdf3ad..50e99b178 100644 --- a/python/examples/binary_grating_phasemap.py +++ b/python/examples/binary_grating_phasemap.py @@ -1,121 +1,174 @@ -# -*- coding: utf-8 -*- +import argparse -import meep as mp -import numpy as np import matplotlib.pyplot as plt +import numpy as np import numpy.matlib -import argparse -resolution = 60 # pixels/μm +import meep as mp + +resolution = 60 # pixels/μm -dpml = 1.0 # PML thickness -dsub = 3.0 # substrate thickness -dpad = 3.0 # padding between grating and PML +dpml = 1.0 # PML thickness +dsub = 3.0 # substrate thickness +dpad = 3.0 # padding between grating and PML -wvl_min = 0.4 # min wavelength -wvl_max = 0.6 # max wavelength -fmin = 1/wvl_max # min frequency -fmax = 1/wvl_min # max frequency -fcen = 0.5*(fmin+fmax) # center frequency -df = fmax-fmin # frequency width -nfreq = 21 # number of frequency bins +wvl_min = 0.4 # min wavelength +wvl_max = 0.6 # max wavelength +fmin = 1 / wvl_max # min frequency +fmax = 1 / wvl_min # max frequency +fcen = 0.5 * (fmin + fmax) # center frequency +df = fmax - fmin # frequency width +nfreq = 21 # number of frequency bins -k_point = mp.Vector3(0,0,0) +k_point = mp.Vector3(0, 0, 0) glass = mp.Medium(index=1.5) -def grating(gp,gh,gdc,oddz): - sx = dpml+dsub+gh+dpad+dpml - sy = gp - - cell_size = mp.Vector3(sx,sy,0) - pml_layers = [mp.PML(thickness=dpml,direction=mp.X)] - - src_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub,0,0) - sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez if oddz else mp.Hz, center=src_pt, size=mp.Vector3(0,sy,0))] - - symmetries=[mp.Mirror(mp.Y, phase=+1 if oddz else -1)] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - k_point=k_point, - default_material=glass, - sources=sources, - symmetries=symmetries) - - mon_pt = mp.Vector3(0.5*sx-dpml-0.5*dpad,0,0) - flux_mon = sim.add_flux(fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(0,sy,0))) - - sim.run(until_after_sources=100) - - input_flux = mp.get_fluxes(flux_mon) - - sim.reset_meep() - - geometry = [mp.Block(material=glass, size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub),0,0)), - mp.Block(material=glass, size=mp.Vector3(gh,gdc*gp,mp.inf), center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh,0,0))] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - geometry=geometry, - k_point=k_point, - sources=sources, - symmetries=symmetries) - - mode_mon = sim.add_flux(fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(0,sy,0))) - - sim.run(until_after_sources=300) - - freqs = mp.get_eigenmode_freqs(mode_mon) - res = sim.get_eigenmode_coefficients(mode_mon, [1], eig_parity=mp.ODD_Z+mp.EVEN_Y if oddz else mp.EVEN_Z+mp.ODD_Y) - coeffs = res.alpha - - mode_wvl = [1/freqs[nf] for nf in range(nfreq)] - mode_tran = [abs(coeffs[0,nf,0])**2/input_flux[nf] for nf in range(nfreq)] - mode_phase = [np.angle(coeffs[0,nf,0]) for nf in range(nfreq)] - - return mode_wvl, mode_tran, mode_phase - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument('-gp', type=float, default=0.35, help='grating periodicity (default: 0.35 μm)') - parser.add_argument('-gh', type=float, default=0.6, help='grating height (default: 0.6 μm)') - parser.add_argument('-oddz', action='store_true', default=False, help='oddz? (default: False)') - args = parser.parse_args() - - gdc = np.arange(0.1,1.0,0.1) - mode_tran = np.empty((gdc.size,nfreq)) - mode_phase = np.empty((gdc.size,nfreq)) - for n in range(gdc.size): - mode_wvl, mode_tran[n,:], mode_phase[n,:] = grating(args.gp,args.gh,gdc[n],args.oddz) - - plt.figure(dpi=150) - - plt.subplot(1,2,1) - plt.pcolormesh(mode_wvl, gdc, mode_tran, cmap='hot_r', shading='gouraud', vmin=0, vmax=mode_tran.max()) - plt.axis([wvl_min, wvl_max, gdc[0], gdc[-1]]) - plt.xlabel("wavelength (μm)") - plt.xticks([t for t in np.arange(wvl_min,wvl_max+0.1,0.1)]) - plt.ylabel("grating duty cycle") - plt.yticks([t for t in np.arange(gdc[0],gdc[-1]+0.1,0.1)]) - plt.title("transmittance") - cbar = plt.colorbar() - cbar.set_ticks([t for t in np.arange(0,1.2,0.2)]) - cbar.set_ticklabels(["{:.1f}".format(t) for t in np.arange(0,1.2,0.2)]) - - plt.subplot(1,2,2) - plt.pcolormesh(mode_wvl, gdc, mode_phase, cmap='RdBu', shading='gouraud', vmin=mode_phase.min(), vmax=mode_phase.max()) - plt.axis([wvl_min, wvl_max, gdc[0], gdc[-1]]) - plt.xlabel("wavelength (μm)") - plt.xticks([t for t in np.arange(wvl_min,wvl_max+0.1,0.1)]) - plt.ylabel("grating duty cycle") - plt.yticks([t for t in np.arange(gdc[0],gdc[-1]+0.1,0.1)]) - plt.title("phase (radians)") - cbar = plt.colorbar() - cbar.set_ticks([t for t in range(-3,4)]) - cbar.set_ticklabels(["{:.1f}".format(t) for t in range(-3,4)]) - - plt.tight_layout() - plt.show() + +def grating(gp, gh, gdc, oddz): + sx = dpml + dsub + gh + dpad + dpml + sy = gp + + cell_size = mp.Vector3(sx, sy, 0) + pml_layers = [mp.PML(thickness=dpml, direction=mp.X)] + + src_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * dsub, 0, 0) + sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=mp.Ez if oddz else mp.Hz, + center=src_pt, + size=mp.Vector3(0, sy, 0), + ) + ] + + symmetries = [mp.Mirror(mp.Y, phase=+1 if oddz else -1)] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + k_point=k_point, + default_material=glass, + sources=sources, + symmetries=symmetries, + ) + + mon_pt = mp.Vector3(0.5 * sx - dpml - 0.5 * dpad, 0, 0) + flux_mon = sim.add_flux( + fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(0, sy, 0)) + ) + + sim.run(until_after_sources=100) + + input_flux = mp.get_fluxes(flux_mon) + + sim.reset_meep() + + geometry = [ + mp.Block( + material=glass, + size=mp.Vector3(dpml + dsub, mp.inf, mp.inf), + center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub), 0, 0), + ), + mp.Block( + material=glass, + size=mp.Vector3(gh, gdc * gp, mp.inf), + center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh, 0, 0), + ), + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + geometry=geometry, + k_point=k_point, + sources=sources, + symmetries=symmetries, + ) + + mode_mon = sim.add_flux( + fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(0, sy, 0)) + ) + + sim.run(until_after_sources=300) + + freqs = mp.get_eigenmode_freqs(mode_mon) + res = sim.get_eigenmode_coefficients( + mode_mon, [1], eig_parity=mp.ODD_Z + mp.EVEN_Y if oddz else mp.EVEN_Z + mp.ODD_Y + ) + coeffs = res.alpha + + mode_wvl = [1 / freqs[nf] for nf in range(nfreq)] + mode_tran = [abs(coeffs[0, nf, 0]) ** 2 / input_flux[nf] for nf in range(nfreq)] + mode_phase = [np.angle(coeffs[0, nf, 0]) for nf in range(nfreq)] + + return mode_wvl, mode_tran, mode_phase + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument( + "-gp", type=float, default=0.35, help="grating periodicity (default: 0.35 μm)" + ) + parser.add_argument( + "-gh", type=float, default=0.6, help="grating height (default: 0.6 μm)" + ) + parser.add_argument( + "-oddz", action="store_true", default=False, help="oddz? (default: False)" + ) + args = parser.parse_args() + + gdc = np.arange(0.1, 1.0, 0.1) + mode_tran = np.empty((gdc.size, nfreq)) + mode_phase = np.empty((gdc.size, nfreq)) + for n in range(gdc.size): + mode_wvl, mode_tran[n, :], mode_phase[n, :] = grating( + args.gp, args.gh, gdc[n], args.oddz + ) + + plt.figure(dpi=150) + + plt.subplot(1, 2, 1) + plt.pcolormesh( + mode_wvl, + gdc, + mode_tran, + cmap="hot_r", + shading="gouraud", + vmin=0, + vmax=mode_tran.max(), + ) + plt.axis([wvl_min, wvl_max, gdc[0], gdc[-1]]) + plt.xlabel("wavelength (μm)") + plt.xticks(list(np.arange(wvl_min, wvl_max + 0.1, 0.1))) + plt.ylabel("grating duty cycle") + plt.yticks(list(np.arange(gdc[0], gdc[-1] + 0.1, 0.1))) + plt.title("transmittance") + cbar = plt.colorbar() + cbar.set_ticks(list(np.arange(0, 1.2, 0.2))) + cbar.set_ticklabels([f"{t:.1f}" for t in np.arange(0, 1.2, 0.2)]) + + plt.subplot(1, 2, 2) + plt.pcolormesh( + mode_wvl, + gdc, + mode_phase, + cmap="RdBu", + shading="gouraud", + vmin=mode_phase.min(), + vmax=mode_phase.max(), + ) + plt.axis([wvl_min, wvl_max, gdc[0], gdc[-1]]) + plt.xlabel("wavelength (μm)") + plt.xticks(list(np.arange(wvl_min, wvl_max + 0.1, 0.1))) + plt.ylabel("grating duty cycle") + plt.yticks(list(np.arange(gdc[0], gdc[-1] + 0.1, 0.1))) + plt.title("phase (radians)") + cbar = plt.colorbar() + cbar.set_ticks(list(range(-3, 4))) + cbar.set_ticklabels([f"{t:.1f}" for t in range(-3, 4)]) + + plt.tight_layout() + plt.show() diff --git a/python/examples/cavity-farfield.py b/python/examples/cavity-farfield.py index 46ee7624e..c643a8105 100644 --- a/python/examples/cavity-farfield.py +++ b/python/examples/cavity-farfield.py @@ -1,34 +1,39 @@ -import meep as mp -import numpy as np import matplotlib -matplotlib.use('agg') -import matplotlib.pyplot as plt +import numpy as np +import meep as mp + +matplotlib.use("agg") +import matplotlib.pyplot as plt -resolution = 20 # pixels/μm +resolution = 20 # pixels/μm -fcen = 0.25 # pulse center frequency -df = 0.2 # pulse width (in frequency) +fcen = 0.25 # pulse center frequency +df = 0.2 # pulse width (in frequency) -eps = 13 # dielectric constant of waveguide -w = 1.2 # width of waveguide -r = 0.36 # radius of holes -d = 1.4 # defect spacing (ordinary spacing = 1) -N = 3 # number of holes on either side of defect +eps = 13 # dielectric constant of waveguide +w = 1.2 # width of waveguide +r = 0.36 # radius of holes +d = 1.4 # defect spacing (ordinary spacing = 1) +N = 3 # number of holes on either side of defect -dpad = 32 # padding between last hole and PML edge -dpml = 0.5/(fcen-0.5*df) # PML thickness (> half the largest wavelength) -sx = 2*(dpad+dpml+N) + d - 1 # size of cell in x direction +dpad = 32 # padding between last hole and PML edge +dpml = 0.5 / (fcen - 0.5 * df) # PML thickness (> half the largest wavelength) +sx = 2 * (dpad + dpml + N) + d - 1 # size of cell in x direction -d1 = 0.2 # y-distance from waveguide edge to near2far surface -d2 = 2.0 # y-distance from near2far surface to far-field line -sy = w + 2*(d1+d2+dpml) # size of cell in y direction (perpendicular to wvg.) +d1 = 0.2 # y-distance from waveguide edge to near2far surface +d2 = 2.0 # y-distance from near2far surface to far-field line +sy = w + 2 * (d1 + d2 + dpml) # size of cell in y direction (perpendicular to wvg.) -cell = mp.Vector3(sx,sy,0) +cell = mp.Vector3(sx, sy, 0) -geometry = [mp.Block(center=mp.Vector3(), - size=mp.Vector3(mp.inf, w, mp.inf), - material=mp.Medium(epsilon=eps))] +geometry = [ + mp.Block( + center=mp.Vector3(), + size=mp.Vector3(mp.inf, w, mp.inf), + material=mp.Medium(epsilon=eps), + ) +] for i in range(N): geometry.append(mp.Cylinder(r, center=mp.Vector3(d / 2 + i))) @@ -36,29 +41,36 @@ pml_layers = [mp.PML(dpml)] -sources = [mp.Source(src=mp.GaussianSource(fcen, fwidth=df), - component=mp.Hz, - center=mp.Vector3())] - -symmetries = [mp.Mirror(mp.X, phase=-1), - mp.Mirror(mp.Y, phase=-1)] - -sim = mp.Simulation(cell_size=cell, - geometry=geometry, - sources=sources, - symmetries=symmetries, - boundary_layers=pml_layers, - resolution=resolution) +sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=df), component=mp.Hz, center=mp.Vector3() + ) +] + +symmetries = [mp.Mirror(mp.X, phase=-1), mp.Mirror(mp.Y, phase=-1)] + +sim = mp.Simulation( + cell_size=cell, + geometry=geometry, + sources=sources, + symmetries=symmetries, + boundary_layers=pml_layers, + resolution=resolution, +) nearfield = sim.add_near2far( - fcen, 0, 1, - mp.Near2FarRegion(mp.Vector3(0, 0.5*w + d1), - size=mp.Vector3(sx - 2*dpml)), - mp.Near2FarRegion(mp.Vector3(-0.5*sx + dpml, 0.5*w + 0.5*d1), - size=mp.Vector3(0, d1), - weight=-1.0), - mp.Near2FarRegion(mp.Vector3(0.5*sx - dpml, 0.5*w + 0.5*d1), - size=mp.Vector3(0, d1)), + fcen, + 0, + 1, + mp.Near2FarRegion(mp.Vector3(0, 0.5 * w + d1), size=mp.Vector3(sx - 2 * dpml)), + mp.Near2FarRegion( + mp.Vector3(-0.5 * sx + dpml, 0.5 * w + 0.5 * d1), + size=mp.Vector3(0, d1), + weight=-1.0, + ), + mp.Near2FarRegion( + mp.Vector3(0.5 * sx - dpml, 0.5 * w + 0.5 * d1), size=mp.Vector3(0, d1) + ), ) mon = sim.add_dft_fields( @@ -66,49 +78,57 @@ fcen, 0, 1, - center=mp.Vector3(0, 0.5*w + d1 + d2), - size=mp.Vector3(sx - 2*(dpad+dpml), 0) + center=mp.Vector3(0, 0.5 * w + d1 + d2), + size=mp.Vector3(sx - 2 * (dpad + dpml), 0), ) sim.run(until_after_sources=mp.stop_when_dft_decayed()) sim.plot2D() if mp.am_master(): - plt.savefig(f'cavity_farfield_plot2D_dpad{dpad}_{d1}_{d2}.png',bbox_inches='tight',dpi=150) + plt.savefig( + f"cavity_farfield_plot2D_dpad{dpad}_{d1}_{d2}.png", bbox_inches="tight", dpi=150 + ) Hz_mon = sim.get_dft_array(mon, mp.Hz, 0) -(x,y,z,w) = sim.get_array_metadata(dft_cell=mon) +(x, y, z, w) = sim.get_array_metadata(dft_cell=mon) ff = [] for xc in x: - ff_pt = sim.get_farfield(nearfield, mp.Vector3(xc,y[0])) + ff_pt = sim.get_farfield(nearfield, mp.Vector3(xc, y[0])) ff.append(ff_pt[5]) ff = np.array(ff) if mp.am_master(): plt.figure() - plt.subplot(1,3,1) - plt.plot(np.real(Hz_mon),'bo-',label='DFT') - plt.plot(np.real(ff),'ro-',label='N2F') + plt.subplot(1, 3, 1) + plt.plot(np.real(Hz_mon), "bo-", label="DFT") + plt.plot(np.real(ff), "ro-", label="N2F") plt.legend() - plt.xlabel('$x$ (μm)') - plt.ylabel('real(Hz)') + plt.xlabel("$x$ (μm)") + plt.ylabel("real(Hz)") - plt.subplot(1,3,2) - plt.plot(np.imag(Hz_mon),'bo-',label='DFT') - plt.plot(np.imag(ff),'ro-',label='N2F') + plt.subplot(1, 3, 2) + plt.plot(np.imag(Hz_mon), "bo-", label="DFT") + plt.plot(np.imag(ff), "ro-", label="N2F") plt.legend() - plt.xlabel('$x$ (μm)') - plt.ylabel('imag(Hz)') + plt.xlabel("$x$ (μm)") + plt.ylabel("imag(Hz)") - plt.subplot(1,3,3) - plt.plot(np.abs(Hz_mon),'bo-',label='DFT') - plt.plot(np.abs(ff),'ro-',label='N2F') + plt.subplot(1, 3, 3) + plt.plot(np.abs(Hz_mon), "bo-", label="DFT") + plt.plot(np.abs(ff), "ro-", label="N2F") plt.legend() - plt.xlabel('$x$ (μm)') - plt.ylabel('|Hz|') + plt.xlabel("$x$ (μm)") + plt.ylabel("|Hz|") - plt.suptitle(f'comparison of near2far and actual DFT fields\n dpad={dpad}, d1={d1}, d2={d2}') + plt.suptitle( + f"comparison of near2far and actual DFT fields\n dpad={dpad}, d1={d1}, d2={d2}" + ) plt.subplots_adjust(wspace=0.6) - plt.savefig(f'test_Hz_dft_vs_n2f_res{resolution}_dpad{dpad}_d1{d1}_d2{d2}.png',bbox_inches='tight',dpi=150) + plt.savefig( + f"test_Hz_dft_vs_n2f_res{resolution}_dpad{dpad}_d1{d1}_d2{d2}.png", + bbox_inches="tight", + dpi=150, + ) diff --git a/python/examples/cavity_arrayslice.py b/python/examples/cavity_arrayslice.py index 6fa9e91aa..55c4b1d05 100644 --- a/python/examples/cavity_arrayslice.py +++ b/python/examples/cavity_arrayslice.py @@ -1,6 +1,7 @@ -import meep as mp -import numpy as np import matplotlib.pyplot as plt +import numpy as np + +import meep as mp # set up the geometry eps = 13 @@ -18,26 +19,23 @@ cell = mp.Vector3(sx, sy, 0) -blk = mp.Block(size=mp.Vector3(mp.inf, w, mp.inf), - material=mp.Medium(epsilon=eps)) +blk = mp.Block(size=mp.Vector3(mp.inf, w, mp.inf), material=mp.Medium(epsilon=eps)) geometry = [blk] -for i in range(3): - geometry.append(mp.Cylinder(r, center=mp.Vector3(d / 2 + i))) - -for i in range(3): - geometry.append(mp.Cylinder(r, center=mp.Vector3(d / -2 - i))) +geometry.extend(mp.Cylinder(r, center=mp.Vector3(d / 2 + i)) for i in range(3)) +geometry.extend(mp.Cylinder(r, center=mp.Vector3(d / -2 - i)) for i in range(3)) -sim = mp.Simulation(cell_size=cell, - geometry=geometry, - sources=[], - boundary_layers=[mp.PML(dpml)], - resolution=20) +sim = mp.Simulation( + cell_size=cell, + geometry=geometry, + sources=[], + boundary_layers=[mp.PML(dpml)], + resolution=20, +) # add sources -sim.sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), - mp.Hz, mp.Vector3())] +sim.sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), mp.Hz, mp.Vector3())] # run until sources are finished (and no later) sim._run_sources_until(0, []) diff --git a/python/examples/cherenkov-radiation.py b/python/examples/cherenkov-radiation.py index f6f165376..92423d9fd 100644 --- a/python/examples/cherenkov-radiation.py +++ b/python/examples/cherenkov-radiation.py @@ -1,29 +1,40 @@ ## moving point charge with superluminal phase velocity in dielectric media emitting Cherenkov radiation - import meep as mp sx = 60 sy = 60 -cell_size = mp.Vector3(sx,sy,0) +cell_size = mp.Vector3(sx, sy, 0) dpml = 1.0 pml_layers = [mp.PML(thickness=dpml)] -v = 0.7 # velocity of point charge +v = 0.7 # velocity of point charge symmetries = [mp.Mirror(direction=mp.Y)] -sim = mp.Simulation(resolution=10, - cell_size=cell_size, - default_material=mp.Medium(index=1.5), - symmetries=symmetries, - boundary_layers=pml_layers) +sim = mp.Simulation( + resolution=10, + cell_size=cell_size, + default_material=mp.Medium(index=1.5), + symmetries=symmetries, + boundary_layers=pml_layers, +) -def move_source(sim): - sim.change_sources([mp.Source(mp.ContinuousSource(frequency=1e-10), - component=mp.Ex, - center=mp.Vector3(-0.5*sx+dpml+v*sim.meep_time()))]) -sim.run(move_source, - mp.at_every(2, mp.output_png(mp.Hz, "-vZc dkbluered -M 1")), - until=sx/v) +def move_source(sim): + sim.change_sources( + [ + mp.Source( + mp.ContinuousSource(frequency=1e-10), + component=mp.Ex, + center=mp.Vector3(-0.5 * sx + dpml + v * sim.meep_time()), + ) + ] + ) + + +sim.run( + move_source, + mp.at_every(2, mp.output_png(mp.Hz, "-vZc dkbluered -M 1")), + until=sx / v, +) diff --git a/python/examples/chirped_pulse.py b/python/examples/chirped_pulse.py index b768b6ab1..493d8bbba 100644 --- a/python/examples/chirped_pulse.py +++ b/python/examples/chirped_pulse.py @@ -1,36 +1,48 @@ ## linear-chirped pulse planewave with higher frequencies at the front (down-chirp) +import numpy as np import meep as mp -import numpy as np resolution = 40 dpml = 2 -pml_layers = [mp.PML(thickness=dpml,direction=mp.X)] +pml_layers = [mp.PML(thickness=dpml, direction=mp.X)] sx = 40 sy = 6 -cell_size = mp.Vector3(sx+2*dpml,sy) +cell_size = mp.Vector3(sx + 2 * dpml, sy) v0 = 1.0 # pulse center frequency -a = 0.2 # Gaussian envelope half-width +a = 0.2 # Gaussian envelope half-width b = -0.5 # linear chirp rate (positive: up-chirp, negative: down-chirp) -t0 = 15 # peak time - -chirp = lambda t: np.exp(1j*2*np.pi*v0*(t-t0)) * np.exp(-a*(t-t0)**2+1j*b*(t-t0)**2) - -sources = [mp.Source(src=mp.CustomSource(src_func=chirp), - center=mp.Vector3(-0.5*sx), - size=mp.Vector3(y=sy), - component=mp.Ez)] - -sim = mp.Simulation(cell_size=cell_size, - boundary_layers=pml_layers, - resolution=resolution, - k_point=mp.Vector3(), - sources=sources, - symmetries=[mp.Mirror(mp.Y)]) - -sim.run(mp.in_volume(mp.Volume(center=mp.Vector3(), size=mp.Vector3(sx,sy)), - mp.at_every(2.7, mp.output_efield_z)), - until=t0+50) +t0 = 15 # peak time + +chirp = lambda t: np.exp(1j * 2 * np.pi * v0 * (t - t0)) * np.exp( + -a * (t - t0) ** 2 + 1j * b * (t - t0) ** 2 +) + +sources = [ + mp.Source( + src=mp.CustomSource(src_func=chirp), + center=mp.Vector3(-0.5 * sx), + size=mp.Vector3(y=sy), + component=mp.Ez, + ) +] + +sim = mp.Simulation( + cell_size=cell_size, + boundary_layers=pml_layers, + resolution=resolution, + k_point=mp.Vector3(), + sources=sources, + symmetries=[mp.Mirror(mp.Y)], +) + +sim.run( + mp.in_volume( + mp.Volume(center=mp.Vector3(), size=mp.Vector3(sx, sy)), + mp.at_every(2.7, mp.output_efield_z), + ), + until=t0 + 50, +) diff --git a/python/examples/coupler.py b/python/examples/coupler.py index b141681f9..56b321a1f 100644 --- a/python/examples/coupler.py +++ b/python/examples/coupler.py @@ -1,7 +1,8 @@ -import meep as mp import argparse -gdsII_file = 'coupler.gds' +import meep as mp + +gdsII_file = "coupler.gds" CELL_LAYER = 0 PORT1_LAYER = 1 PORT2_LAYER = 2 @@ -17,24 +18,29 @@ t_air = 0.78 dpml = 1 -cell_thickness = dpml+t_oxide+t_Si+t_air+dpml +cell_thickness = dpml + t_oxide + t_Si + t_air + dpml oxide = mp.Medium(epsilon=2.25) silicon = mp.Medium(epsilon=12) -fcen = 1/1.55 -df = 0.2*fcen +fcen = 1 / 1.55 +df = 0.2 * fcen + def main(args): - cell_zmax = 0.5*cell_thickness if args.three_d else 0 - cell_zmin = -0.5*cell_thickness if args.three_d else 0 - si_zmax = 0.5*t_Si if args.three_d else 10 - si_zmin = -0.5*t_Si if args.three_d else -10 + cell_zmax = 0.5 * cell_thickness if args.three_d else 0 + cell_zmin = -0.5 * cell_thickness if args.three_d else 0 + si_zmax = 0.5 * t_Si if args.three_d else 10 + si_zmin = -0.5 * t_Si if args.three_d else -10 # read cell size, volumes for source region and flux monitors, # and coupler geometry from GDSII file - upper_branch = mp.get_GDSII_prisms(silicon, gdsII_file, UPPER_BRANCH_LAYER, si_zmin, si_zmax) - lower_branch = mp.get_GDSII_prisms(silicon, gdsII_file, LOWER_BRANCH_LAYER, si_zmin, si_zmax) + upper_branch = mp.get_GDSII_prisms( + silicon, gdsII_file, UPPER_BRANCH_LAYER, si_zmin, si_zmax + ) + lower_branch = mp.get_GDSII_prisms( + silicon, gdsII_file, LOWER_BRANCH_LAYER, si_zmin, si_zmax + ) cell = mp.GDSII_vol(gdsII_file, CELL_LAYER, cell_zmin, cell_zmax) p1 = mp.GDSII_vol(gdsII_file, PORT1_LAYER, si_zmin, si_zmax) @@ -45,14 +51,14 @@ def main(args): # displace upper and lower branches of coupler (as well as source and flux regions) if args.d != default_d: - delta_y = 0.5*(args.d-default_d) + delta_y = 0.5 * (args.d - default_d) delta = mp.Vector3(y=delta_y) p1.center += delta p2.center -= delta p3.center += delta p4.center -= delta src_vol.center += delta - cell.size += 2*delta + cell.size += 2 * delta for np in range(len(lower_branch)): lower_branch[np].center -= delta for nv in range(len(lower_branch[np].vertices)): @@ -62,23 +68,29 @@ def main(args): for nv in range(len(upper_branch[np].vertices)): upper_branch[np].vertices[nv] += delta - geometry = upper_branch+lower_branch + geometry = upper_branch + lower_branch if args.three_d: - oxide_center = mp.Vector3(z=-0.5*t_oxide) - oxide_size = mp.Vector3(cell.size.x,cell.size.y,t_oxide) + oxide_center = mp.Vector3(z=-0.5 * t_oxide) + oxide_size = mp.Vector3(cell.size.x, cell.size.y, t_oxide) oxide_layer = [mp.Block(material=oxide, center=oxide_center, size=oxide_size)] - geometry = geometry+oxide_layer - - sources = [mp.EigenModeSource(src=mp.GaussianSource(fcen,fwidth=df), - volume=src_vol, - eig_parity=mp.NO_PARITY if args.three_d else mp.EVEN_Y+mp.ODD_Z)] - - sim = mp.Simulation(resolution=args.res, - cell_size=cell.size, - boundary_layers=[mp.PML(dpml)], - sources=sources, - geometry=geometry) + geometry = geometry + oxide_layer + + sources = [ + mp.EigenModeSource( + src=mp.GaussianSource(fcen, fwidth=df), + volume=src_vol, + eig_parity=mp.NO_PARITY if args.three_d else mp.EVEN_Y + mp.ODD_Z, + ) + ] + + sim = mp.Simulation( + resolution=args.res, + cell_size=cell.size, + boundary_layers=[mp.PML(dpml)], + sources=sources, + geometry=geometry, + ) mode1 = sim.add_mode_monitor(fcen, 0, 1, mp.ModeRegion(volume=p1)) mode2 = sim.add_mode_monitor(fcen, 0, 1, mp.ModeRegion(volume=p2)) @@ -88,22 +100,44 @@ def main(args): sim.run(until_after_sources=100) # S parameters - p1_coeff = sim.get_eigenmode_coefficients(mode1, [1], eig_parity=mp.NO_PARITY if args.three_d else mp.EVEN_Y+mp.ODD_Z).alpha[0,0,0] - p2_coeff = sim.get_eigenmode_coefficients(mode2, [1], eig_parity=mp.NO_PARITY if args.three_d else mp.EVEN_Y+mp.ODD_Z).alpha[0,0,1] - p3_coeff = sim.get_eigenmode_coefficients(mode3, [1], eig_parity=mp.NO_PARITY if args.three_d else mp.EVEN_Y+mp.ODD_Z).alpha[0,0,0] - p4_coeff = sim.get_eigenmode_coefficients(mode4, [1], eig_parity=mp.NO_PARITY if args.three_d else mp.EVEN_Y+mp.ODD_Z).alpha[0,0,0] + p1_coeff = sim.get_eigenmode_coefficients( + mode1, [1], eig_parity=mp.NO_PARITY if args.three_d else mp.EVEN_Y + mp.ODD_Z + ).alpha[0, 0, 0] + p2_coeff = sim.get_eigenmode_coefficients( + mode2, [1], eig_parity=mp.NO_PARITY if args.three_d else mp.EVEN_Y + mp.ODD_Z + ).alpha[0, 0, 1] + p3_coeff = sim.get_eigenmode_coefficients( + mode3, [1], eig_parity=mp.NO_PARITY if args.three_d else mp.EVEN_Y + mp.ODD_Z + ).alpha[0, 0, 0] + p4_coeff = sim.get_eigenmode_coefficients( + mode4, [1], eig_parity=mp.NO_PARITY if args.three_d else mp.EVEN_Y + mp.ODD_Z + ).alpha[0, 0, 0] # transmittance - p2_trans = abs(p2_coeff)**2/abs(p1_coeff)**2 - p3_trans = abs(p3_coeff)**2/abs(p1_coeff)**2 - p4_trans = abs(p4_coeff)**2/abs(p1_coeff)**2 + p2_trans = abs(p2_coeff) ** 2 / abs(p1_coeff) ** 2 + p3_trans = abs(p3_coeff) ** 2 / abs(p1_coeff) ** 2 + p4_trans = abs(p4_coeff) ** 2 / abs(p1_coeff) ** 2 + + print( + "trans:, {:.2f}, {:.6f}, {:.6f}, {:.6f}".format( + args.d, p2_trans, p3_trans, p4_trans + ) + ) - print("trans:, {:.2f}, {:.6f}, {:.6f}, {:.6f}".format(args.d,p2_trans,p3_trans,p4_trans)) -if __name__ == '__main__': +if __name__ == "__main__": parser = argparse.ArgumentParser() - parser.add_argument('-res', type=int, default=50, help='resolution (default: 50 pixels/um)') - parser.add_argument('-d', type=float, default=0.1, help='branch separation (default: 0.1 um)') - parser.add_argument('--three_d', action='store_true', default=False, help='3d calculation? (default: False)') + parser.add_argument( + "-res", type=int, default=50, help="resolution (default: 50 pixels/um)" + ) + parser.add_argument( + "-d", type=float, default=0.1, help="branch separation (default: 0.1 um)" + ) + parser.add_argument( + "--three_d", + action="store_true", + default=False, + help="3d calculation? (default: False)", + ) args = parser.parse_args() main(args) diff --git a/python/examples/cyl-ellipsoid.py b/python/examples/cyl-ellipsoid.py index 3e0d50a34..090e31296 100644 --- a/python/examples/cyl-ellipsoid.py +++ b/python/examples/cyl-ellipsoid.py @@ -1,5 +1,3 @@ -from __future__ import division - import meep as mp @@ -9,7 +7,9 @@ def main(): e = mp.Ellipsoid(size=mp.Vector3(1, 2, mp.inf)) src_cmpt = mp.Hz - sources = mp.Source(src=mp.GaussianSource(1, fwidth=0.1), component=src_cmpt, center=mp.Vector3()) + sources = mp.Source( + src=mp.GaussianSource(1, fwidth=0.1), component=src_cmpt, center=mp.Vector3() + ) if src_cmpt == mp.Ez: symmetries = [mp.Mirror(mp.X), mp.Mirror(mp.Y)] @@ -17,26 +17,30 @@ def main(): if src_cmpt == mp.Hz: symmetries = [mp.Mirror(mp.X, -1), mp.Mirror(mp.Y, -1)] - sim = mp.Simulation(cell_size=mp.Vector3(10, 10), - geometry=[c, e], - boundary_layers=[mp.PML(1.0)], - sources=[sources], - symmetries=symmetries, - resolution=100) + sim = mp.Simulation( + cell_size=mp.Vector3(10, 10), + geometry=[c, e], + boundary_layers=[mp.PML(1.0)], + sources=[sources], + symmetries=symmetries, + resolution=100, + ) def print_stuff(sim_obj): v = mp.Vector3(4.13, 3.75, 0) p = sim.get_field_point(src_cmpt, v) - print("t, Ez: {} {}+{}i".format(sim.round_time(), p.real, p.imag)) + print(f"t, Ez: {sim.round_time()} {p.real}+{p.imag}i") - sim.run(mp.at_beginning(mp.output_epsilon), - mp.at_every(0.25, print_stuff), - mp.at_end(print_stuff), - mp.at_end(mp.output_efield_z), - until=23) + sim.run( + mp.at_beginning(mp.output_epsilon), + mp.at_every(0.25, print_stuff), + mp.at_end(print_stuff), + mp.at_end(mp.output_efield_z), + until=23, + ) - print("stopped at meep time = {}".format(sim.round_time())) + print(f"stopped at meep time = {sim.round_time()}") -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/python/examples/cylinder_cross_section.py b/python/examples/cylinder_cross_section.py index 73960e545..159614982 100644 --- a/python/examples/cylinder_cross_section.py +++ b/python/examples/cylinder_cross_section.py @@ -1,51 +1,72 @@ -import meep as mp -import numpy as np import matplotlib.pyplot as plt +import numpy as np + +import meep as mp r = 0.7 # radius of cylinder h = 2.3 # height of cylinder -wvl_min = 2*np.pi*r/10 -wvl_max = 2*np.pi*r/2 +wvl_min = 2 * np.pi * r / 10 +wvl_max = 2 * np.pi * r / 2 -frq_min = 1/wvl_max -frq_max = 1/wvl_min -frq_cen = 0.5*(frq_min+frq_max) -dfrq = frq_max-frq_min +frq_min = 1 / wvl_max +frq_max = 1 / wvl_min +frq_cen = 0.5 * (frq_min + frq_max) +dfrq = frq_max - frq_min nfrq = 100 ## at least 8 pixels per smallest wavelength, i.e. np.floor(8/wvl_min) resolution = 25 -dpml = 0.5*wvl_max -dair = 1.0*wvl_max +dpml = 0.5 * wvl_max +dair = 1.0 * wvl_max pml_layers = [mp.PML(thickness=dpml)] -sr = r+dair+dpml -sz = dpml+dair+h+dair+dpml -cell_size = mp.Vector3(sr,0,sz) - -sources = [mp.Source(mp.GaussianSource(frq_cen,fwidth=dfrq,is_integrated=True), - component=mp.Er, - center=mp.Vector3(0.5*sr,0,-0.5*sz+dpml), - size=mp.Vector3(sr)), - mp.Source(mp.GaussianSource(frq_cen,fwidth=dfrq,is_integrated=True), - component=mp.Ep, - center=mp.Vector3(0.5*sr,0,-0.5*sz+dpml), - size=mp.Vector3(sr), - amplitude=-1j)] - -sim = mp.Simulation(cell_size=cell_size, - boundary_layers=pml_layers, - resolution=resolution, - sources=sources, - dimensions=mp.CYLINDRICAL, - m=-1) - -box_z1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(0.5*r,0,-0.5*h),size=mp.Vector3(r))) -box_z2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(0.5*r,0,+0.5*h),size=mp.Vector3(r))) -box_r = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(r),size=mp.Vector3(z=h))) +sr = r + dair + dpml +sz = dpml + dair + h + dair + dpml +cell_size = mp.Vector3(sr, 0, sz) + +sources = [ + mp.Source( + mp.GaussianSource(frq_cen, fwidth=dfrq, is_integrated=True), + component=mp.Er, + center=mp.Vector3(0.5 * sr, 0, -0.5 * sz + dpml), + size=mp.Vector3(sr), + ), + mp.Source( + mp.GaussianSource(frq_cen, fwidth=dfrq, is_integrated=True), + component=mp.Ep, + center=mp.Vector3(0.5 * sr, 0, -0.5 * sz + dpml), + size=mp.Vector3(sr), + amplitude=-1j, + ), +] + +sim = mp.Simulation( + cell_size=cell_size, + boundary_layers=pml_layers, + resolution=resolution, + sources=sources, + dimensions=mp.CYLINDRICAL, + m=-1, +) + +box_z1 = sim.add_flux( + frq_cen, + dfrq, + nfrq, + mp.FluxRegion(center=mp.Vector3(0.5 * r, 0, -0.5 * h), size=mp.Vector3(r)), +) +box_z2 = sim.add_flux( + frq_cen, + dfrq, + nfrq, + mp.FluxRegion(center=mp.Vector3(0.5 * r, 0, +0.5 * h), size=mp.Vector3(r)), +) +box_r = sim.add_flux( + frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(r), size=mp.Vector3(z=h)) +) sim.run(until_after_sources=10) @@ -59,21 +80,39 @@ sim.reset_meep() n_cyl = 2.0 -geometry = [mp.Block(material=mp.Medium(index=n_cyl), - center=mp.Vector3(0.5*r), - size=mp.Vector3(r,0,h))] - -sim = mp.Simulation(cell_size=cell_size, - geometry=geometry, - boundary_layers=pml_layers, - resolution=resolution, - sources=sources, - dimensions=mp.CYLINDRICAL, - m=-1) - -box_z1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(0.5*r,0,-0.5*h),size=mp.Vector3(r))) -box_z2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(0.5*r,0,+0.5*h),size=mp.Vector3(r))) -box_r = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(r),size=mp.Vector3(z=h))) +geometry = [ + mp.Block( + material=mp.Medium(index=n_cyl), + center=mp.Vector3(0.5 * r), + size=mp.Vector3(r, 0, h), + ) +] + +sim = mp.Simulation( + cell_size=cell_size, + geometry=geometry, + boundary_layers=pml_layers, + resolution=resolution, + sources=sources, + dimensions=mp.CYLINDRICAL, + m=-1, +) + +box_z1 = sim.add_flux( + frq_cen, + dfrq, + nfrq, + mp.FluxRegion(center=mp.Vector3(0.5 * r, 0, -0.5 * h), size=mp.Vector3(r)), +) +box_z2 = sim.add_flux( + frq_cen, + dfrq, + nfrq, + mp.FluxRegion(center=mp.Vector3(0.5 * r, 0, +0.5 * h), size=mp.Vector3(r)), +) +box_r = sim.add_flux( + frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(r), size=mp.Vector3(z=h)) +) sim.load_minus_flux_data(box_z1, box_z1_data) sim.load_minus_flux_data(box_z2, box_z2_data) @@ -85,16 +124,16 @@ box_z2_flux = mp.get_fluxes(box_z2) box_r_flux = mp.get_fluxes(box_r) -scatt_flux = np.asarray(box_z1_flux)-np.asarray(box_z2_flux)-np.asarray(box_r_flux) -intensity = np.asarray(box_z1_flux0)/(np.pi*r**2) -scatt_cross_section = np.divide(-scatt_flux,intensity) +scatt_flux = np.asarray(box_z1_flux) - np.asarray(box_z2_flux) - np.asarray(box_r_flux) +intensity = np.asarray(box_z1_flux0) / (np.pi * r**2) +scatt_cross_section = np.divide(-scatt_flux, intensity) if mp.am_master(): plt.figure(dpi=150) - plt.loglog(2*np.pi*r*np.asarray(freqs),scatt_cross_section,'bo-') - plt.grid(True,which="both",ls="-") - plt.xlabel('(cylinder circumference)/wavelength, 2πr/λ') - plt.ylabel('scattering cross section, σ') - plt.title('Scattering Cross Section of a Lossless Dielectric Cylinder') + plt.loglog(2 * np.pi * r * np.asarray(freqs), scatt_cross_section, "bo-") + plt.grid(True, which="both", ls="-") + plt.xlabel("(cylinder circumference)/wavelength, 2πr/λ") + plt.ylabel("scattering cross section, σ") + plt.title("Scattering Cross Section of a Lossless Dielectric Cylinder") plt.tight_layout() plt.savefig("cylinder_cross_section.png") diff --git a/python/examples/differential_cross_section.py b/python/examples/differential_cross_section.py index 74c5e14b7..027a2a500 100644 --- a/python/examples/differential_cross_section.py +++ b/python/examples/differential_cross_section.py @@ -1,50 +1,79 @@ -import meep as mp -import numpy as np import matplotlib.pyplot as plt +import numpy as np import PyMieScatt as ps +import meep as mp + r = 1.0 # radius of sphere frq_cen = 1.0 -resolution = 20 # pixels/um +resolution = 20 # pixels/um dpml = 0.5 -dair = 1.5 # at least 0.5/frq_cen padding between source and near-field monitor +dair = 1.5 # at least 0.5/frq_cen padding between source and near-field monitor pml_layers = [mp.PML(thickness=dpml)] -s = 2*(dpml+dair+r) -cell_size = mp.Vector3(s,s,s) +s = 2 * (dpml + dair + r) +cell_size = mp.Vector3(s, s, s) # circularly-polarized source with propagation axis along x # is_integrated=True necessary for any planewave source extending into PML -sources = [mp.Source(mp.GaussianSource(frq_cen,fwidth=0.2*frq_cen,is_integrated=True), - center=mp.Vector3(-0.5*s+dpml), - size=mp.Vector3(0,s,s), - component=mp.Ez), - mp.Source(mp.GaussianSource(frq_cen,fwidth=0.2*frq_cen,is_integrated=True), - center=mp.Vector3(-0.5*s+dpml), - size=mp.Vector3(0,s,s), - component=mp.Ey, - amplitude=1j)] - -sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - sources=sources, - k_point=mp.Vector3()) - -box_flux = sim.add_flux(frq_cen, 0, 1, - mp.FluxRegion(center=mp.Vector3(x=-2*r),size=mp.Vector3(0,4*r,4*r))) - -nearfield_box = sim.add_near2far(frq_cen, 0, 1, - mp.Near2FarRegion(center=mp.Vector3(x=-2*r),size=mp.Vector3(0,4*r,4*r),weight=+1), - mp.Near2FarRegion(center=mp.Vector3(x=+2*r),size=mp.Vector3(0,4*r,4*r),weight=-1), - mp.Near2FarRegion(center=mp.Vector3(y=-2*r),size=mp.Vector3(4*r,0,4*r),weight=+1), - mp.Near2FarRegion(center=mp.Vector3(y=+2*r),size=mp.Vector3(4*r,0,4*r),weight=-1), - mp.Near2FarRegion(center=mp.Vector3(z=-2*r),size=mp.Vector3(4*r,4*r,0),weight=+1), - mp.Near2FarRegion(center=mp.Vector3(z=+2*r),size=mp.Vector3(4*r,4*r,0),weight=-1)) +sources = [ + mp.Source( + mp.GaussianSource(frq_cen, fwidth=0.2 * frq_cen, is_integrated=True), + center=mp.Vector3(-0.5 * s + dpml), + size=mp.Vector3(0, s, s), + component=mp.Ez, + ), + mp.Source( + mp.GaussianSource(frq_cen, fwidth=0.2 * frq_cen, is_integrated=True), + center=mp.Vector3(-0.5 * s + dpml), + size=mp.Vector3(0, s, s), + component=mp.Ey, + amplitude=1j, + ), +] + +sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + sources=sources, + k_point=mp.Vector3(), +) + +box_flux = sim.add_flux( + frq_cen, + 0, + 1, + mp.FluxRegion(center=mp.Vector3(x=-2 * r), size=mp.Vector3(0, 4 * r, 4 * r)), +) + +nearfield_box = sim.add_near2far( + frq_cen, + 0, + 1, + mp.Near2FarRegion( + center=mp.Vector3(x=-2 * r), size=mp.Vector3(0, 4 * r, 4 * r), weight=+1 + ), + mp.Near2FarRegion( + center=mp.Vector3(x=+2 * r), size=mp.Vector3(0, 4 * r, 4 * r), weight=-1 + ), + mp.Near2FarRegion( + center=mp.Vector3(y=-2 * r), size=mp.Vector3(4 * r, 0, 4 * r), weight=+1 + ), + mp.Near2FarRegion( + center=mp.Vector3(y=+2 * r), size=mp.Vector3(4 * r, 0, 4 * r), weight=-1 + ), + mp.Near2FarRegion( + center=mp.Vector3(z=-2 * r), size=mp.Vector3(4 * r, 4 * r, 0), weight=+1 + ), + mp.Near2FarRegion( + center=mp.Vector3(z=+2 * r), size=mp.Vector3(4 * r, 4 * r, 0), weight=-1 + ), +) sim.run(until_after_sources=10) @@ -54,49 +83,80 @@ sim.reset_meep() n_sphere = 2.0 -geometry = [mp.Sphere(material=mp.Medium(index=n_sphere), - center=mp.Vector3(), - radius=r)] - -sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - sources=sources, - k_point=mp.Vector3(), - geometry=geometry) - -nearfield_box = sim.add_near2far(frq_cen, 0, 1, - mp.Near2FarRegion(center=mp.Vector3(x=-2*r),size=mp.Vector3(0,4*r,4*r),weight=+1), - mp.Near2FarRegion(center=mp.Vector3(x=+2*r),size=mp.Vector3(0,4*r,4*r),weight=-1), - mp.Near2FarRegion(center=mp.Vector3(y=-2*r),size=mp.Vector3(4*r,0,4*r),weight=+1), - mp.Near2FarRegion(center=mp.Vector3(y=+2*r),size=mp.Vector3(4*r,0,4*r),weight=-1), - mp.Near2FarRegion(center=mp.Vector3(z=-2*r),size=mp.Vector3(4*r,4*r,0),weight=+1), - mp.Near2FarRegion(center=mp.Vector3(z=+2*r),size=mp.Vector3(4*r,4*r,0),weight=-1)) +geometry = [ + mp.Sphere(material=mp.Medium(index=n_sphere), center=mp.Vector3(), radius=r) +] + +sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + sources=sources, + k_point=mp.Vector3(), + geometry=geometry, +) + +nearfield_box = sim.add_near2far( + frq_cen, + 0, + 1, + mp.Near2FarRegion( + center=mp.Vector3(x=-2 * r), size=mp.Vector3(0, 4 * r, 4 * r), weight=+1 + ), + mp.Near2FarRegion( + center=mp.Vector3(x=+2 * r), size=mp.Vector3(0, 4 * r, 4 * r), weight=-1 + ), + mp.Near2FarRegion( + center=mp.Vector3(y=-2 * r), size=mp.Vector3(4 * r, 0, 4 * r), weight=+1 + ), + mp.Near2FarRegion( + center=mp.Vector3(y=+2 * r), size=mp.Vector3(4 * r, 0, 4 * r), weight=-1 + ), + mp.Near2FarRegion( + center=mp.Vector3(z=-2 * r), size=mp.Vector3(4 * r, 4 * r, 0), weight=+1 + ), + mp.Near2FarRegion( + center=mp.Vector3(z=+2 * r), size=mp.Vector3(4 * r, 4 * r, 0), weight=-1 + ), +) sim.load_minus_near2far_data(nearfield_box, nearfield_box_data) sim.run(until_after_sources=100) -npts = 100 # number of points in [0,pi) range of polar angles to sample far fields along semi-circle -angles = np.pi/npts*np.arange(npts) +npts = 100 # number of points in [0,pi) range of polar angles to sample far fields along semi-circle +angles = np.pi / npts * np.arange(npts) -ff_r = 10000*r # radius of far-field semi-circle +ff_r = 10000 * r # radius of far-field semi-circle -E = np.zeros((npts,3),dtype=np.complex128) -H = np.zeros((npts,3),dtype=np.complex128) +E = np.zeros((npts, 3), dtype=np.complex128) +H = np.zeros((npts, 3), dtype=np.complex128) for n in range(npts): - ff = sim.get_farfield(nearfield_box, ff_r*mp.Vector3(np.cos(angles[n]),0,np.sin(angles[n]))) - E[n,:] = [np.conj(ff[j]) for j in range(3)] - H[n,:] = [ff[j+3] for j in range(3)] - -Px = np.real(np.multiply(E[:,1],H[:,2])-np.multiply(E[:,2],H[:,1])) -Py = np.real(np.multiply(E[:,2],H[:,0])-np.multiply(E[:,0],H[:,2])) -Pz = np.real(np.multiply(E[:,0],H[:,1])-np.multiply(E[:,1],H[:,0])) -Pr = np.sqrt(np.square(Px)+np.square(Py)+np.square(Pz)) - -intensity = input_flux/(4*r)**2 + ff = sim.get_farfield( + nearfield_box, ff_r * mp.Vector3(np.cos(angles[n]), 0, np.sin(angles[n])) + ) + E[n, :] = [np.conj(ff[j]) for j in range(3)] + H[n, :] = [ff[j + 3] for j in range(3)] + +Px = np.real(np.multiply(E[:, 1], H[:, 2]) - np.multiply(E[:, 2], H[:, 1])) +Py = np.real(np.multiply(E[:, 2], H[:, 0]) - np.multiply(E[:, 0], H[:, 2])) +Pz = np.real(np.multiply(E[:, 0], H[:, 1]) - np.multiply(E[:, 1], H[:, 0])) +Pr = np.sqrt(np.square(Px) + np.square(Py) + np.square(Pz)) + +intensity = input_flux / (4 * r) ** 2 diff_cross_section = ff_r**2 * Pr / intensity -scatt_cross_section_meep = 2*np.pi * np.sum(np.multiply(diff_cross_section,np.sin(angles))) * np.pi/npts -scatt_cross_section_theory = ps.MieQ(n_sphere,1000/frq_cen,2*r*1000,asDict=True,asCrossSection=True)['Csca']*1e-6 # units of um^2 - -print("scatt:, {:.16f} (meep), {:.16f} (theory)".format(scatt_cross_section_meep,scatt_cross_section_theory)) +scatt_cross_section_meep = ( + 2 * np.pi * np.sum(np.multiply(diff_cross_section, np.sin(angles))) * np.pi / npts +) +scatt_cross_section_theory = ( + ps.MieQ(n_sphere, 1000 / frq_cen, 2 * r * 1000, asDict=True, asCrossSection=True)[ + "Csca" + ] + * 1e-6 +) # units of um^2 + +print( + "scatt:, {:.16f} (meep), {:.16f} (theory)".format( + scatt_cross_section_meep, scatt_cross_section_theory + ) +) diff --git a/python/examples/diffracted_planewave.py b/python/examples/diffracted_planewave.py index c9a059db9..572f12443 100644 --- a/python/examples/diffracted_planewave.py +++ b/python/examples/diffracted_planewave.py @@ -1,152 +1,180 @@ ### compute the transmitted diffraction orders of a binary grating using mode decomposition ### based on two different methods: (1) MPB eigensolver and (2) DiffractedPlanewave object. ### Also, verify that the total power in all the orders is equivalent to the Poynting flux. - ### for normal incidence, compute only positive diff. orders (total transmittance <= 0.50) ### for oblique incidence, compute ALL diff. orders (total transmittance <= 1.00) - -import meep as mp -import math import cmath +import math + import numpy as np +import meep as mp + + def binary_grating_diffraction(gp, gh, gdc, theta): - resolution = 50 # pixels/μm + resolution = 50 # pixels/μm - dpml = 1.0 # PML thickness - dsub = 3.0 # substrate thickness - dpad = 3.0 # length of padding between grating and PML - - sx = dpml+dsub+gh+dpad+dpml - sy = gp - - cell_size = mp.Vector3(sx,sy,0) - pml_layers = [mp.PML(thickness=dpml,direction=mp.X)] - - wvl = 0.5 # center wavelength - fcen = 1/wvl # center frequency - df = 0.05*fcen # frequency width - - ng = 1.5 - glass = mp.Medium(index=ng) - - # rotation angle of incident planewave; counter clockwise (CCW) about Z axis, 0 degrees along +X axis - theta_in = math.radians(theta) - - eig_parity = mp.EVEN_Z - - # k (in source medium) with correct length (plane of incidence: XY) - k = mp.Vector3(fcen*ng).rotate(mp.Vector3(z=1), theta_in) - - symmetries = [] - if theta_in == 0: - k = mp.Vector3() - eig_parity += mp.ODD_Y - symmetries = [mp.Mirror(direction=mp.Y,phase=-1)] - - def pw_amp(k,x0): - def _pw_amp(x): - return cmath.exp(1j*2*math.pi*k.dot(x+x0)) - return _pw_amp - - src_pt = mp.Vector3(-0.5*sx+dpml,0,0) - sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df), - component=mp.Hz, - center=src_pt, - size=mp.Vector3(0,sy,0), - amp_func=pw_amp(k,src_pt))] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - k_point=k, - default_material=glass, - sources=sources, - symmetries=symmetries) - - tran_pt = mp.Vector3(0.5*sx-dpml,0,0) - tran_mon = sim.add_flux(fcen, 0, 1, - mp.FluxRegion(center=tran_pt, size=mp.Vector3(0,sy,0))) - - sim.run(until_after_sources=50) - - input_flux = mp.get_fluxes(tran_mon) - - sim.reset_meep() - - geometry = [mp.Block(material=glass, - size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), - center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub),0,0)), - mp.Block(material=glass, - size=mp.Vector3(gh,gdc*gp,mp.inf), - center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh,0,0))] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - geometry=geometry, - k_point=k, - sources=sources, - symmetries=symmetries) - - tran_mon = sim.add_mode_monitor(fcen, 0, 1, - mp.FluxRegion(center=tran_pt, size=mp.Vector3(0,sy,0))) - - sim.run(until_after_sources=100) - - # number of (non-evanescent) transmitted orders - nm_t = np.floor((fcen-k.y)*gp)-np.ceil((-fcen-k.y)*gp) - if theta_in == 0: - nm_t = nm_t/2 - nm_t = int(nm_t)+1 - - bands = range(1,nm_t+1) - - if theta_in == 0: - orders = range(0,nm_t) - else: - orders = range(int(np.ceil((-fcen-k.y)*gp)),int(np.floor((fcen-k.y)*gp))+1) - - eig_sum = 0 - dp_sum = 0 - - for band,order in zip(bands,orders): - res = sim.get_eigenmode_coefficients(tran_mon, [band], eig_parity=eig_parity) - if res is not None: - tran_eig = abs(res.alpha[0,0,0])**2/input_flux[0] - if theta_in == 0: - tran_eig = 0.5*tran_eig - else: - tran_eig = 0 - eig_sum += tran_eig - - res = sim.get_eigenmode_coefficients(tran_mon, mp.DiffractedPlanewave((0,order,0),mp.Vector3(0,1,0),0,1)) - if res is not None: - tran_dp = abs(res.alpha[0,0,0])**2/input_flux[0] - if (theta_in == 0) and (order == 0): - tran_dp = 0.5*tran_dp - else: - tran_dp = 0 - dp_sum += tran_dp + dpml = 1.0 # PML thickness + dsub = 3.0 # substrate thickness + dpad = 3.0 # length of padding between grating and PML + + sx = dpml + dsub + gh + dpad + dpml + sy = gp + + cell_size = mp.Vector3(sx, sy, 0) + pml_layers = [mp.PML(thickness=dpml, direction=mp.X)] + wvl = 0.5 # center wavelength + fcen = 1 / wvl # center frequency + df = 0.05 * fcen # frequency width + + ng = 1.5 + glass = mp.Medium(index=ng) + + # rotation angle of incident planewave; counter clockwise (CCW) about Z axis, 0 degrees along +X axis + theta_in = math.radians(theta) + + eig_parity = mp.EVEN_Z + + # k (in source medium) with correct length (plane of incidence: XY) + k = mp.Vector3(fcen * ng).rotate(mp.Vector3(z=1), theta_in) + + symmetries = [] + if theta_in == 0: + k = mp.Vector3() + eig_parity += mp.ODD_Y + symmetries = [mp.Mirror(direction=mp.Y, phase=-1)] + + def pw_amp(k, x0): + def _pw_amp(x): + return cmath.exp(1j * 2 * math.pi * k.dot(x + x0)) + + return _pw_amp + + src_pt = mp.Vector3(-0.5 * sx + dpml, 0, 0) + sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=mp.Hz, + center=src_pt, + size=mp.Vector3(0, sy, 0), + amp_func=pw_amp(k, src_pt), + ) + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + k_point=k, + default_material=glass, + sources=sources, + symmetries=symmetries, + ) + + tran_pt = mp.Vector3(0.5 * sx - dpml, 0, 0) + tran_mon = sim.add_flux( + fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0, sy, 0)) + ) + + sim.run(until_after_sources=50) + + input_flux = mp.get_fluxes(tran_mon) + + sim.reset_meep() + + geometry = [ + mp.Block( + material=glass, + size=mp.Vector3(dpml + dsub, mp.inf, mp.inf), + center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub), 0, 0), + ), + mp.Block( + material=glass, + size=mp.Vector3(gh, gdc * gp, mp.inf), + center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh, 0, 0), + ), + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + geometry=geometry, + k_point=k, + sources=sources, + symmetries=symmetries, + ) + + tran_mon = sim.add_mode_monitor( + fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0, sy, 0)) + ) + + sim.run(until_after_sources=100) + + # number of (non-evanescent) transmitted orders + nm_t = np.floor((fcen - k.y) * gp) - np.ceil((-fcen - k.y) * gp) if theta_in == 0: - err = abs(tran_eig-tran_dp)/tran_eig - print("tran:, {:2d}, {:.8f}, {:2d}, {:.8f}, {:.8f}".format(band,tran_eig,order,tran_dp,err)) + nm_t = nm_t / 2 + nm_t = int(nm_t) + 1 + + bands = range(1, nm_t + 1) + + if theta_in == 0: + orders = range(0, nm_t) else: - print("tran:, {:2d}, {:.8f}, {:2d}, {:.8f}".format(band,tran_eig,order,tran_dp)) - - flux = mp.get_fluxes(tran_mon) - t_flux = flux[0]/input_flux[0] - if (theta_in == 0): - t_flux = 0.5*t_flux - - err = abs(dp_sum-t_flux)/t_flux - print("flux:, {:.8f}, {:.8f}, {:.8f}, {:.8f}".format(eig_sum, - dp_sum, - t_flux, - err)) - -if __name__ == '__main__': - binary_grating_diffraction(2.6,0.4,0.3,0) - binary_grating_diffraction(3.7,0.6,0.4,13.5) + orders = range( + int(np.ceil((-fcen - k.y) * gp)), int(np.floor((fcen - k.y) * gp)) + 1 + ) + + eig_sum = 0 + dp_sum = 0 + + for band, order in zip(bands, orders): + res = sim.get_eigenmode_coefficients(tran_mon, [band], eig_parity=eig_parity) + if res is not None: + tran_eig = abs(res.alpha[0, 0, 0]) ** 2 / input_flux[0] + if theta_in == 0: + tran_eig = 0.5 * tran_eig + else: + tran_eig = 0 + eig_sum += tran_eig + + res = sim.get_eigenmode_coefficients( + tran_mon, mp.DiffractedPlanewave((0, order, 0), mp.Vector3(0, 1, 0), 0, 1) + ) + if res is not None: + tran_dp = abs(res.alpha[0, 0, 0]) ** 2 / input_flux[0] + if (theta_in == 0) and (order == 0): + tran_dp = 0.5 * tran_dp + else: + tran_dp = 0 + dp_sum += tran_dp + + if theta_in == 0: + err = abs(tran_eig - tran_dp) / tran_eig + print( + "tran:, {:2d}, {:.8f}, {:2d}, {:.8f}, {:.8f}".format( + band, tran_eig, order, tran_dp, err + ) + ) + else: + print( + "tran:, {:2d}, {:.8f}, {:2d}, {:.8f}".format( + band, tran_eig, order, tran_dp + ) + ) + + flux = mp.get_fluxes(tran_mon) + t_flux = flux[0] / input_flux[0] + if theta_in == 0: + t_flux = 0.5 * t_flux + + err = abs(dp_sum - t_flux) / t_flux + print(f"flux:, {eig_sum:.8f}, {dp_sum:.8f}, {t_flux:.8f}, {err:.8f}") + + +if __name__ == "__main__": + binary_grating_diffraction(2.6, 0.4, 0.3, 0) + binary_grating_diffraction(3.7, 0.6, 0.4, 13.5) diff --git a/python/examples/eps_fit_lorentzian.py b/python/examples/eps_fit_lorentzian.py index 8b825db69..68852eb65 100644 --- a/python/examples/eps_fit_lorentzian.py +++ b/python/examples/eps_fit_lorentzian.py @@ -1,98 +1,109 @@ # fit complex refractive index profile over broad bandwidth imported from # a file to a sum of Lorentzian polarizability terms using gradient-based # optimization via NLopt (nlopt.readthedocs.io) - +import matplotlib import nlopt import numpy as np -import matplotlib -matplotlib.use('agg') + +matplotlib.use("agg") import matplotlib.pyplot as plt + import meep as mp def lorentzfunc(p, x): """Return the complex ε profile given a set of Lorentzian parameters p - (σ_0, ω_0, γ_0, σ_1, ω_1, γ_1, ...) for a set of frequencies x. + (σ_0, ω_0, γ_0, σ_1, ω_1, γ_1, ...) for a set of frequencies x. """ - N = int(len(p)/3) + N = len(p) // 3 y = np.zeros(len(x)) for n in range(N): - A_n = p[3*n+0] - x_n = p[3*n+1] - g_n = p[3*n+2] - y = y + A_n/(np.square(x_n) - np.square(x) - 1j*x*g_n) + A_n = p[3 * n + 0] + x_n = p[3 * n + 1] + g_n = p[3 * n + 2] + y = y + A_n / (np.square(x_n) - np.square(x) - 1j * x * g_n) return y + def lorentzerr(p, x, y, grad): """Return the error (or residual or loss funnction) as the L2 norm - of the difference of ε(p,x) and y over a set of frequencies x as - well as the gradient of this error with respect to each Lorentzian - polarizability parameter in p and saving the result in grad. + of the difference of ε(p,x) and y over a set of frequencies x as + well as the gradient of this error with respect to each Lorentzian + polarizability parameter in p and saving the result in grad. """ - N = int(len(p)/3) + N = len(p) // 3 yp = lorentzfunc(p, x) val = np.sum(np.square(abs(y - yp))) for n in range(N): - A_n = p[3*n+0] - x_n = p[3*n+1] - g_n = p[3*n+2] - d = 1 / (np.square(x_n) - np.square(x) - 1j*x*g_n) + A_n = p[3 * n + 0] + x_n = p[3 * n + 1] + g_n = p[3 * n + 2] + d = 1 / (np.square(x_n) - np.square(x) - 1j * x * g_n) if grad.size > 0: - grad[3*n+0] = 2 * np.real(np.dot(np.conj(yp - y), d)) - grad[3*n+1] = -4 * x_n * A_n * np.real(np.dot(np.conj(yp - y), np.square(d))) - grad[3*n+2] = -2 * A_n * np.imag(np.dot(np.conj(yp - y), x * np.square(d))) + grad[3 * n + 0] = 2 * np.real(np.dot(np.conj(yp - y), d)) + grad[3 * n + 1] = ( + -4 * x_n * A_n * np.real(np.dot(np.conj(yp - y), np.square(d))) + ) + grad[3 * n + 2] = ( + -2 * A_n * np.imag(np.dot(np.conj(yp - y), x * np.square(d))) + ) return val + def lorentzfit(p0, x, y, alg=nlopt.LD_LBFGS, tol=1e-25, maxeval=10000): """Return the optimal Lorentzian polarizability parameters and error - which minimize the error in ε(p0,x) relative to y for an initial - set of Lorentzian polarizability parameters p0 over a set of - frequencies x using the NLopt algorithm alg for a relative - tolerance tol and a maximum number of iterations maxeval. + which minimize the error in ε(p0,x) relative to y for an initial + set of Lorentzian polarizability parameters p0 over a set of + frequencies x using the NLopt algorithm alg for a relative + tolerance tol and a maximum number of iterations maxeval. """ opt = nlopt.opt(alg, len(p0)) opt.set_ftol_rel(tol) opt.set_maxeval(maxeval) opt.set_lower_bounds(np.zeros(len(p0))) - opt.set_upper_bounds(float('inf')*np.ones(len(p0))) + opt.set_upper_bounds(float("inf") * np.ones(len(p0))) opt.set_min_objective(lambda p, grad: lorentzerr(p, x, y, grad)) local_opt = nlopt.opt(nlopt.LD_LBFGS, len(p0)) local_opt.set_ftol_rel(1e-10) local_opt.set_xtol_rel(1e-8) opt.set_local_optimizer(local_opt) - popt = opt.optimize(p0); + popt = opt.optimize(p0) minf = opt.last_optimum_value() return popt, minf # format of input data file is three comma-separated columns: # wavelength (nm), real(n), complex(n) -mydata = np.genfromtxt('mymaterial.csv',delimiter=',') -n = mydata[:,1] + 1j*mydata[:,2] -eps_inf = 1.1 # should be >= 1.0 for stability and chosen such that np.amin(np.real(eps)) is ~1.0 +mydata = np.genfromtxt("mymaterial.csv", delimiter=",") +n = mydata[:, 1] + 1j * mydata[:, 2] +eps_inf = 1.1 # should be >= 1.0 for stability and chosen such that np.amin(np.real(eps)) is ~1.0 eps = np.square(n) - eps_inf -wl = mydata[:,0] -wl_min = 399 # minimum wavelength (units of nm) -wl_max = 701 # maximum wavelength (units of nm) +wl = mydata[:, 0] +wl_min = 399 # minimum wavelength (units of nm) +wl_max = 701 # maximum wavelength (units of nm) start_idx = np.where(wl > wl_min) idx_start = start_idx[0][0] end_idx = np.where(wl < wl_max) -idx_end = end_idx[0][-1]+1 -freqs = 1000/wl # units of 1/μm +idx_end = end_idx[0][-1] + 1 +freqs = 1000 / wl # units of 1/μm freqs_reduced = freqs[idx_start:idx_end] wl_reduced = wl[idx_start:idx_end] eps_reduced = eps[idx_start:idx_end] num_lorentzians = 2 -num_repeat = 30 # number of times to repeat local optimization with random initial values -ps = np.zeros((num_repeat,3*num_lorentzians)) +num_repeat = ( + 30 # number of times to repeat local optimization with random initial values +) +ps = np.zeros((num_repeat, 3 * num_lorentzians)) mins = np.zeros(num_repeat) for m in range(num_repeat): # specify Lorentzian polarizability terms each consisting of three parameters (σ_0, ω_0, γ_0) # with random initial values # note: for the case of no absorption, set γ (every third parameter) to zero - p_rand = [10**(np.random.random()) for _ in range(3*num_lorentzians)] - ps[m,:], mins[m] = lorentzfit(p_rand, freqs_reduced, eps_reduced, nlopt.LD_MMA, 1e-25, 50000) + p_rand = [10 ** (np.random.random()) for _ in range(3 * num_lorentzians)] + ps[m, :], mins[m] = lorentzfit( + p_rand, freqs_reduced, eps_reduced, nlopt.LD_MMA, 1e-25, 50000 + ) print(f"iteration{m}:, {ps[m,:]}, {mins[m]}") # find the best performing set of parameters @@ -104,42 +115,49 @@ def lorentzfit(p0, x, y, alg=nlopt.LD_LBFGS, tol=1e-25, maxeval=10000): E_susceptibilities = [] for n in range(num_lorentzians): - mymaterial_freq = ps[idx_opt][0][3*n+1] - mymaterial_gamma = ps[idx_opt][0][3*n+2] + mymaterial_freq = ps[idx_opt][0][3 * n + 1] + mymaterial_gamma = ps[idx_opt][0][3 * n + 2] if mymaterial_freq == 0: - mymaterial_sigma = ps[idx_opt][0][3*n+0] - E_susceptibilities.append(mp.DrudeSusceptibility(frequency=1.0, - gamma=mymaterial_gamma, - sigma=mymaterial_sigma)) + mymaterial_sigma = ps[idx_opt][0][3 * n + 0] + E_susceptibilities.append( + mp.DrudeSusceptibility( + frequency=1.0, gamma=mymaterial_gamma, sigma=mymaterial_sigma + ) + ) else: - mymaterial_sigma = ps[idx_opt][0][3*n+0] / mymaterial_freq**2 - E_susceptibilities.append(mp.LorentzianSusceptibility(frequency=mymaterial_freq, - gamma=mymaterial_gamma, - sigma=mymaterial_sigma)) + mymaterial_sigma = ps[idx_opt][0][3 * n + 0] / mymaterial_freq**2 + E_susceptibilities.append( + mp.LorentzianSusceptibility( + frequency=mymaterial_freq, + gamma=mymaterial_gamma, + sigma=mymaterial_sigma, + ) + ) -mymaterial = mp.Medium(epsilon=eps_inf, - E_susceptibilities=E_susceptibilities) +mymaterial = mp.Medium(epsilon=eps_inf, E_susceptibilities=E_susceptibilities) # plot the fit and the actual data for comparison mymaterial_eps = [mymaterial.epsilon(f)[0][0] for f in freqs_reduced] -plt.subplot(1,2,1) -plt.plot(wl_reduced,np.real(eps_reduced),'bo-',label='actual') -plt.plot(wl_reduced,np.real(mymaterial_eps),'ro-',label='fit') -plt.xlabel('wavelength (nm)') -plt.ylabel(r'real($\epsilon$)') +plt.subplot(1, 2, 1) +plt.plot(wl_reduced, np.real(eps_reduced), "bo-", label="actual") +plt.plot(wl_reduced, np.real(mymaterial_eps), "ro-", label="fit") +plt.xlabel("wavelength (nm)") +plt.ylabel(r"real($\epsilon$)") plt.legend() -plt.subplot(1,2,2) -plt.plot(wl_reduced,np.imag(eps_reduced),'bo-',label='actual') -plt.plot(wl_reduced,np.imag(mymaterial_eps),'ro-',label='fit') -plt.xlabel('wavelength (nm)') -plt.ylabel(r'imag($\epsilon$)') +plt.subplot(1, 2, 2) +plt.plot(wl_reduced, np.imag(eps_reduced), "bo-", label="actual") +plt.plot(wl_reduced, np.imag(mymaterial_eps), "ro-", label="fit") +plt.xlabel("wavelength (nm)") +plt.ylabel(r"imag($\epsilon$)") plt.legend() -plt.suptitle('Comparison of Actual Material Data and Fit using Drude-Lorentzian Susceptibility') +plt.suptitle( + "Comparison of Actual Material Data and Fit using Drude-Lorentzian Susceptibility" +) plt.subplots_adjust(wspace=0.3) -plt.savefig('eps_fit_sample.png',dpi=150,bbox_inches='tight') +plt.savefig("eps_fit_sample.png", dpi=150, bbox_inches="tight") diff --git a/python/examples/faraday-rotation.py b/python/examples/faraday-rotation.py index 449c18b10..9a607d381 100644 --- a/python/examples/faraday-rotation.py +++ b/python/examples/faraday-rotation.py @@ -1,16 +1,18 @@ # From the Meep tutorial: plotting Faraday rotation of a linearly polarized plane wave - import meep as mp ## Parameters for a gyrotropic Lorentzian medium -epsn = 1.5 # background permittivity -f0 = 1.0 # natural frequency -gamma = 1e-6 # damping rate -sn = 0.1 # sigma parameter -b0 = 0.15 # magnitude of bias vector +epsn = 1.5 # background permittivity +f0 = 1.0 # natural frequency +gamma = 1e-6 # damping rate +sn = 0.1 # sigma parameter +b0 = 0.15 # magnitude of bias vector -susc = [mp.GyrotropicLorentzianSusceptibility(frequency=f0, gamma=gamma, sigma=sn, - bias=mp.Vector3(0, 0, b0))] +susc = [ + mp.GyrotropicLorentzianSusceptibility( + frequency=f0, gamma=gamma, sigma=sn, bias=mp.Vector3(0, 0, b0) + ) +] mat = mp.Medium(epsilon=epsn, mu=1, E_susceptibilities=susc) ## Set up and run the Meep simulation: @@ -20,50 +22,64 @@ fsrc, src_z = 0.8, -8.5 pml_layers = [mp.PML(thickness=1.0, direction=mp.Z)] -sources = [mp.Source(mp.ContinuousSource(frequency=fsrc), - component=mp.Ex, center=mp.Vector3(0, 0, src_z))] +sources = [ + mp.Source( + mp.ContinuousSource(frequency=fsrc), + component=mp.Ex, + center=mp.Vector3(0, 0, src_z), + ) +] -sim = mp.Simulation(cell_size=cell, geometry=[], sources=sources, - boundary_layers=pml_layers, - default_material=mat, resolution=50) +sim = mp.Simulation( + cell_size=cell, + geometry=[], + sources=sources, + boundary_layers=pml_layers, + default_material=mat, + resolution=50, +) sim.run(until=tmax) +import matplotlib.pyplot as plt + ## Plot results: import numpy as np -import matplotlib.pyplot as plt ex_data = sim.get_efield_x().real ey_data = sim.get_efield_y().real -z = np.linspace(-L/2, L/2, len(ex_data)) +z = np.linspace(-L / 2, L / 2, len(ex_data)) plt.figure(1) -plt.plot(z, ex_data, label='Ex') -plt.plot(z, ey_data, label='Ey') -plt.xlim(-L/2, L/2); plt.xlabel('z') +plt.plot(z, ex_data, label="Ex") +plt.plot(z, ey_data, label="Ey") +plt.xlim(-L / 2, L / 2) +plt.xlabel("z") plt.legend() ## Comparison with analytic result: -dfsq = (f0**2 - 1j*fsrc*gamma - fsrc**2) -eperp = epsn + sn * f0**2 * dfsq / (dfsq**2 - (fsrc*b0)**2) -eta = sn * f0**2 * fsrc * b0 / (dfsq**2 - (fsrc*b0)**2) +dfsq = f0**2 - 1j * fsrc * gamma - fsrc**2 +eperp = epsn + sn * f0**2 * dfsq / (dfsq**2 - (fsrc * b0) ** 2) +eta = sn * f0**2 * fsrc * b0 / (dfsq**2 - (fsrc * b0) ** 2) -k_gyro = 2*np.pi*fsrc * np.sqrt(0.5*(eperp - np.sqrt(eperp**2 - eta**2))) +k_gyro = 2 * np.pi * fsrc * np.sqrt(0.5 * (eperp - np.sqrt(eperp**2 - eta**2))) Ex_theory = 0.37 * np.cos(k_gyro * (z - src_z)).real Ey_theory = 0.37 * np.sin(k_gyro * (z - src_z)).real plt.figure(2) -plt.subplot(2,1,1) -plt.plot(z, ex_data, label='Ex (MEEP)') -plt.plot(z, Ex_theory, 'k--') -plt.plot(z, -Ex_theory, 'k--', label='Ex envelope (theory)') -plt.xlim(-L/2, L/2); plt.xlabel('z') -plt.legend(loc='lower right') +plt.subplot(2, 1, 1) +plt.plot(z, ex_data, label="Ex (MEEP)") +plt.plot(z, Ex_theory, "k--") +plt.plot(z, -Ex_theory, "k--", label="Ex envelope (theory)") +plt.xlim(-L / 2, L / 2) +plt.xlabel("z") +plt.legend(loc="lower right") -plt.subplot(2,1,2) -plt.plot(z, ey_data, label='Ey (MEEP)') -plt.plot(z, Ey_theory, 'k--') -plt.plot(z, -Ey_theory, 'k--', label='Ey envelope (theory)') -plt.xlim(-L/2, L/2); plt.xlabel('z') -plt.legend(loc='lower right') +plt.subplot(2, 1, 2) +plt.plot(z, ey_data, label="Ey (MEEP)") +plt.plot(z, Ey_theory, "k--") +plt.plot(z, -Ey_theory, "k--", label="Ey envelope (theory)") +plt.xlim(-L / 2, L / 2) +plt.xlabel("z") +plt.legend(loc="lower right") plt.tight_layout() plt.show() diff --git a/python/examples/finite_grating.py b/python/examples/finite_grating.py index e1cdf1eee..e83b25a19 100644 --- a/python/examples/finite_grating.py +++ b/python/examples/finite_grating.py @@ -1,27 +1,29 @@ -import meep as mp -import numpy as np import math + import matplotlib.pyplot as plt +import numpy as np + +import meep as mp # True: plot the scattered fields in the extended air region adjacent to the grating # False: plot the diffraction spectra based on a 1d cross section of the scattered fields field_profile = True -resolution = 50 # pixels/μm +resolution = 50 # pixels/μm -dpml = 1.0 # PML thickness -dsub = 2.0 # substrate thickness -dpad = 1.0 # flat-surface padding -gp = 1.0 # grating periodicity -gh = 0.5 # grating height -gdc = 0.5 # grating duty cycle -num_cells = 5 # number of grating unit cells +dpml = 1.0 # PML thickness +dsub = 2.0 # substrate thickness +dpad = 1.0 # flat-surface padding +gp = 1.0 # grating periodicity +gh = 0.5 # grating height +gdc = 0.5 # grating duty cycle +num_cells = 5 # number of grating unit cells # air region thickness adjacent to grating dair = 10 if field_profile else dpad -wvl = 0.5 # center wavelength -fcen = 1/wvl # center frequency +wvl = 0.5 # center wavelength +fcen = 1 / wvl # center frequency k_point = mp.Vector3() @@ -29,32 +31,49 @@ pml_layers = [mp.PML(thickness=dpml)] -symmetries=[mp.Mirror(mp.Y)] - -sx = dpml+dsub+gh+dair+dpml -sy = dpml+dpad+num_cells*gp+dpad+dpml -cell_size = mp.Vector3(sx,sy) - -src_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub) -sources = [mp.Source(mp.GaussianSource(fcen,fwidth=0.2*fcen,is_integrated=True), - component=mp.Ez, - center=src_pt, - size=mp.Vector3(y=sy))] - -geometry = [mp.Block(material=glass, - size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), - center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub)))] - -sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - geometry=geometry, - k_point=k_point, - sources=sources, - symmetries=symmetries) - -mon_pt = mp.Vector3(0.5*sx-dpml-0.5*dair) -near_fields = sim.add_dft_fields([mp.Ez], fcen, 0, 1, center=mon_pt, size=mp.Vector3(dair if field_profile else 0,sy-2*dpml)) +symmetries = [mp.Mirror(mp.Y)] + +sx = dpml + dsub + gh + dair + dpml +sy = dpml + dpad + num_cells * gp + dpad + dpml +cell_size = mp.Vector3(sx, sy) + +src_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * dsub) +sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=0.2 * fcen, is_integrated=True), + component=mp.Ez, + center=src_pt, + size=mp.Vector3(y=sy), + ) +] + +geometry = [ + mp.Block( + material=glass, + size=mp.Vector3(dpml + dsub, mp.inf, mp.inf), + center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub)), + ) +] + +sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + geometry=geometry, + k_point=k_point, + sources=sources, + symmetries=symmetries, +) + +mon_pt = mp.Vector3(0.5 * sx - dpml - 0.5 * dair) +near_fields = sim.add_dft_fields( + [mp.Ez], + fcen, + 0, + 1, + center=mon_pt, + size=mp.Vector3(dair if field_profile else 0, sy - 2 * dpml), +) sim.run(until_after_sources=100) @@ -62,63 +81,86 @@ sim.reset_meep() -for j in range(num_cells): - geometry.append(mp.Block(material=glass, - size=mp.Vector3(gh,gdc*gp,mp.inf), - center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh,-0.5*sy+dpml+dpad+(j+0.5)*gp))) - -sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - geometry=geometry, - k_point=k_point, - sources=sources, - symmetries=symmetries) - -near_fields = sim.add_dft_fields([mp.Ez], fcen, 0, 1, center=mon_pt, size=mp.Vector3(dair if field_profile else 0,sy-2*dpml)) +geometry.extend( + mp.Block( + material=glass, + size=mp.Vector3(gh, gdc * gp, mp.inf), + center=mp.Vector3( + -0.5 * sx + dpml + dsub + 0.5 * gh, -0.5 * sy + dpml + dpad + (j + 0.5) * gp + ), + ) + for j in range(num_cells) +) +sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + geometry=geometry, + k_point=k_point, + sources=sources, + symmetries=symmetries, +) + +near_fields = sim.add_dft_fields( + [mp.Ez], + fcen, + 0, + 1, + center=mon_pt, + size=mp.Vector3(dair if field_profile else 0, sy - 2 * dpml), +) sim.run(until_after_sources=100) grating_dft = sim.get_dft_array(near_fields, mp.Ez, 0) -scattered_field = grating_dft-flat_dft -scattered_amplitude = np.abs(scattered_field)**2 +scattered_field = grating_dft - flat_dft +scattered_amplitude = np.abs(scattered_field) ** 2 -[x,y,z,w] = sim.get_array_metadata(dft_cell=near_fields) +[x, y, z, w] = sim.get_array_metadata(dft_cell=near_fields) if field_profile: - if mp.am_master(): - plt.figure(dpi=150) - plt.pcolormesh(x,y,np.rot90(scattered_amplitude),cmap='inferno',shading='gouraud',vmin=0,vmax=scattered_amplitude.max()) - plt.gca().set_aspect('equal') - plt.xlabel('x (μm)') - plt.ylabel('y (μm)') - - # ensure that the height of the colobar matches that of the plot - from mpl_toolkits.axes_grid1 import make_axes_locatable - divider = make_axes_locatable(plt.gca()) - cax = divider.append_axes("right", size="5%", pad=0.05) - plt.colorbar(cax=cax) - plt.tight_layout() - plt.show() + if mp.am_master(): + plt.figure(dpi=150) + plt.pcolormesh( + x, + y, + np.rot90(scattered_amplitude), + cmap="inferno", + shading="gouraud", + vmin=0, + vmax=scattered_amplitude.max(), + ) + plt.gca().set_aspect("equal") + plt.xlabel("x (μm)") + plt.ylabel("y (μm)") + + # ensure that the height of the colobar matches that of the plot + from mpl_toolkits.axes_grid1 import make_axes_locatable + + divider = make_axes_locatable(plt.gca()) + cax = divider.append_axes("right", size="5%", pad=0.05) + plt.colorbar(cax=cax) + plt.tight_layout() + plt.show() else: - ky = np.fft.fftshift(np.fft.fftfreq(len(scattered_field), 1/resolution)) - FT_scattered_field = np.fft.fftshift(np.fft.fft(scattered_field)) - if mp.am_master(): - plt.figure(dpi=150) - plt.subplots_adjust(hspace=0.3) - - plt.subplot(2,1,1) - plt.plot(y,scattered_amplitude,'bo-') - plt.xlabel("y (μm)") - plt.ylabel("field amplitude") - - plt.subplot(2,1,2) - plt.plot(ky,np.abs(FT_scattered_field)**2,'ro-') - plt.gca().ticklabel_format(axis='y',style='sci',scilimits=(0,0)) - plt.xlabel(r'wavevector k$_y$, 2π (μm)$^{-1}$') - plt.ylabel("Fourier transform") - plt.gca().set_xlim([-3, 3]) - - plt.tight_layout(pad=1.0) - plt.show() + ky = np.fft.fftshift(np.fft.fftfreq(len(scattered_field), 1 / resolution)) + FT_scattered_field = np.fft.fftshift(np.fft.fft(scattered_field)) + if mp.am_master(): + plt.figure(dpi=150) + plt.subplots_adjust(hspace=0.3) + + plt.subplot(2, 1, 1) + plt.plot(y, scattered_amplitude, "bo-") + plt.xlabel("y (μm)") + plt.ylabel("field amplitude") + + plt.subplot(2, 1, 2) + plt.plot(ky, np.abs(FT_scattered_field) ** 2, "ro-") + plt.gca().ticklabel_format(axis="y", style="sci", scilimits=(0, 0)) + plt.xlabel(r"wavevector k$_y$, 2π (μm)$^{-1}$") + plt.ylabel("Fourier transform") + plt.gca().set_xlim([-3, 3]) + + plt.tight_layout(pad=1.0) + plt.show() diff --git a/python/examples/gaussian-beam.py b/python/examples/gaussian-beam.py index bc2747718..42c00f4d4 100644 --- a/python/examples/gaussian-beam.py +++ b/python/examples/gaussian-beam.py @@ -1,42 +1,55 @@ ## launch a Gaussian beam - -import meep as mp import math + import matplotlib -matplotlib.use('agg') + +import meep as mp + +matplotlib.use("agg") import matplotlib.pyplot as plt s = 14 resolution = 50 dpml = 2 -cell_size = mp.Vector3(s,s) +cell_size = mp.Vector3(s, s) boundary_layers = [mp.PML(thickness=dpml)] -beam_x0 = mp.Vector3(0,3.0) # beam focus (relative to source center) +beam_x0 = mp.Vector3(0, 3.0) # beam focus (relative to source center) rot_angle = 0 # CCW rotation angle about z axis (0: +y axis) -beam_kdir = mp.Vector3(0,1,0).rotate(mp.Vector3(0,0,1),math.radians(rot_angle)) # beam propagation direction +beam_kdir = mp.Vector3(0, 1, 0).rotate( + mp.Vector3(0, 0, 1), math.radians(rot_angle) +) # beam propagation direction beam_w0 = 0.8 # beam waist radius -beam_E0 = mp.Vector3(0,0,1) +beam_E0 = mp.Vector3(0, 0, 1) fcen = 1 -sources = [mp.GaussianBeamSource(src=mp.ContinuousSource(fcen), - center=mp.Vector3(0,-0.5*s+dpml+1.0), - size=mp.Vector3(s), - beam_x0=beam_x0, - beam_kdir=beam_kdir, - beam_w0=beam_w0, - beam_E0=beam_E0)] - -sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=boundary_layers, - sources=sources) +sources = [ + mp.GaussianBeamSource( + src=mp.ContinuousSource(fcen), + center=mp.Vector3(0, -0.5 * s + dpml + 1.0), + size=mp.Vector3(s), + beam_x0=beam_x0, + beam_kdir=beam_kdir, + beam_w0=beam_w0, + beam_E0=beam_E0, + ) +] + +sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=boundary_layers, + sources=sources, +) sim.run(until=20) -sim.plot2D(fields=mp.Ez, - output_plane=mp.Volume(center=mp.Vector3(), - size=mp.Vector3(s-2*dpml,s-2*dpml))) +sim.plot2D( + fields=mp.Ez, + output_plane=mp.Volume( + center=mp.Vector3(), size=mp.Vector3(s - 2 * dpml, s - 2 * dpml) + ), +) -plt.savefig('Ez_angle{}.png'.format(rot_angle),bbox_inches='tight',pad_inches=0) +plt.savefig(f"Ez_angle{rot_angle}.png", bbox_inches="tight", pad_inches=0) diff --git a/python/examples/grating2d_triangular_lattice.py b/python/examples/grating2d_triangular_lattice.py index 6ea00dc7a..44e7bd916 100644 --- a/python/examples/grating2d_triangular_lattice.py +++ b/python/examples/grating2d_triangular_lattice.py @@ -2,18 +2,19 @@ # triangular lattice using a rectangular supercell and verifies # that only the diffraction orders of the actual unit cell # produce non-zero power (up to discretization error) - -import meep as mp import math + import numpy as np +import meep as mp + resolution = 100 # pixels/μm ng = 1.5 glass = mp.Medium(index=ng) wvl = 0.5 # wavelength -fcen = 1/wvl +fcen = 1 / wvl # rectangular supercell sx = 1.0 @@ -25,63 +26,83 @@ hcyl = 0.5 # cylinder height rcyl = 0.1 # cylinder radius -sz = dpml+dsub+hcyl+dair+dpml +sz = dpml + dsub + hcyl + dair + dpml -cell_size = mp.Vector3(sx,sy,sz) +cell_size = mp.Vector3(sx, sy, sz) -boundary_layers = [mp.PML(thickness=dpml,direction=mp.Z)] +boundary_layers = [mp.PML(thickness=dpml, direction=mp.Z)] # periodic boundary conditions k_point = mp.Vector3() -src_pt = mp.Vector3(0,0,-0.5*sz+dpml) -sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.1*fcen), - size=mp.Vector3(sx,sy,0), - center=src_pt, - component=mp.Ex)] - -substrate = [mp.Block(size=mp.Vector3(mp.inf,mp.inf,dpml+dsub), - center=mp.Vector3(0,0,-0.5*sz+0.5*(dpml+dsub)), - material=glass)] - -cyl_grating = [mp.Cylinder(center=mp.Vector3(0,0,-0.5*sz+dpml+dsub+0.5*hcyl), - radius=rcyl, - height=hcyl, - material=glass), - mp.Cylinder(center=mp.Vector3(0.5*sx,0.5*sy,-0.5*sz+dpml+dsub+0.5*hcyl), - radius=rcyl, - height=hcyl, - material=glass), - mp.Cylinder(center=mp.Vector3(-0.5*sx,0.5*sy,-0.5*sz+dpml+dsub+0.5*hcyl), - radius=rcyl, - height=hcyl, - material=glass), - mp.Cylinder(center=mp.Vector3(-0.5*sx,-0.5*sy,-0.5*sz+dpml+dsub+0.5*hcyl), - radius=rcyl, - height=hcyl, - material=glass), - mp.Cylinder(center=mp.Vector3(0.5*sx,-0.5*sy,-0.5*sz+dpml+dsub+0.5*hcyl), - radius=rcyl, - height=hcyl, - material=glass)] +src_pt = mp.Vector3(0, 0, -0.5 * sz + dpml) +sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=0.1 * fcen), + size=mp.Vector3(sx, sy, 0), + center=src_pt, + component=mp.Ex, + ) +] + +substrate = [ + mp.Block( + size=mp.Vector3(mp.inf, mp.inf, dpml + dsub), + center=mp.Vector3(0, 0, -0.5 * sz + 0.5 * (dpml + dsub)), + material=glass, + ) +] + +cyl_grating = [ + mp.Cylinder( + center=mp.Vector3(0, 0, -0.5 * sz + dpml + dsub + 0.5 * hcyl), + radius=rcyl, + height=hcyl, + material=glass, + ), + mp.Cylinder( + center=mp.Vector3(0.5 * sx, 0.5 * sy, -0.5 * sz + dpml + dsub + 0.5 * hcyl), + radius=rcyl, + height=hcyl, + material=glass, + ), + mp.Cylinder( + center=mp.Vector3(-0.5 * sx, 0.5 * sy, -0.5 * sz + dpml + dsub + 0.5 * hcyl), + radius=rcyl, + height=hcyl, + material=glass, + ), + mp.Cylinder( + center=mp.Vector3(-0.5 * sx, -0.5 * sy, -0.5 * sz + dpml + dsub + 0.5 * hcyl), + radius=rcyl, + height=hcyl, + material=glass, + ), + mp.Cylinder( + center=mp.Vector3(0.5 * sx, -0.5 * sy, -0.5 * sz + dpml + dsub + 0.5 * hcyl), + radius=rcyl, + height=hcyl, + material=glass, + ), +] geometry = substrate + cyl_grating -sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - sources=sources, - geometry=geometry, - boundary_layers=boundary_layers, - k_point=k_point) +sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + sources=sources, + geometry=geometry, + boundary_layers=boundary_layers, + k_point=k_point, +) -tran_pt = mp.Vector3(0,0,0.5*sz-dpml) -tran_flux = sim.add_mode_monitor(fcen, - 0, - 1, - mp.ModeRegion(center=tran_pt, - size=mp.Vector3(sx,sy,0))) +tran_pt = mp.Vector3(0, 0, 0.5 * sz - dpml) +tran_flux = sim.add_mode_monitor( + fcen, 0, 1, mp.ModeRegion(center=tran_pt, size=mp.Vector3(sx, sy, 0)) +) -sim.run(until_after_sources=mp.stop_when_fields_decayed(20,mp.Ex,src_pt,1e-6)) +sim.run(until_after_sources=mp.stop_when_fields_decayed(20, mp.Ex, src_pt, 1e-6)) # diffraction order of unit cell (triangular lattice) mx = 0 @@ -92,14 +113,12 @@ # only even orders should produce nonzero power nx = mx for ny in range(4): - kz2 = fcen**2-(nx/sx)**2-(ny/sy)**2 + kz2 = fcen**2 - (nx / sx) ** 2 - (ny / sy) ** 2 if kz2 > 0: - res = sim.get_eigenmode_coefficients(tran_flux, - mp.DiffractedPlanewave((nx,ny,0), - mp.Vector3(0,1,0), - 1, - 0)) + res = sim.get_eigenmode_coefficients( + tran_flux, mp.DiffractedPlanewave((nx, ny, 0), mp.Vector3(0, 1, 0), 1, 0) + ) t_coeffs = res.alpha - tran = abs(t_coeffs[0,0,0])**2 + tran = abs(t_coeffs[0, 0, 0]) ** 2 - print("order:, {}, {}, {:.5f}".format(nx,ny,tran)) + print(f"order:, {nx}, {ny}, {tran:.5f}") diff --git a/python/examples/holey-wvg-bands.py b/python/examples/holey-wvg-bands.py index a04ee390d..3d8f7b447 100644 --- a/python/examples/holey-wvg-bands.py +++ b/python/examples/holey-wvg-bands.py @@ -7,7 +7,6 @@ # J. D. Joannopoulos, "Guided and defect modes in periodic dielectric # waveguides," J. Opt. Soc. Am. B, 12 (7), 1267-1272 (1995). -from __future__ import division import meep as mp @@ -30,31 +29,40 @@ def main(): fcen = 0.25 # pulse center frequency df = 1.5 # pulse freq. width: large df = short impulse - s = mp.Source(src=mp.GaussianSource(fcen, fwidth=df), component=mp.Hz, - center=mp.Vector3(0.1234)) + s = mp.Source( + src=mp.GaussianSource(fcen, fwidth=df), + component=mp.Hz, + center=mp.Vector3(0.1234), + ) sym = mp.Mirror(direction=mp.Y, phase=-1) - sim = mp.Simulation(cell_size=cell, geometry=[b, c], sources=[s], symmetries=[sym], - boundary_layers=[mp.PML(dpml, direction=mp.Y)], resolution=20) + sim = mp.Simulation( + cell_size=cell, + geometry=[b, c], + sources=[s], + symmetries=[sym], + boundary_layers=[mp.PML(dpml, direction=mp.Y)], + resolution=20, + ) kx = False # if true, do run at specified kx and get fields - k_interp = 19 # # k-points to interpolate, otherwise - if kx: sim.k_point = mp.Vector3(kx) sim.run( mp.at_beginning(mp.output_epsilon), mp.after_sources(mp.Harminv(mp.Hz, mp.Vector3(0.1234), fcen, df)), - until_after_sources=300 + until_after_sources=300, ) sim.run(mp.at_every(1 / fcen / 20, mp.output_hfield_z), until=1 / fcen) else: + k_interp = 19 # # k-points to interpolate, otherwise + sim.run_k_points(300, mp.interpolate(k_interp, [mp.Vector3(), mp.Vector3(0.5)])) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/python/examples/holey-wvg-cavity.py b/python/examples/holey-wvg-cavity.py index 7bedb283d..745b64a41 100644 --- a/python/examples/holey-wvg-cavity.py +++ b/python/examples/holey-wvg-cavity.py @@ -1,95 +1,127 @@ # Meep Tutorial: Hz-polarized transmission and reflection through a cavity # formed by a periodic sequence of holes in a dielectric waveguide, # with a defect formed by a larger spacing between one pair of holes. - # This structure is based on one analyzed in: # S. Fan, J. N. Winn, A. Devenyi, J. C. Chen, R. D. Meade, and # J. D. Joannopoulos, "Guided and defect modes in periodic dielectric # waveguides," J. Opt. Soc. Am. B, 12 (7), 1267-1272 (1995). - -from __future__ import division - import argparse + import meep as mp + def main(args): - resolution = 20 # pixels/um - - eps = 13 # dielectric constant of waveguide - w = 1.2 # width of waveguide - r = 0.36 # radius of holes - d = 1.4 # defect spacing (ordinary spacing = 1) - N = args.N # number of holes on either side of defect + resolution = 20 # pixels/um + + eps = 13 # dielectric constant of waveguide + w = 1.2 # width of waveguide + r = 0.36 # radius of holes + d = 1.4 # defect spacing (ordinary spacing = 1) + N = args.N # number of holes on either side of defect sy = args.sy # size of cell in y direction (perpendicular to wvg.) - pad = 2 # padding between last hole and PML edge - dpml = 1 # PML thickness + pad = 2 # padding between last hole and PML edge + dpml = 1 # PML thickness - sx = 2*(pad+dpml+N)+d-1 # size of cell in x direction + sx = 2 * (pad + dpml + N) + d - 1 # size of cell in x direction - cell = mp.Vector3(sx,sy,0) + cell = mp.Vector3(sx, sy, 0) - blk = mp.Block(size=mp.Vector3(mp.inf,w,mp.inf), - material=mp.Medium(epsilon=eps)) + blk = mp.Block(size=mp.Vector3(mp.inf, w, mp.inf), material=mp.Medium(epsilon=eps)) geometry = [blk] for i in range(N): - geometry.append(mp.Cylinder(r, center=mp.Vector3(d/2+i))) - geometry.append(mp.Cylinder(r, center=mp.Vector3(-(d/2+i)))) + geometry.append(mp.Cylinder(r, center=mp.Vector3(d / 2 + i))) + geometry.append(mp.Cylinder(r, center=mp.Vector3(-(d / 2 + i)))) fcen = args.fcen # pulse center frequency - df = args.df # pulse frequency width - nfreq = 500 # number of frequencies at which to compute flux - - sim = mp.Simulation(cell_size=cell, - geometry=geometry, - sources=[], - boundary_layers=[mp.PML(dpml)], - resolution=20) + df = args.df # pulse frequency width + sim = mp.Simulation( + cell_size=cell, + geometry=geometry, + sources=[], + boundary_layers=[mp.PML(dpml)], + resolution=20, + ) if args.resonant_modes: - sim.sources.append(mp.Source(mp.GaussianSource(fcen, fwidth=df), - component=mp.Hz, - center=mp.Vector3())) + sim.sources.append( + mp.Source( + mp.GaussianSource(fcen, fwidth=df), component=mp.Hz, center=mp.Vector3() + ) + ) sim.symmetries.append(mp.Mirror(mp.Y, phase=-1)) sim.symmetries.append(mp.Mirror(mp.X, phase=-1)) - sim.run(mp.at_beginning(mp.output_epsilon), - mp.after_sources(mp.Harminv(mp.Hz, mp.Vector3(), fcen, df)), - until_after_sources=400) + sim.run( + mp.at_beginning(mp.output_epsilon), + mp.after_sources(mp.Harminv(mp.Hz, mp.Vector3(), fcen, df)), + until_after_sources=400, + ) - sim.run(mp.at_every(1/fcen/20, mp.output_hfield_z), until=1/fcen) + sim.run(mp.at_every(1 / fcen / 20, mp.output_hfield_z), until=1 / fcen) else: - sim.sources.append(mp.Source(mp.GaussianSource(fcen, fwidth=df), - component=mp.Ey, - center=mp.Vector3(-0.5*sx+dpml), - size=mp.Vector3(0,w))) + sim.sources.append( + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=mp.Ey, + center=mp.Vector3(-0.5 * sx + dpml), + size=mp.Vector3(0, w), + ) + ) sim.symmetries.append(mp.Mirror(mp.Y, phase=-1)) - freg = mp.FluxRegion(center=mp.Vector3(0.5*sx-dpml-0.5), - size=mp.Vector3(0,2*w)) + freg = mp.FluxRegion( + center=mp.Vector3(0.5 * sx - dpml - 0.5), size=mp.Vector3(0, 2 * w) + ) + + nfreq = 500 # number of frequencies at which to compute flux # transmitted flux trans = sim.add_flux(fcen, df, nfreq, freg) vol = mp.Volume(mp.Vector3(), size=mp.Vector3(sx)) - sim.run(mp.at_beginning(mp.output_epsilon), - mp.during_sources(mp.in_volume(vol, mp.to_appended("hz-slice", mp.at_every(0.4, mp.output_hfield_z)))), - until_after_sources=mp.stop_when_fields_decayed(50, mp.Ey, mp.Vector3(0.5*sx-dpml-0.5), 1e-3)) + sim.run( + mp.at_beginning(mp.output_epsilon), + mp.during_sources( + mp.in_volume( + vol, + mp.to_appended("hz-slice", mp.at_every(0.4, mp.output_hfield_z)), + ) + ), + until_after_sources=mp.stop_when_fields_decayed( + 50, mp.Ey, mp.Vector3(0.5 * sx - dpml - 0.5), 1e-3 + ), + ) sim.display_fluxes(trans) # print out the flux spectrum -if __name__ == '__main__': + +if __name__ == "__main__": parser = argparse.ArgumentParser() - parser.add_argument('-r', '--resonant_modes', action='store_true', default=False, - help="Compute resonant modes. Default is transmission spectrum.") - parser.add_argument('-N', type=int, default=3, help='number of holes on either side of defect') - parser.add_argument('-sy', type=int, default=6, help='size of cell in y direction (perpendicular to wvg.)') - parser.add_argument('-fcen', type=float, default=0.25, help='pulse center frequency') - parser.add_argument('-df', type=float, default=0.2, help='pulse frequency width') + parser.add_argument( + "-r", + "--resonant_modes", + action="store_true", + default=False, + help="Compute resonant modes. Default is transmission spectrum.", + ) + parser.add_argument( + "-N", type=int, default=3, help="number of holes on either side of defect" + ) + parser.add_argument( + "-sy", + type=int, + default=6, + help="size of cell in y direction (perpendicular to wvg.)", + ) + parser.add_argument( + "-fcen", type=float, default=0.25, help="pulse center frequency" + ) + parser.add_argument("-df", type=float, default=0.2, help="pulse frequency width") args = parser.parse_args() main(args) diff --git a/python/examples/material-dispersion.py b/python/examples/material-dispersion.py index 10acd16cc..ecab6cb87 100644 --- a/python/examples/material-dispersion.py +++ b/python/examples/material-dispersion.py @@ -2,11 +2,8 @@ # simulate homogenous space filled with a dispersive material, and compute # its modes as a function of wavevector k. Since omega/c = k/n, we can # extract the dielectric function epsilon(omega) = (ck/omega)^2. -from __future__ import division - import meep as mp - cell = mp.Vector3() resolution = 20 @@ -18,7 +15,7 @@ susceptibilities = [ mp.LorentzianSusceptibility(frequency=1.1, gamma=1e-5, sigma=0.5), - mp.LorentzianSusceptibility(frequency=0.5, gamma=0.1, sigma=2e-5) + mp.LorentzianSusceptibility(frequency=0.5, gamma=0.1, sigma=2e-5), ] default_material = mp.Medium(epsilon=2.25, E_susceptibilities=susceptibilities) @@ -26,7 +23,9 @@ fcen = 1.0 df = 2.0 -sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=mp.Vector3())] +sources = [ + mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=mp.Vector3()) +] kmin = 0.3 kmax = 2.2 @@ -39,11 +38,11 @@ geometry=[], sources=sources, default_material=default_material, - resolution=resolution + resolution=resolution, ) all_freqs = sim.run_k_points(200, kpts) # a list of lists of frequencies for fs, kx in zip(all_freqs, [v.x for v in kpts]): for f in fs: - print("eps:, {:.6g}, {:.6g}, {:.6g}".format(f.real, f.imag, (kx / f)**2)) + print(f"eps:, {f.real:.6g}, {f.imag:.6g}, {(kx / f) ** 2:.6g}") diff --git a/python/examples/metal-cavity-ldos.py b/python/examples/metal-cavity-ldos.py index b00ed414b..9da8dda72 100644 --- a/python/examples/metal-cavity-ldos.py +++ b/python/examples/metal-cavity-ldos.py @@ -1,41 +1,50 @@ -from __future__ import division - import math -import meep as mp -import numpy as np + import matplotlib.pyplot as plt +import numpy as np + +import meep as mp + def metal_cavity(w): resolution = 50 sxy = 2 dpml = 1 - sxy = sxy+2*dpml - cell = mp.Vector3(sxy,sxy) + sxy += 2 * dpml + cell = mp.Vector3(sxy, sxy) pml_layers = [mp.PML(dpml)] a = 1 t = 0.1 - geometry = [mp.Block(mp.Vector3(a+2*t,a+2*t,mp.inf), material=mp.metal), - mp.Block(mp.Vector3(a,a,mp.inf), material=mp.air)] + geometry = [ + mp.Block(mp.Vector3(a + 2 * t, a + 2 * t, mp.inf), material=mp.metal), + mp.Block(mp.Vector3(a, a, mp.inf), material=mp.air), + ] - geometry.append(mp.Block(center=mp.Vector3(a/2), - size=mp.Vector3(2*t,w,mp.inf), - material=mp.air)) + geometry.append( + mp.Block( + center=mp.Vector3(a / 2), size=mp.Vector3(2 * t, w, mp.inf), material=mp.air + ) + ) - fcen = math.sqrt(0.5)/a + fcen = math.sqrt(0.5) / a df = 0.2 - sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=df), - component=mp.Ez, - center=mp.Vector3())] + sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=mp.Vector3() + ) + ] symmetries = [mp.Mirror(mp.Y)] - sim = mp.Simulation(cell_size=cell, - geometry=geometry, - boundary_layers=pml_layers, - sources=sources, - symmetries=symmetries, - resolution=resolution) + sim = mp.Simulation( + cell_size=cell, + geometry=geometry, + boundary_layers=pml_layers, + sources=sources, + symmetries=symmetries, + resolution=resolution, + ) h = mp.Harminv(mp.Ez, mp.Vector3(), fcen, df) sim.run(mp.after_sources(h), until_after_sources=500) @@ -43,28 +52,29 @@ def metal_cavity(w): m = h.modes[0] f = m.freq Q = m.Q - Vmode = 0.25*a*a + Vmode = 0.25 * a * a ldos_1 = Q / Vmode / (2 * math.pi * f * math.pi * 0.5) sim.reset_meep() - T = 2*Q*(1/f) - sim.run(mp.dft_ldos(f,0,1), until_after_sources=T) + T = 2 * Q * (1 / f) + sim.run(mp.dft_ldos(f, 0, 1), until_after_sources=T) ldos_2 = sim.ldos_data[0] return ldos_1, ldos_2 -ws = np.arange(0.2,0.5,0.1) + +ws = np.arange(0.2, 0.5, 0.1) ldos_1 = np.zeros(len(ws)) ldos_2 = np.zeros(len(ws)) for j in range(len(ws)): ldos_1[j], ldos_2[j] = metal_cavity(ws[j]) - print("ldos:, {}, {}".format(ldos_1[j],ldos_2[2])) + print(f"ldos:, {ldos_1[j]}, {ldos_2[2]}") plt.figure(dpi=150) -plt.semilogy(1/ws,ldos_1,'bo-',label="2Q/(πωV)") -plt.semilogy(1/ws,ldos_2,'rs-',label="LDOS") -plt.xlabel('a/w') -plt.ylabel('2Q/(πωW) or LDOS') +plt.semilogy(1 / ws, ldos_1, "bo-", label="2Q/(πωV)") +plt.semilogy(1 / ws, ldos_2, "rs-", label="LDOS") +plt.xlabel("a/w") +plt.ylabel("2Q/(πωW) or LDOS") plt.show() diff --git a/python/examples/metasurface_lens.py b/python/examples/metasurface_lens.py index 42b56e77d..b9d55fd0f 100644 --- a/python/examples/metasurface_lens.py +++ b/python/examples/metasurface_lens.py @@ -1,182 +1,244 @@ -# -*- coding: utf-8 -*- - -import meep as mp -import numpy as np import matplotlib.pyplot as plt +import numpy as np +import meep as mp -resolution = 50 # pixels/μm +resolution = 50 # pixels/μm -dpml = 1.0 # PML thickness -dsub = 2.0 # substrate thickness -dpad = 2.0 # padding between grating and PML +dpml = 1.0 # PML thickness +dsub = 2.0 # substrate thickness +dpad = 2.0 # padding between grating and PML -lcen = 0.5 # center wavelength -fcen = 1/lcen # center frequency -df = 0.2*fcen # frequency width +lcen = 0.5 # center wavelength +fcen = 1 / lcen # center frequency +df = 0.2 * fcen # frequency width -focal_length = 200 # focal length of metalens -spot_length = 100 # far field line length -ff_res = 10 # far field resolution (points/μm) +focal_length = 200 # focal length of metalens +spot_length = 100 # far field line length +ff_res = 10 # far field resolution (points/μm) -k_point = mp.Vector3(0,0,0) +k_point = mp.Vector3(0, 0, 0) glass = mp.Medium(index=1.5) -pml_layers = [mp.PML(thickness=dpml,direction=mp.X)] - -symmetries=[mp.Mirror(mp.Y)] - -def grating(gp,gh,gdc_list): - sx = dpml+dsub+gh+dpad+dpml - src_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub) - mon_pt = mp.Vector3(0.5*sx-dpml-0.5*dpad) - geometry = [mp.Block(material=glass, - size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), - center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub)))] - - num_cells = len(gdc_list) - if num_cells == 1: - sy = gp - cell_size = mp.Vector3(sx,sy,0) - - sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), - component=mp.Ez, - center=src_pt, - size=mp.Vector3(y=sy))] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - k_point=k_point, - default_material=glass, - sources=sources, - symmetries=symmetries) - - flux_obj = sim.add_flux(fcen, 0, 1, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy))) - - sim.run(until_after_sources=50) - - input_flux = mp.get_fluxes(flux_obj) - - sim.reset_meep() - - geometry.append(mp.Block(material=glass, size=mp.Vector3(gh,gdc_list[0]*gp,mp.inf), center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh))) - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - geometry=geometry, - k_point=k_point, - sources=sources, - symmetries=symmetries) - - flux_obj = sim.add_flux(fcen, 0, 1, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy))) - - sim.run(until_after_sources=200) - - freqs = mp.get_eigenmode_freqs(flux_obj) - res = sim.get_eigenmode_coefficients(flux_obj, [1], eig_parity=mp.ODD_Z+mp.EVEN_Y) - coeffs = res.alpha - - mode_tran = abs(coeffs[0,0,0])**2/input_flux[0] - mode_phase = np.angle(coeffs[0,0,0]) - if mode_phase > 0: - mode_phase -= 2*np.pi - - return mode_tran, mode_phase - - else: - sy = num_cells*gp - cell_size = mp.Vector3(sx,sy,0) - - sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), - component=mp.Ez, - center=src_pt, - size=mp.Vector3(y=sy))] - - for j in range(num_cells): - geometry.append(mp.Block(material=glass, - size=mp.Vector3(gh,gdc_list[j]*gp,mp.inf), - center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh,-0.5*sy+(j+0.5)*gp))) - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - geometry=geometry, - k_point=k_point, - sources=sources, - symmetries=symmetries) - - n2f_obj = sim.add_near2far(fcen, 0, 1, mp.Near2FarRegion(center=mon_pt, size=mp.Vector3(y=sy))) - - sim.run(until_after_sources=500) - - return abs(sim.get_farfields(n2f_obj, ff_res, center=mp.Vector3(-0.5*sx+dpml+dsub+gh+focal_length), size=mp.Vector3(spot_length))['Ez'])**2 - - -gp = 0.3 # grating periodicity -gh = 1.8 # grating height -gdc = np.linspace(0.1,0.9,30) # grating duty cycle - -mode_tran = np.empty((gdc.size)) -mode_phase = np.empty((gdc.size)) +pml_layers = [mp.PML(thickness=dpml, direction=mp.X)] + +symmetries = [mp.Mirror(mp.Y)] + + +def grating(gp, gh, gdc_list): + sx = dpml + dsub + gh + dpad + dpml + src_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * dsub) + mon_pt = mp.Vector3(0.5 * sx - dpml - 0.5 * dpad) + geometry = [ + mp.Block( + material=glass, + size=mp.Vector3(dpml + dsub, mp.inf, mp.inf), + center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub)), + ) + ] + + num_cells = len(gdc_list) + if num_cells == 1: + sy = gp + cell_size = mp.Vector3(sx, sy, 0) + + sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=mp.Ez, + center=src_pt, + size=mp.Vector3(y=sy), + ) + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + k_point=k_point, + default_material=glass, + sources=sources, + symmetries=symmetries, + ) + + flux_obj = sim.add_flux( + fcen, 0, 1, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy)) + ) + + sim.run(until_after_sources=50) + + input_flux = mp.get_fluxes(flux_obj) + + sim.reset_meep() + + geometry.append( + mp.Block( + material=glass, + size=mp.Vector3(gh, gdc_list[0] * gp, mp.inf), + center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh), + ) + ) + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + geometry=geometry, + k_point=k_point, + sources=sources, + symmetries=symmetries, + ) + + flux_obj = sim.add_flux( + fcen, 0, 1, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy)) + ) + + sim.run(until_after_sources=200) + + freqs = mp.get_eigenmode_freqs(flux_obj) + res = sim.get_eigenmode_coefficients( + flux_obj, [1], eig_parity=mp.ODD_Z + mp.EVEN_Y + ) + coeffs = res.alpha + + mode_tran = abs(coeffs[0, 0, 0]) ** 2 / input_flux[0] + mode_phase = np.angle(coeffs[0, 0, 0]) + if mode_phase > 0: + mode_phase -= 2 * np.pi + + return mode_tran, mode_phase + + else: + sy = num_cells * gp + cell_size = mp.Vector3(sx, sy, 0) + + sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=mp.Ez, + center=src_pt, + size=mp.Vector3(y=sy), + ) + ] + + geometry.extend( + mp.Block( + material=glass, + size=mp.Vector3(gh, gdc_list[j] * gp, mp.inf), + center=mp.Vector3( + -0.5 * sx + dpml + dsub + 0.5 * gh, -0.5 * sy + (j + 0.5) * gp + ), + ) + for j in range(num_cells) + ) + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + geometry=geometry, + k_point=k_point, + sources=sources, + symmetries=symmetries, + ) + + n2f_obj = sim.add_near2far( + fcen, 0, 1, mp.Near2FarRegion(center=mon_pt, size=mp.Vector3(y=sy)) + ) + + sim.run(until_after_sources=500) + + return ( + abs( + sim.get_farfields( + n2f_obj, + ff_res, + center=mp.Vector3(-0.5 * sx + dpml + dsub + gh + focal_length), + size=mp.Vector3(spot_length), + )["Ez"] + ) + ** 2 + ) + + +gp = 0.3 # grating periodicity +gh = 1.8 # grating height +gdc = np.linspace(0.1, 0.9, 30) # grating duty cycle + +mode_tran = np.empty(gdc.size) +mode_phase = np.empty(gdc.size) for n in range(gdc.size): - mode_tran[n], mode_phase[n] = grating(gp,gh,[gdc[n]]) + mode_tran[n], mode_phase[n] = grating(gp, gh, [gdc[n]]) plt.figure(dpi=200) -plt.subplot(1,2,1) -plt.plot(gdc, mode_tran, 'bo-') -plt.xlim(gdc[0],gdc[-1]) -plt.xticks([t for t in np.linspace(0.1,0.9,5)]) +plt.subplot(1, 2, 1) +plt.plot(gdc, mode_tran, "bo-") +plt.xlim(gdc[0], gdc[-1]) +plt.xticks(list(np.linspace(0.1, 0.9, 5))) plt.xlabel("grating duty cycle") -plt.ylim(0.96,1.00) -plt.yticks([t for t in np.linspace(0.96,1.00,5)]) +plt.ylim(0.96, 1.00) +plt.yticks(list(np.linspace(0.96, 1.00, 5))) plt.title("transmittance") -plt.subplot(1,2,2) -plt.plot(gdc, mode_phase, 'rs-') +plt.subplot(1, 2, 2) +plt.plot(gdc, mode_phase, "rs-") plt.grid(True) -plt.xlim(gdc[0],gdc[-1]) -plt.xticks([t for t in np.linspace(0.1,0.9,5)]) +plt.xlim(gdc[0], gdc[-1]) +plt.xticks(list(np.linspace(0.1, 0.9, 5))) plt.xlabel("grating duty cycle") -plt.ylim(-2*np.pi,0) -plt.yticks([t for t in np.linspace(-6,0,7)]) +plt.ylim(-2 * np.pi, 0) +plt.yticks(list(np.linspace(-6, 0, 7))) plt.title("phase (radians)") plt.tight_layout(pad=0.5) plt.show() -gdc_new = np.linspace(0.16,0.65,500) +gdc_new = np.linspace(0.16, 0.65, 500) mode_phase_interp = np.interp(gdc_new, gdc, mode_phase) -print("phase-range:, {:.6f}".format(mode_phase_interp.max()-mode_phase_interp.min())) +print(f"phase-range:, {mode_phase_interp.max() - mode_phase_interp.min():.6f}") phase_tol = 1e-2 -num_cells = [100,200,400] -ff_nc = np.empty((spot_length*ff_res,len(num_cells))) +num_cells = [100, 200, 400] +ff_nc = np.empty((spot_length * ff_res, len(num_cells))) for k in range(len(num_cells)): - gdc_list = [] - for j in range(-num_cells[k],num_cells[k]+1): - phase_local = 2*np.pi/lcen * (focal_length-((j*gp)**2 + focal_length**2)**0.5) # local phase at the center of the j'th unit cell - phase_mod = phase_local % (-2*np.pi) # restrict phase to [-2*pi,0] - if phase_mod > mode_phase_interp.max(): - phase_mod = mode_phase_interp.max() - if phase_mod < mode_phase_interp.min(): - phase_mod = mode_phase_interp.min() - idx = np.transpose(np.nonzero(np.logical_and(mode_phase_interp > phase_mod-phase_tol, mode_phase_interp < phase_mod+phase_tol))) - gdc_list.append(gdc_new[idx[0][0]]) - - ff_nc[:,k] = grating(gp,gh,gdc_list) - -x = np.linspace(focal_length-0.5*spot_length,focal_length+0.5*spot_length,ff_res*spot_length) + gdc_list = [] + for j in range(-num_cells[k], num_cells[k] + 1): + phase_local = ( + 2 + * np.pi + / lcen + * (focal_length - ((j * gp) ** 2 + focal_length**2) ** 0.5) + ) # local phase at the center of the j'th unit cell + phase_mod = phase_local % (-2 * np.pi) # restrict phase to [-2*pi,0] + if phase_mod > mode_phase_interp.max(): + phase_mod = mode_phase_interp.max() + if phase_mod < mode_phase_interp.min(): + phase_mod = mode_phase_interp.min() + idx = np.transpose( + np.nonzero( + np.logical_and( + mode_phase_interp > phase_mod - phase_tol, + mode_phase_interp < phase_mod + phase_tol, + ) + ) + ) + gdc_list.append(gdc_new[idx[0][0]]) + + ff_nc[:, k] = grating(gp, gh, gdc_list) + +x = np.linspace( + focal_length - 0.5 * spot_length, + focal_length + 0.5 * spot_length, + ff_res * spot_length, +) plt.figure(dpi=200) -plt.semilogy(x,abs(ff_nc[:,0])**2,'bo-',label='num_cells = {}'.format(2*num_cells[0]+1)) -plt.semilogy(x,abs(ff_nc[:,1])**2,'ro-',label='num_cells = {}'.format(2*num_cells[1]+1)) -plt.semilogy(x,abs(ff_nc[:,2])**2,'go-',label='num_cells = {}'.format(2*num_cells[2]+1)) -plt.xlabel('x coordinate (μm)') -plt.ylabel(r'energy density of far-field electric fields, |E$_z$|$^2$') -plt.title('focusing properties of a binary-grating metasurface lens') -plt.legend(loc='upper right') +plt.semilogy(x, abs(ff_nc[:, 0]) ** 2, "bo-", label=f"num_cells = {2*num_cells[0] + 1}") +plt.semilogy(x, abs(ff_nc[:, 1]) ** 2, "ro-", label=f"num_cells = {2*num_cells[1] + 1}") +plt.semilogy(x, abs(ff_nc[:, 2]) ** 2, "go-", label=f"num_cells = {2*num_cells[2] + 1}") +plt.xlabel("x coordinate (μm)") +plt.ylabel(r"energy density of far-field electric fields, |E$_z$|$^2$") +plt.title("focusing properties of a binary-grating metasurface lens") +plt.legend(loc="upper right") plt.tight_layout() plt.show() diff --git a/python/examples/mie_scattering.py b/python/examples/mie_scattering.py index 33a674a1e..86f9887cb 100644 --- a/python/examples/mie_scattering.py +++ b/python/examples/mie_scattering.py @@ -1,52 +1,88 @@ -import meep as mp -import numpy as np import matplotlib.pyplot as plt +import numpy as np import PyMieScatt as ps +import meep as mp + r = 1.0 # radius of sphere -wvl_min = 2*np.pi*r/10 -wvl_max = 2*np.pi*r/2 +wvl_min = 2 * np.pi * r / 10 +wvl_max = 2 * np.pi * r / 2 -frq_min = 1/wvl_max -frq_max = 1/wvl_min -frq_cen = 0.5*(frq_min+frq_max) -dfrq = frq_max-frq_min +frq_min = 1 / wvl_max +frq_max = 1 / wvl_min +frq_cen = 0.5 * (frq_min + frq_max) +dfrq = frq_max - frq_min nfrq = 100 ## at least 8 pixels per smallest wavelength, i.e. np.floor(8/wvl_min) resolution = 25 -dpml = 0.5*wvl_max -dair = 0.5*wvl_max +dpml = 0.5 * wvl_max +dair = 0.5 * wvl_max pml_layers = [mp.PML(thickness=dpml)] -symmetries = [mp.Mirror(mp.Y), - mp.Mirror(mp.Z,phase=-1)] +symmetries = [mp.Mirror(mp.Y), mp.Mirror(mp.Z, phase=-1)] -s = 2*(dpml+dair+r) -cell_size = mp.Vector3(s,s,s) +s = 2 * (dpml + dair + r) +cell_size = mp.Vector3(s, s, s) # is_integrated=True necessary for any planewave source extending into PML -sources = [mp.Source(mp.GaussianSource(frq_cen,fwidth=dfrq,is_integrated=True), - center=mp.Vector3(-0.5*s+dpml), - size=mp.Vector3(0,s,s), - component=mp.Ez)] - -sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - sources=sources, - k_point=mp.Vector3(), - symmetries=symmetries) - -box_x1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(x=-r),size=mp.Vector3(0,2*r,2*r))) -box_x2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(x=+r),size=mp.Vector3(0,2*r,2*r))) -box_y1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(y=-r),size=mp.Vector3(2*r,0,2*r))) -box_y2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(y=+r),size=mp.Vector3(2*r,0,2*r))) -box_z1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(z=-r),size=mp.Vector3(2*r,2*r,0))) -box_z2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(z=+r),size=mp.Vector3(2*r,2*r,0))) +sources = [ + mp.Source( + mp.GaussianSource(frq_cen, fwidth=dfrq, is_integrated=True), + center=mp.Vector3(-0.5 * s + dpml), + size=mp.Vector3(0, s, s), + component=mp.Ez, + ) +] + +sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + sources=sources, + k_point=mp.Vector3(), + symmetries=symmetries, +) + +box_x1 = sim.add_flux( + frq_cen, + dfrq, + nfrq, + mp.FluxRegion(center=mp.Vector3(x=-r), size=mp.Vector3(0, 2 * r, 2 * r)), +) +box_x2 = sim.add_flux( + frq_cen, + dfrq, + nfrq, + mp.FluxRegion(center=mp.Vector3(x=+r), size=mp.Vector3(0, 2 * r, 2 * r)), +) +box_y1 = sim.add_flux( + frq_cen, + dfrq, + nfrq, + mp.FluxRegion(center=mp.Vector3(y=-r), size=mp.Vector3(2 * r, 0, 2 * r)), +) +box_y2 = sim.add_flux( + frq_cen, + dfrq, + nfrq, + mp.FluxRegion(center=mp.Vector3(y=+r), size=mp.Vector3(2 * r, 0, 2 * r)), +) +box_z1 = sim.add_flux( + frq_cen, + dfrq, + nfrq, + mp.FluxRegion(center=mp.Vector3(z=-r), size=mp.Vector3(2 * r, 2 * r, 0)), +) +box_z2 = sim.add_flux( + frq_cen, + dfrq, + nfrq, + mp.FluxRegion(center=mp.Vector3(z=+r), size=mp.Vector3(2 * r, 2 * r, 0)), +) sim.run(until_after_sources=10) @@ -63,24 +99,56 @@ sim.reset_meep() n_sphere = 2.0 -geometry = [mp.Sphere(material=mp.Medium(index=n_sphere), - center=mp.Vector3(), - radius=r)] - -sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - sources=sources, - k_point=mp.Vector3(), - symmetries=symmetries, - geometry=geometry) - -box_x1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(x=-r),size=mp.Vector3(0,2*r,2*r))) -box_x2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(x=+r),size=mp.Vector3(0,2*r,2*r))) -box_y1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(y=-r),size=mp.Vector3(2*r,0,2*r))) -box_y2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(y=+r),size=mp.Vector3(2*r,0,2*r))) -box_z1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(z=-r),size=mp.Vector3(2*r,2*r,0))) -box_z2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(z=+r),size=mp.Vector3(2*r,2*r,0))) +geometry = [ + mp.Sphere(material=mp.Medium(index=n_sphere), center=mp.Vector3(), radius=r) +] + +sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + sources=sources, + k_point=mp.Vector3(), + symmetries=symmetries, + geometry=geometry, +) + +box_x1 = sim.add_flux( + frq_cen, + dfrq, + nfrq, + mp.FluxRegion(center=mp.Vector3(x=-r), size=mp.Vector3(0, 2 * r, 2 * r)), +) +box_x2 = sim.add_flux( + frq_cen, + dfrq, + nfrq, + mp.FluxRegion(center=mp.Vector3(x=+r), size=mp.Vector3(0, 2 * r, 2 * r)), +) +box_y1 = sim.add_flux( + frq_cen, + dfrq, + nfrq, + mp.FluxRegion(center=mp.Vector3(y=-r), size=mp.Vector3(2 * r, 0, 2 * r)), +) +box_y2 = sim.add_flux( + frq_cen, + dfrq, + nfrq, + mp.FluxRegion(center=mp.Vector3(y=+r), size=mp.Vector3(2 * r, 0, 2 * r)), +) +box_z1 = sim.add_flux( + frq_cen, + dfrq, + nfrq, + mp.FluxRegion(center=mp.Vector3(z=-r), size=mp.Vector3(2 * r, 2 * r, 0)), +) +box_z2 = sim.add_flux( + frq_cen, + dfrq, + nfrq, + mp.FluxRegion(center=mp.Vector3(z=+r), size=mp.Vector3(2 * r, 2 * r, 0)), +) sim.load_minus_flux_data(box_x1, box_x1_data) sim.load_minus_flux_data(box_x2, box_x2_data) @@ -98,20 +166,31 @@ box_z1_flux = mp.get_fluxes(box_z1) box_z2_flux = mp.get_fluxes(box_z2) -scatt_flux = np.asarray(box_x1_flux)-np.asarray(box_x2_flux)+np.asarray(box_y1_flux)-np.asarray(box_y2_flux)+np.asarray(box_z1_flux)-np.asarray(box_z2_flux) -intensity = np.asarray(box_x1_flux0)/(2*r)**2 -scatt_cross_section = np.divide(scatt_flux,intensity) -scatt_eff_meep = scatt_cross_section*-1/(np.pi*r**2) -scatt_eff_theory = [ps.MieQ(n_sphere,1000/f,2*r*1000,asDict=True)['Qsca'] for f in freqs] +scatt_flux = ( + np.asarray(box_x1_flux) + - np.asarray(box_x2_flux) + + np.asarray(box_y1_flux) + - np.asarray(box_y2_flux) + + np.asarray(box_z1_flux) + - np.asarray(box_z2_flux) +) +intensity = np.asarray(box_x1_flux0) / (2 * r) ** 2 +scatt_cross_section = np.divide(scatt_flux, intensity) +scatt_eff_meep = scatt_cross_section * -1 / (np.pi * r**2) +scatt_eff_theory = [ + ps.MieQ(n_sphere, 1000 / f, 2 * r * 1000, asDict=True)["Qsca"] for f in freqs +] if mp.am_master(): plt.figure(dpi=150) - plt.loglog(2*np.pi*r*np.asarray(freqs),scatt_eff_meep,'bo-',label='Meep') - plt.loglog(2*np.pi*r*np.asarray(freqs),scatt_eff_theory,'ro-',label='theory') - plt.grid(True,which="both",ls="-") - plt.xlabel('(sphere circumference)/wavelength, 2πr/λ') - plt.ylabel('scattering efficiency, σ/πr$^{2}$') - plt.legend(loc='upper right') - plt.title('Mie Scattering of a Lossless Dielectric Sphere') + plt.loglog(2 * np.pi * r * np.asarray(freqs), scatt_eff_meep, "bo-", label="Meep") + plt.loglog( + 2 * np.pi * r * np.asarray(freqs), scatt_eff_theory, "ro-", label="theory" + ) + plt.grid(True, which="both", ls="-") + plt.xlabel("(sphere circumference)/wavelength, 2πr/λ") + plt.ylabel("scattering efficiency, σ/πr$^{2}$") + plt.legend(loc="upper right") + plt.title("Mie Scattering of a Lossless Dielectric Sphere") plt.tight_layout() plt.savefig("mie_scattering.png") diff --git a/python/examples/mode-decomposition.py b/python/examples/mode-decomposition.py index 6663c68fd..9cfd58a1b 100644 --- a/python/examples/mode-decomposition.py +++ b/python/examples/mode-decomposition.py @@ -1,30 +1,28 @@ -# -*- coding: utf-8 -*- +import matplotlib.pyplot as plt import meep as mp -import matplotlib.pyplot as plt -resolution = 25 # pixels/μm +resolution = 25 # pixels/μm -w1 = 1.0 # width of waveguide 1 -w2 = 2.0 # width of waveguide 2 -Lw = 10.0 # length of waveguides 1 and 2 +w1 = 1.0 # width of waveguide 1 +w2 = 2.0 # width of waveguide 2 +Lw = 10.0 # length of waveguides 1 and 2 # lengths of waveguide taper Lts = [2**m for m in range(4)] -dair = 3.0 # length of air region -dpml_x = 6.0 # length of PML in x direction -dpml_y = 2.0 # length of PML in y direction +dair = 3.0 # length of air region +dpml_x = 6.0 # length of PML in x direction +dpml_y = 2.0 # length of PML in y direction -sy = dpml_y+dair+w2+dair+dpml_y +sy = dpml_y + dair + w2 + dair + dpml_y Si = mp.Medium(epsilon=12.0) -boundary_layers = [mp.PML(dpml_x,direction=mp.X), - mp.PML(dpml_y,direction=mp.Y)] +boundary_layers = [mp.PML(dpml_x, direction=mp.X), mp.PML(dpml_y, direction=mp.Y)] -lcen = 6.67 # mode wavelength -fcen = 1/lcen # mode frequency +lcen = 6.67 # mode wavelength +fcen = 1 / lcen # mode frequency symmetries = [mp.Mirror(mp.Y)] @@ -32,35 +30,45 @@ R_flux = [] for Lt in Lts: - sx = dpml_x+Lw+Lt+Lw+dpml_x - cell_size = mp.Vector3(sx,sy,0) - - src_pt = mp.Vector3(-0.5*sx+dpml_x+0.2*Lw) - sources = [mp.EigenModeSource(src=mp.GaussianSource(fcen,fwidth=0.2*fcen), - center=src_pt, - size=mp.Vector3(y=sy-2*dpml_y), - eig_match_freq=True, - eig_parity=mp.ODD_Z+mp.EVEN_Y)] + sx = dpml_x + Lw + Lt + Lw + dpml_x + cell_size = mp.Vector3(sx, sy, 0) + + src_pt = mp.Vector3(-0.5 * sx + dpml_x + 0.2 * Lw) + sources = [ + mp.EigenModeSource( + src=mp.GaussianSource(fcen, fwidth=0.2 * fcen), + center=src_pt, + size=mp.Vector3(y=sy - 2 * dpml_y), + eig_match_freq=True, + eig_parity=mp.ODD_Z + mp.EVEN_Y, + ) + ] # straight waveguide - vertices = [mp.Vector3(-0.5*sx-1,0.5*w1), - mp.Vector3(0.5*sx+1,0.5*w1), - mp.Vector3(0.5*sx+1,-0.5*w1), - mp.Vector3(-0.5*sx-1,-0.5*w1)] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=boundary_layers, - geometry=[mp.Prism(vertices,height=mp.inf,material=Si)], - sources=sources, - symmetries=symmetries) - - mon_pt = mp.Vector3(-0.5*sx+dpml_x+0.7*Lw) - flux = sim.add_flux(fcen,0,1,mp.FluxRegion(center=mon_pt,size=mp.Vector3(y=sy-2*dpml_y))) - - sim.run(until_after_sources=mp.stop_when_fields_decayed(50,mp.Ez,mon_pt,1e-9)) - - res = sim.get_eigenmode_coefficients(flux,[1],eig_parity=mp.ODD_Z+mp.EVEN_Y) + vertices = [ + mp.Vector3(-0.5 * sx - 1, 0.5 * w1), + mp.Vector3(0.5 * sx + 1, 0.5 * w1), + mp.Vector3(0.5 * sx + 1, -0.5 * w1), + mp.Vector3(-0.5 * sx - 1, -0.5 * w1), + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=boundary_layers, + geometry=[mp.Prism(vertices, height=mp.inf, material=Si)], + sources=sources, + symmetries=symmetries, + ) + + mon_pt = mp.Vector3(-0.5 * sx + dpml_x + 0.7 * Lw) + flux = sim.add_flux( + fcen, 0, 1, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy - 2 * dpml_y)) + ) + + sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mon_pt, 1e-9)) + + res = sim.get_eigenmode_coefficients(flux, [1], eig_parity=mp.ODD_Z + mp.EVEN_Y) incident_coeffs = res.alpha incident_flux = mp.get_fluxes(flux) incident_flux_data = sim.get_flux_data(flux) @@ -68,42 +76,55 @@ sim.reset_meep() # linear taper - vertices = [mp.Vector3(-0.5*sx-1,0.5*w1), - mp.Vector3(-0.5*Lt,0.5*w1), - mp.Vector3(0.5*Lt,0.5*w2), - mp.Vector3(0.5*sx+1,0.5*w2), - mp.Vector3(0.5*sx+1,-0.5*w2), - mp.Vector3(0.5*Lt,-0.5*w2), - mp.Vector3(-0.5*Lt,-0.5*w1), - mp.Vector3(-0.5*sx-1,-0.5*w1)] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=boundary_layers, - geometry=[mp.Prism(vertices,height=mp.inf,material=Si)], - sources=sources, - symmetries=symmetries) - - flux = sim.add_flux(fcen,0,1,mp.FluxRegion(center=mon_pt,size=mp.Vector3(y=sy-2*dpml_y))) - sim.load_minus_flux_data(flux,incident_flux_data) - - sim.run(until_after_sources=mp.stop_when_fields_decayed(50,mp.Ez,mon_pt,1e-9)) - - res2 = sim.get_eigenmode_coefficients(flux,[1],eig_parity=mp.ODD_Z+mp.EVEN_Y) + vertices = [ + mp.Vector3(-0.5 * sx - 1, 0.5 * w1), + mp.Vector3(-0.5 * Lt, 0.5 * w1), + mp.Vector3(0.5 * Lt, 0.5 * w2), + mp.Vector3(0.5 * sx + 1, 0.5 * w2), + mp.Vector3(0.5 * sx + 1, -0.5 * w2), + mp.Vector3(0.5 * Lt, -0.5 * w2), + mp.Vector3(-0.5 * Lt, -0.5 * w1), + mp.Vector3(-0.5 * sx - 1, -0.5 * w1), + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=boundary_layers, + geometry=[mp.Prism(vertices, height=mp.inf, material=Si)], + sources=sources, + symmetries=symmetries, + ) + + flux = sim.add_flux( + fcen, 0, 1, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy - 2 * dpml_y)) + ) + sim.load_minus_flux_data(flux, incident_flux_data) + + sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mon_pt, 1e-9)) + + res2 = sim.get_eigenmode_coefficients(flux, [1], eig_parity=mp.ODD_Z + mp.EVEN_Y) taper_coeffs = res2.alpha taper_flux = mp.get_fluxes(flux) - R_coeffs.append(abs(taper_coeffs[0,0,1])**2/abs(incident_coeffs[0,0,0])**2) - R_flux.append(-taper_flux[0]/incident_flux[0]) - print("refl:, {}, {:.8f}, {:.8f}".format(Lt,R_coeffs[-1],R_flux[-1])) + R_coeffs.append( + abs(taper_coeffs[0, 0, 1]) ** 2 / abs(incident_coeffs[0, 0, 0]) ** 2 + ) + R_flux.append(-taper_flux[0] / incident_flux[0]) + print(f"refl:, {Lt}, {R_coeffs[-1]:.8f}, {R_flux[-1]:.8f}") if mp.am_master(): plt.figure() - plt.loglog(Lts,R_coeffs,'bo-',label='mode decomposition') - plt.loglog(Lts,R_flux,'ro-',label='Poynting flux') - plt.loglog(Lts,[0.005/Lt**2 for Lt in Lts],'k-',label=r'quadratic reference (1/Lt$^2$)') - plt.legend(loc='upper right') - plt.xlabel('taper length Lt (μm)') - plt.ylabel('reflectance') + plt.loglog(Lts, R_coeffs, "bo-", label="mode decomposition") + plt.loglog(Lts, R_flux, "ro-", label="Poynting flux") + plt.loglog( + Lts, + [0.005 / Lt**2 for Lt in Lts], + "k-", + label=r"quadratic reference (1/Lt$^2$)", + ) + plt.legend(loc="upper right") + plt.xlabel("taper length Lt (μm)") + plt.ylabel("reflectance") plt.show() diff --git a/python/examples/mpb_bragg.py b/python/examples/mpb_bragg.py index 8cfd8bf76..d8c503950 100644 --- a/python/examples/mpb_bragg.py +++ b/python/examples/mpb_bragg.py @@ -12,8 +12,13 @@ geometry_lattice = mp.Lattice(size=mp.Vector3(1)) # 1d cell default_material = mp.Medium(index=n_lo) -geometry = mp.Cylinder(material=mp.Medium(index=n_hi), center=mp.Vector3(), axis=mp.Vector3(1), - radius=mp.inf, height=w_hi) +geometry = mp.Cylinder( + material=mp.Medium(index=n_hi), + center=mp.Vector3(), + axis=mp.Vector3(1), + radius=mp.inf, + height=w_hi, +) kx = 0.5 k_points = [mp.Vector3(kx)] @@ -27,12 +32,15 @@ geometry_lattice=geometry_lattice, geometry=[geometry], resolution=resolution, - default_material=default_material + default_material=default_material, ) def main(): - ms.run_tm(mpb.output_hfield_y) # note that TM and TE bands are degenerate, so we only need TM + ms.run_tm( + mpb.output_hfield_y + ) # note that TM and TE bands are degenerate, so we only need TM + -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/python/examples/mpb_bragg_sine.py b/python/examples/mpb_bragg_sine.py index e0a52098b..858ad8d51 100644 --- a/python/examples/mpb_bragg_sine.py +++ b/python/examples/mpb_bragg_sine.py @@ -1,4 +1,5 @@ import math + import meep as mp from meep import mpb @@ -16,8 +17,11 @@ # * (1 + cos(2*pi*x)) # This is periodic, and also has inversion symmetry. def eps_func(p): - return mp.Medium(index=index_min + 0.5 * (index_max - index_min) * - (1 + math.cos(2 * math.pi * p.x))) + return mp.Medium( + index=index_min + + 0.5 * (index_max - index_min) * (1 + math.cos(2 * math.pi * p.x)) + ) + geometry_lattice = mp.Lattice(size=mp.Vector3(1)) # 1d cell @@ -34,7 +38,7 @@ def eps_func(p): k_points=k_points, geometry_lattice=geometry_lattice, resolution=resolution, - default_material=default_material + default_material=default_material, ) @@ -42,5 +46,6 @@ def main(): # the TM and TE bands are degenerate, so we only need TM: ms.run_tm() -if __name__ == '__main__': + +if __name__ == "__main__": main() diff --git a/python/examples/mpb_data_analysis.py b/python/examples/mpb_data_analysis.py index 4a338aab5..9d7a27daf 100644 --- a/python/examples/mpb_data_analysis.py +++ b/python/examples/mpb_data_analysis.py @@ -1,10 +1,10 @@ -from __future__ import division - import os import sys + +import matplotlib.pyplot as plt import numpy as np + import meep as mp -import matplotlib.pyplot as plt from meep import mpb examples_dir = os.path.realpath(os.path.dirname(__file__)) @@ -21,8 +21,11 @@ def tri_rods(): def get_efields(tr_ms, band): efields.append(tr_ms.get_efield(band)) - tr_ms.run_tm(mpb.output_at_kpoint(mp.Vector3(1 / -3, 1 / 3), mpb.fix_efield_phase, - get_efields)) + tr_ms.run_tm( + mpb.output_at_kpoint( + mp.Vector3(1 / -3, 1 / 3), mpb.fix_efield_phase, get_efields + ) + ) # Create an MPBData instance to transform the efields md = mpb.MPBData(rectify=True, resolution=32, periods=3) @@ -36,21 +39,21 @@ def get_efields(tr_ms, band): tr_ms.run_te() eps = tr_ms.get_epsilon() - plt.imshow(eps.T, interpolation='spline36', cmap='binary') - plt.axis('off') + plt.imshow(eps.T, interpolation="spline36", cmap="binary") + plt.axis("off") plt.show() md = mpb.MPBData(rectify=True, resolution=32, periods=3) rectangular_data = md.convert(eps) - plt.imshow(rectangular_data.T, interpolation='spline36', cmap='binary') - plt.axis('off') + plt.imshow(rectangular_data.T, interpolation="spline36", cmap="binary") + plt.axis("off") plt.show() for i, f in enumerate(converted): plt.subplot(331 + i) - plt.contour(rectangular_data.T, cmap='binary') - plt.imshow(np.real(f).T, interpolation='spline36', cmap='RdBu', alpha=0.9) - plt.axis('off') + plt.contour(rectangular_data.T, cmap="binary") + plt.imshow(np.real(f).T, interpolation="spline36", cmap="RdBu", alpha=0.9) + plt.axis("off") plt.show() @@ -72,6 +75,6 @@ def get_dpwr(ms, band): # TODO: Plot -if __name__ == '__main__': +if __name__ == "__main__": tri_rods() diamond() diff --git a/python/examples/mpb_diamond.py b/python/examples/mpb_diamond.py index b97fbdf50..b7aaaa1cb 100644 --- a/python/examples/mpb_diamond.py +++ b/python/examples/mpb_diamond.py @@ -1,4 +1,5 @@ import math + import meep as mp from meep import mpb @@ -10,19 +11,19 @@ basis_size=mp.Vector3(sqrt_half, sqrt_half, sqrt_half), basis1=mp.Vector3(0, 1, 1), basis2=mp.Vector3(1, 0, 1), - basis3=mp.Vector3(1, 1) + basis3=mp.Vector3(1, 1), ) # Corners of the irreducible Brillouin zone for the fcc lattice, # in a canonical order: vlist = [ - mp.Vector3(0, 0.5, 0.5), # X - mp.Vector3(0, 0.625, 0.375), # U - mp.Vector3(0, 0.5, 0), # L - mp.Vector3(0, 0, 0), # Gamma - mp.Vector3(0, 0.5, 0.5), # X - mp.Vector3(0.25, 0.75, 0.5), # W - mp.Vector3(0.375, 0.75, 0.375) # K + mp.Vector3(0, 0.5, 0.5), # X + mp.Vector3(0, 0.625, 0.375), # U + mp.Vector3(0, 0.5, 0), # L + mp.Vector3(0, 0, 0), # Gamma + mp.Vector3(0, 0.5, 0.5), # X + mp.Vector3(0.25, 0.75, 0.5), # W + mp.Vector3(0.375, 0.75, 0.375), # K ] k_points = mp.interpolate(4, vlist) @@ -34,8 +35,10 @@ diel = mp.Medium(epsilon=eps) # A diamond lattice has two "atoms" per unit cell: -geometry = [mp.Sphere(r, center=mp.Vector3(0.125, 0.125, 0.125), material=diel), - mp.Sphere(r, center=mp.Vector3(-0.125, -0.125, -0.125), material=diel)] +geometry = [ + mp.Sphere(r, center=mp.Vector3(0.125, 0.125, 0.125), material=diel), + mp.Sphere(r, center=mp.Vector3(-0.125, -0.125, -0.125), material=diel), +] # (A simple fcc lattice would have only one sphere/object at the origin.) @@ -49,7 +52,7 @@ geometry=geometry, resolution=resolution, num_bands=num_bands, - mesh_size=mesh_size + mesh_size=mesh_size, ) @@ -57,5 +60,6 @@ def main(): # run calculation, outputting electric_field energy density at the U point: ms.run(mpb.output_at_kpoint(mp.Vector3(0, 0.625, 0.375), mpb.output_dpwr)) -if __name__ == '__main__': + +if __name__ == "__main__": main() diff --git a/python/examples/mpb_hole_slab.py b/python/examples/mpb_hole_slab.py index 02442576f..e95faa480 100644 --- a/python/examples/mpb_hole_slab.py +++ b/python/examples/mpb_hole_slab.py @@ -1,6 +1,5 @@ -from __future__ import division - import math + import meep as mp from meep import mpb @@ -23,15 +22,20 @@ supercell_h = 4 # height of the supercell # triangular lattice with vertical supercell: -geometry_lattice = mp.Lattice(size=mp.Vector3(1, 1, supercell_h), - basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), - basis2=mp.Vector3(math.sqrt(3) / 2, -0.5)) +geometry_lattice = mp.Lattice( + size=mp.Vector3(1, 1, supercell_h), + basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), + basis2=mp.Vector3(math.sqrt(3) / 2, -0.5), +) geometry = [ - mp.Block(material=mp.Medium(epsilon=loweps), center=mp.Vector3(z=0.25 * supercell_h), - size=mp.Vector3(mp.inf, mp.inf, 0.5 * supercell_h)), + mp.Block( + material=mp.Medium(epsilon=loweps), + center=mp.Vector3(z=0.25 * supercell_h), + size=mp.Vector3(mp.inf, mp.inf, 0.5 * supercell_h), + ), mp.Block(material=mp.Medium(epsilon=eps), size=mp.Vector3(mp.inf, mp.inf, h)), - mp.Cylinder(r, material=mp.air, height=supercell_h) + mp.Cylinder(r, material=mp.air, height=supercell_h), ] # 1st Brillouin zone of a triangular lattice: @@ -40,12 +44,8 @@ K = mp.Vector3(1 / -3, 1 / 3) only_K = False # run with only_K=true to only do this k_point -k_interp = 4 # the number of k points to interpolate -if only_K: - k_points = [K] -else: - k_points = mp.interpolate(k_interp, [Gamma, M, K, Gamma]) - +k_interp = 4 # the number of k points to interpolate +k_points = [K] if only_K else mp.interpolate(k_interp, [Gamma, M, K, Gamma]) resolution = mp.Vector3(32, 32, 16) num_bands = 9 @@ -54,7 +54,7 @@ geometry=geometry, resolution=resolution, num_bands=num_bands, - k_points=k_points + k_points=k_points, ) @@ -69,5 +69,6 @@ def main(): ms.display_eigensolver_stats() -if __name__ == '__main__': + +if __name__ == "__main__": main() diff --git a/python/examples/mpb_honey_rods.py b/python/examples/mpb_honey_rods.py index b24c6cc28..f6cd9489e 100644 --- a/python/examples/mpb_honey_rods.py +++ b/python/examples/mpb_honey_rods.py @@ -1,6 +1,5 @@ -from __future__ import division - import math + import meep as mp from meep import mpb @@ -13,23 +12,35 @@ eps = 12 # the rod dielectric constant # triangular lattice: -geometry_lattice = mp.Lattice(size=mp.Vector3(1, 1), - basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), - basis2=mp.Vector3(math.sqrt(3) / 2, -0.5)) +geometry_lattice = mp.Lattice( + size=mp.Vector3(1, 1), + basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), + basis2=mp.Vector3(math.sqrt(3) / 2, -0.5), +) # Two rods per unit cell, at the correct positions to form a honeycomb # lattice, and arranged to have inversion symmetry: -geometry = [mp.Cylinder(r, center=mp.Vector3(1 / 6, 1 / 6), height=mp.inf, - material=mp.Medium(epsilon=eps)), - mp.Cylinder(r, center=mp.Vector3(1 / -6, 1 / -6), height=mp.inf, - material=mp.Medium(epsilon=eps))] +geometry = [ + mp.Cylinder( + r, + center=mp.Vector3(1 / 6, 1 / 6), + height=mp.inf, + material=mp.Medium(epsilon=eps), + ), + mp.Cylinder( + r, + center=mp.Vector3(1 / -6, 1 / -6), + height=mp.inf, + material=mp.Medium(epsilon=eps), + ), +] # The k_points list, for the Brillouin zone of a triangular lattice: k_points = [ - mp.Vector3(), # Gamma - mp.Vector3(y=0.5), # M + mp.Vector3(), # Gamma + mp.Vector3(y=0.5), # M mp.Vector3(1 / -3, 1 / 3), # K - mp.Vector3() # Gamma + mp.Vector3(), # Gamma ] k_interp = 4 # number of k_points to interpolate @@ -43,7 +54,7 @@ geometry=geometry, k_points=k_points, resolution=resolution, - num_bands=num_bands + num_bands=num_bands, ) @@ -51,11 +62,12 @@ def main(): ms.run_tm() ms.run_te() + # Since there is a complete gap, we could instead see it just by using: # run() # The gap is between bands 12 and 13 in this case. (Note that there is # a false gap between bands 2 and 3, which disappears as you increase the # k_point resolution.) -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/python/examples/mpb_line_defect.py b/python/examples/mpb_line_defect.py index fcbb69752..8f1941b64 100644 --- a/python/examples/mpb_line_defect.py +++ b/python/examples/mpb_line_defect.py @@ -1,6 +1,5 @@ -from __future__ import division - import math + import meep as mp from meep import mpb @@ -13,9 +12,11 @@ supercell_y = 7 # the (odd) number of lateral supercell periods -geometry_lattice = mp.Lattice(size=mp.Vector3(1, supercell_y), - basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), - basis2=mp.Vector3(math.sqrt(3) / 2, -0.5)) +geometry_lattice = mp.Lattice( + size=mp.Vector3(1, supercell_y), + basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), + basis2=mp.Vector3(math.sqrt(3) / 2, -0.5), +) eps = 12 # the dielectric constant of the rods r = 0.2 # the rod radius in the bulk crystal @@ -29,7 +30,9 @@ geometry += [mp.Cylinder(r, material=mp.air)] Gamma = mp.Vector3() -K_prime = mp.lattice_to_reciprocal(mp.Vector3(0.5), geometry_lattice) # edge of Brillouin zone. +K_prime = mp.lattice_to_reciprocal( + mp.Vector3(0.5), geometry_lattice +) # edge of Brillouin zone. k_points = mp.interpolate(4, [Gamma, K_prime]) # the bigger the supercell, the more bands you need to compute to get @@ -44,7 +47,7 @@ geometry=geometry, k_points=k_points, num_bands=num_bands, - resolution=resolution + resolution=resolution, ) @@ -53,8 +56,12 @@ def main(): # band. (In general, the guided mode in such an air defect may have # exited the gap by the time it reaches the edge of the Brillouin # zone at K_prime.) - ms.run_tm(mpb.output_at_kpoint(k_points[len(k_points) // 2]), ms.fix_efield_phase, - mpb.output_efield_z) + ms.run_tm( + mpb.output_at_kpoint(k_points[len(k_points) // 2]), + ms.fix_efield_phase, + mpb.output_efield_z, + ) + -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/python/examples/mpb_sq_rods.py b/python/examples/mpb_sq_rods.py index d78c2fd8e..b752cf03d 100644 --- a/python/examples/mpb_sq_rods.py +++ b/python/examples/mpb_sq_rods.py @@ -1,6 +1,5 @@ -from __future__ import division - import time + import meep as mp from meep import mpb @@ -32,7 +31,7 @@ geometry=geometry, k_points=k_points, resolution=resolution, - num_bands=num_bands + num_bands=num_bands, ) @@ -41,9 +40,10 @@ def main(): t0 = time.time() ms.run_te() ms.run_tm() - print("total time for both TE and TM bands: {:.2f} seconds".format(time.time() - t0)) + print(f"total time for both TE and TM bands: {time.time() - t0:.2f} seconds") ms.display_eigensolver_stats() -if __name__ == '__main__': + +if __name__ == "__main__": main() diff --git a/python/examples/mpb_strip.py b/python/examples/mpb_strip.py index fd918fdcd..b7303c299 100644 --- a/python/examples/mpb_strip.py +++ b/python/examples/mpb_strip.py @@ -1,5 +1,3 @@ -from __future__ import division - import meep as mp from meep import mpb @@ -28,9 +26,14 @@ geometry_lattice = mp.Lattice(size=mp.Vector3(0, sc_y, sc_z)) # define the 2d blocks for the strip and substrate -geometry = [mp.Block(size=mp.Vector3(mp.inf, mp.inf, 0.5 * (sc_z - h)), - center=mp.Vector3(z=0.25 * (sc_z + h)), material=SiO2), - mp.Block(size=mp.Vector3(mp.inf, w, h), material=Si)] +geometry = [ + mp.Block( + size=mp.Vector3(mp.inf, mp.inf, 0.5 * (sc_z - h)), + center=mp.Vector3(z=0.25 * (sc_z + h)), + material=SiO2, + ), + mp.Block(size=mp.Vector3(mp.inf, w, h), material=Si), +] # The k (i.e. beta, i.e. propagation constant) points to look at, in # units of 2*pi/um. We'll look at num_k points from k_min to k_max. @@ -46,7 +49,7 @@ # is the corresponding column in the output if you grep for "freqs:".) num_bands = 4 -filename_prefix = 'strip-' # use this prefix for output files +filename_prefix = "strip-" # use this prefix for output files ms = mpb.ModeSolver( geometry_lattice=geometry_lattice, @@ -54,7 +57,7 @@ k_points=k_points, resolution=resolution, num_bands=num_bands, - filename_prefix=filename_prefix + filename_prefix=filename_prefix, ) @@ -75,9 +78,21 @@ def main(): omega = 1 / 1.55 # frequency corresponding to 1.55um # Output the x component of the Poynting vector for num_bands bands at omega - ms.find_k(mp.NO_PARITY, omega, 1, num_bands, mp.Vector3(1), 1e-3, omega * 3.45, - omega * 0.1, omega * 4, mpb.output_poynting_x, mpb.display_yparities, - mpb.display_group_velocities) - -if __name__ == '__main__': + ms.find_k( + mp.NO_PARITY, + omega, + 1, + num_bands, + mp.Vector3(1), + 1e-3, + omega * 3.45, + omega * 0.1, + omega * 4, + mpb.output_poynting_x, + mpb.display_yparities, + mpb.display_group_velocities, + ) + + +if __name__ == "__main__": main() diff --git a/python/examples/mpb_tri_holes.py b/python/examples/mpb_tri_holes.py index 9c89b8bb8..0365546ff 100644 --- a/python/examples/mpb_tri_holes.py +++ b/python/examples/mpb_tri_holes.py @@ -1,6 +1,5 @@ -from __future__ import division - import math + import meep as mp from meep import mpb @@ -11,17 +10,19 @@ # first, define the lattice vectors and k-points for a triangular lattice: -geometry_lattice = mp.Lattice(size=mp.Vector3(1, 1), - basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), - basis2=mp.Vector3(math.sqrt(3) / 2, -0.5)) +geometry_lattice = mp.Lattice( + size=mp.Vector3(1, 1), + basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), + basis2=mp.Vector3(math.sqrt(3) / 2, -0.5), +) kz = 0 # use non-zero kz to consider vertical propagation k_points = [ - mp.Vector3(z=kz), # Gamma - mp.Vector3(0, 0.5, kz), # M + mp.Vector3(z=kz), # Gamma + mp.Vector3(0, 0.5, kz), # M mp.Vector3(1 / -3, 1 / 3, kz), # K - mp.Vector3(z=kz) # Gamma + mp.Vector3(z=kz), # Gamma ] k_interp = 4 @@ -44,7 +45,7 @@ k_points=k_points, default_material=default_material, resolution=resolution, - num_bands=num_bands + num_bands=num_bands, ) @@ -55,5 +56,6 @@ def main(): else: ms.run() # if kz != 0 there are no purely te and tm bands -if __name__ == '__main__': + +if __name__ == "__main__": main() diff --git a/python/examples/mpb_tri_rods.py b/python/examples/mpb_tri_rods.py index 0052cae88..f1ac47447 100644 --- a/python/examples/mpb_tri_rods.py +++ b/python/examples/mpb_tri_rods.py @@ -1,6 +1,5 @@ -from __future__ import division - import math + import meep as mp from meep import mpb @@ -10,17 +9,19 @@ num_bands = 8 -geometry_lattice = mp.Lattice(size=mp.Vector3(1, 1), - basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), - basis2=mp.Vector3(math.sqrt(3) / 2, -0.5)) +geometry_lattice = mp.Lattice( + size=mp.Vector3(1, 1), + basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), + basis2=mp.Vector3(math.sqrt(3) / 2, -0.5), +) geometry = [mp.Cylinder(0.2, material=mp.Medium(epsilon=12))] k_points = [ - mp.Vector3(), # Gamma - mp.Vector3(y=0.5), # M + mp.Vector3(), # Gamma + mp.Vector3(y=0.5), # M mp.Vector3(1 / -3, 1 / 3), # K - mp.Vector3(), # Gamma + mp.Vector3(), # Gamma ] k_points = mp.interpolate(4, k_points) @@ -32,14 +33,18 @@ geometry_lattice=geometry_lattice, k_points=k_points, resolution=resolution, - num_bands=num_bands + num_bands=num_bands, ) def main(): - ms.run_tm(mpb.output_at_kpoint(mp.Vector3(1 / -3, 1 / 3), mpb.fix_efield_phase, - mpb.output_efield_z)) + ms.run_tm( + mpb.output_at_kpoint( + mp.Vector3(1 / -3, 1 / 3), mpb.fix_efield_phase, mpb.output_efield_z + ) + ) ms.run_te() -if __name__ == '__main__': + +if __name__ == "__main__": main() diff --git a/python/examples/mpb_tutorial.py b/python/examples/mpb_tutorial.py index 7b3ded2b4..7e2df4c34 100644 --- a/python/examples/mpb_tutorial.py +++ b/python/examples/mpb_tutorial.py @@ -1,36 +1,40 @@ -from __future__ import division - import math + +from scipy.optimize import minimize_scalar, ridder + import meep as mp from meep import mpb -from scipy.optimize import minimize_scalar -from scipy.optimize import ridder def print_heading(h): stars = "*" * 10 print("{0} {1} {0}".format(stars, h)) + # Our First Band Structure print_heading("Square lattice of rods in air") num_bands = 8 -k_points = [mp.Vector3(), # Gamma - mp.Vector3(0.5), # X - mp.Vector3(0.5, 0.5), # M - mp.Vector3()] # Gamma +k_points = [ + mp.Vector3(), # Gamma + mp.Vector3(0.5), # X + mp.Vector3(0.5, 0.5), # M + mp.Vector3(), +] # Gamma k_points = mp.interpolate(4, k_points) geometry = [mp.Cylinder(0.2, material=mp.Medium(epsilon=12))] geometry_lattice = mp.Lattice(size=mp.Vector3(1, 1)) resolution = 32 -ms = mpb.ModeSolver(num_bands=num_bands, - k_points=k_points, - geometry=geometry, - geometry_lattice=geometry_lattice, - resolution=resolution) +ms = mpb.ModeSolver( + num_bands=num_bands, + k_points=k_points, + geometry=geometry, + geometry_lattice=geometry_lattice, + resolution=resolution, +) print_heading("Square lattice of rods: TE bands") ms.run_te() @@ -48,21 +52,25 @@ def print_heading(h): print_heading("Triangular lattice of rods in air") -ms.geometry_lattice = mp.Lattice(size=mp.Vector3(1, 1), - basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), - basis2=mp.Vector3(math.sqrt(3) / 2, -0.5)) +ms.geometry_lattice = mp.Lattice( + size=mp.Vector3(1, 1), + basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), + basis2=mp.Vector3(math.sqrt(3) / 2, -0.5), +) -ms.k_points = [mp.Vector3(), # Gamma - mp.Vector3(y=0.5), # M - mp.Vector3(-1 / 3, 1 / 3), # K - mp.Vector3()] # Gamma +ms.k_points = [ + mp.Vector3(), # Gamma + mp.Vector3(y=0.5), # M + mp.Vector3(-1 / 3, 1 / 3), # K + mp.Vector3(), +] # Gamma ms.k_points = mp.interpolate(4, k_points) ms.run_tm() # Maximizing the First TM Gap -print_heading('Maximizing the first TM gap') +print_heading("Maximizing the first TM gap") def first_tm_gap(r): @@ -70,18 +78,21 @@ def first_tm_gap(r): ms.run_tm() return -1 * ms.retrieve_gap(1) + ms.num_bands = 2 ms.mesh_size = 7 -result = minimize_scalar(first_tm_gap, method='bounded', bounds=[0.1, 0.5], options={'xatol': 0.1}) -print("radius at maximum: {}".format(result.x)) -print("gap size at maximum: {}".format(result.fun * -1)) +result = minimize_scalar( + first_tm_gap, method="bounded", bounds=[0.1, 0.5], options={"xatol": 0.1} +) +print(f"radius at maximum: {result.x}") +print(f"gap size at maximum: {result.fun * -1}") ms.mesh_size = 3 # Reset to default value of 3 # A Complete 2D Gap with an Anisotropic Dielectric -print_heading('Anisotropic complete 2d gap') +print_heading("Anisotropic complete 2d gap") ms.geometry = [mp.Cylinder(0.3, material=mp.Medium(epsilon_diag=mp.Vector3(1, 1, 12)))] @@ -91,7 +102,7 @@ def first_tm_gap(r): # Finding a Point-defect State -print_heading('5x5 point defect') +print_heading("5x5 point defect") ms.geometry_lattice = mp.Lattice(size=mp.Vector3(5, 5)) ms.geometry = [mp.Cylinder(0.2, material=mp.Medium(epsilon=12))] @@ -110,9 +121,9 @@ def first_tm_gap(r): ms.get_dfield(25) # compute the D field for band 25 ms.compute_field_energy() # compute the energy density from D c = mp.Cylinder(1.0, material=mp.air) -print("energy in cylinder: {}".format(ms.compute_energy_in_objects([c]))) +print(f"energy in cylinder: {ms.compute_energy_in_objects([c])}") -print_heading('5x5 point defect, targeted solver') +print_heading("5x5 point defect, targeted solver") ms.num_bands = 1 # only need to compute a single band, now! ms.target_freq = (0.2812 + 0.4174) / 2 @@ -121,7 +132,7 @@ def first_tm_gap(r): # Tuning the Point-defect Mode -print_heading('Tuning the 5x5 point defect') +print_heading("Tuning the 5x5 point defect") old_geometry = ms.geometry # save the 5x5 grid with a missing rod @@ -130,11 +141,12 @@ def rootfun(eps): # add the cylinder of epsilon = eps to the old geometry: ms.geometry = old_geometry + [mp.Cylinder(0.2, material=mp.Medium(epsilon=eps))] ms.run_tm() # solve for the mode (using the targeted solver) - print("epsilon = {} gives freq. = {}".format(eps, ms.get_freqs()[0])) + print(f"epsilon = {eps} gives freq. = {ms.get_freqs()[0]}") return ms.get_freqs()[0] - 0.314159 # return 1st band freq. - 0.314159 + rooteps = ridder(rootfun, 1, 12) -print("root (value of epsilon) is at: {}".format(rooteps)) +print(f"root (value of epsilon) is at: {rooteps}") rootval = rootfun(rooteps) -print("root function at {} = {}".format(rooteps, rootval)) +print(f"root function at {rooteps} = {rootval}") diff --git a/python/examples/multilevel-atom.py b/python/examples/multilevel-atom.py index d3326a3c6..0dc2f8784 100644 --- a/python/examples/multilevel-atom.py +++ b/python/examples/multilevel-atom.py @@ -1,16 +1,15 @@ -from __future__ import division - import math + import meep as mp # This file realizes a 1D, one-sided Fabry-Perot laser, as described in Fig. 2 of Optics Express, Vol. 20, pp. 474-88, 2012. # Cavity definitions resolution = 400 -ncav = 1.5 # cavity refractive index -Lcav = 1 # cavity length -dpad = 1 # padding thickness -dpml = 1 # PML thickness +ncav = 1.5 # cavity refractive index +Lcav = 1 # cavity length +dpad = 1 # padding thickness +dpml = 1 # PML thickness sz = Lcav + dpad + dpml cell_size = mp.Vector3(z=sz) dimensions = 1 @@ -24,15 +23,17 @@ # These different conventions can cause a bit of confusion when comparing against SALT, so here we perform # this transformation explicitly. -omega_a = 40 # omega_a in SALT -freq_21 = omega_a/(2*math.pi) # emission frequency (units of 2πc/a) +omega_a = 40 # omega_a in SALT +freq_21 = omega_a / (2 * math.pi) # emission frequency (units of 2πc/a) -gamma_perp = 4 # HWHM in angular frequency, SALT -gamma_21 = (2*gamma_perp)/(2*math.pi) # FWHM emission linewidth in sec^-1 (units of 2πc/a) +gamma_perp = 4 # HWHM in angular frequency, SALT +gamma_21 = (2 * gamma_perp) / ( + 2 * math.pi +) # FWHM emission linewidth in sec^-1 (units of 2πc/a) # Note that 2*pi*gamma_21 = 2*gamma_perp in SALT. -theta = 1 # theta, the off-diagonal dipole matrix element, in SALT -sigma_21 = 2*theta*theta*omega_a # dipole coupling strength (hbar = 1) +theta = 1 # theta, the off-diagonal dipole matrix element, in SALT +sigma_21 = 2 * theta * theta * omega_a # dipole coupling strength (hbar = 1) # The gain medium in MEEP is allowed to have an arbitrary number of levels, and is not # restricted to a two-level gain medium, as it simulates the populations of every individual @@ -55,32 +56,49 @@ # Gain medium pump and decay rates are specified in units of c/a. -rate_21 = 0.005 # non-radiative rate (units of c/a) -N0 = 37 # initial population density of ground state -Rp = 0.0051 # pumping rate of ground to excited state +rate_21 = 0.005 # non-radiative rate (units of c/a) +N0 = 37 # initial population density of ground state +Rp = 0.0051 # pumping rate of ground to excited state # so for example, these parameters have D_0 (SALT) = 0.0693. # Make the actual medium in MEEP: -transitions = [mp.Transition(1, 2, pumping_rate=Rp, frequency=freq_21, gamma=gamma_21, - sigma_diag=mp.Vector3(sigma_21,0,0)), - mp.Transition(2, 1, transition_rate=rate_21)] +transitions = [ + mp.Transition( + 1, + 2, + pumping_rate=Rp, + frequency=freq_21, + gamma=gamma_21, + sigma_diag=mp.Vector3(sigma_21, 0, 0), + ), + mp.Transition(2, 1, transition_rate=rate_21), +] ml_atom = mp.MultilevelAtom(sigma=1, transitions=transitions, initial_populations=[N0]) two_level = mp.Medium(index=ncav, E_susceptibilities=[ml_atom]) # Specify the cavity geometry: -geometry = [mp.Block(center=mp.Vector3(z=-0.5*sz+0.5*Lcav), - size=mp.Vector3(mp.inf,mp.inf,Lcav), material=two_level)] - -sim = mp.Simulation(cell_size=cell_size, - resolution=resolution, - boundary_layers=pml_layers, - geometry=geometry, - dimensions=dimensions) +geometry = [ + mp.Block( + center=mp.Vector3(z=-0.5 * sz + 0.5 * Lcav), + size=mp.Vector3(mp.inf, mp.inf, Lcav), + material=two_level, + ) +] + +sim = mp.Simulation( + cell_size=cell_size, + resolution=resolution, + boundary_layers=pml_layers, + geometry=geometry, + dimensions=dimensions, +) sim.init_sim() + def field_func(p): - return 1 if p.z==-0.5*sz + 0.5*Lcav else 0 + return 1 if p.z == -0.5 * sz + 0.5 * Lcav else 0 + sim.fields.initialize_field(mp.Ex, field_func) @@ -89,8 +107,12 @@ def field_func(p): # Note that the total number of time steps run is endt*resolution*2. This is the origin of the extra # factor of 2 in the definition of dt in fieldfft_meep.m. + def print_field(sim): - fp = sim.get_field_point(mp.Ex, mp.Vector3(z=(-0.5 * sz) + Lcav + (0.5 * dpad))).real - print("field:, {}, {}".format(sim.meep_time(), fp)) + fp = sim.get_field_point( + mp.Ex, mp.Vector3(z=(-0.5 * sz) + Lcav + (0.5 * dpad)) + ).real + print(f"field:, {sim.meep_time()}, {fp}") + sim.run(mp.after_time(endt - 250, print_field), until=endt) diff --git a/python/examples/oblique-planewave.py b/python/examples/oblique-planewave.py index 4b3b971d4..b5dec9451 100644 --- a/python/examples/oblique-planewave.py +++ b/python/examples/oblique-planewave.py @@ -1,47 +1,53 @@ -import meep as mp -import numpy as np import matplotlib.pyplot as plt +import numpy as np + +import meep as mp -resolution = 50 # pixels/μm +resolution = 50 # pixels/μm -cell_size = mp.Vector3(14,10,0) +cell_size = mp.Vector3(14, 10, 0) -pml_layers = [mp.PML(thickness=2,direction=mp.X)] +pml_layers = [mp.PML(thickness=2, direction=mp.X)] # rotation angle (in degrees) of planewave, counter clockwise (CCW) around z-axis rot_angle = np.radians(0) -fsrc = 1.0 # frequency of planewave (wavelength = 1/fsrc) +fsrc = 1.0 # frequency of planewave (wavelength = 1/fsrc) -n = 1.5 # refractive index of homogeneous material +n = 1.5 # refractive index of homogeneous material default_material = mp.Medium(index=n) -k_point = mp.Vector3(fsrc*n).rotate(mp.Vector3(z=1), rot_angle) - -sources = [mp.EigenModeSource(src=mp.ContinuousSource(fsrc), - center=mp.Vector3(), - size=mp.Vector3(y=10), - direction=mp.AUTOMATIC if rot_angle == 0 else mp.NO_DIRECTION, - eig_kpoint=k_point, - eig_band=1, - eig_parity=mp.EVEN_Y+mp.ODD_Z if rot_angle == 0 else mp.ODD_Z, - eig_match_freq=True)] - -sim = mp.Simulation(cell_size=cell_size, - resolution=resolution, - boundary_layers=pml_layers, - sources=sources, - k_point=k_point, - default_material=default_material, - symmetries=[mp.Mirror(mp.Y)] if rot_angle == 0 else []) +k_point = mp.Vector3(fsrc * n).rotate(mp.Vector3(z=1), rot_angle) + +sources = [ + mp.EigenModeSource( + src=mp.ContinuousSource(fsrc), + center=mp.Vector3(), + size=mp.Vector3(y=10), + direction=mp.AUTOMATIC if rot_angle == 0 else mp.NO_DIRECTION, + eig_kpoint=k_point, + eig_band=1, + eig_parity=mp.EVEN_Y + mp.ODD_Z if rot_angle == 0 else mp.ODD_Z, + eig_match_freq=True, + ) +] + +sim = mp.Simulation( + cell_size=cell_size, + resolution=resolution, + boundary_layers=pml_layers, + sources=sources, + k_point=k_point, + default_material=default_material, + symmetries=[mp.Mirror(mp.Y)] if rot_angle == 0 else [], +) sim.run(until=100) -nonpml_vol = mp.Volume(center=mp.Vector3(), size=mp.Vector3(10,10,0)) +nonpml_vol = mp.Volume(center=mp.Vector3(), size=mp.Vector3(10, 10, 0)) -sim.plot2D(fields=mp.Ez, - output_plane=nonpml_vol) +sim.plot2D(fields=mp.Ez, output_plane=nonpml_vol) if mp.am_master(): - plt.axis('off') - plt.savefig('pw.png',bbox_inches='tight') + plt.axis("off") + plt.savefig("pw.png", bbox_inches="tight") diff --git a/python/examples/oblique-source.py b/python/examples/oblique-source.py index 243825dc0..7e5a28da0 100644 --- a/python/examples/oblique-source.py +++ b/python/examples/oblique-source.py @@ -1,67 +1,96 @@ -import meep as mp -import numpy as np import matplotlib.pyplot as plt +import numpy as np + +import meep as mp -resolution = 50 # pixels/μm +resolution = 50 # pixels/μm -cell_size = mp.Vector3(14,14) +cell_size = mp.Vector3(14, 14) pml_layers = [mp.PML(thickness=2)] # rotation angle (in degrees) of waveguide, counter clockwise (CCW) around z-axis rot_angle = np.radians(20) -w = 1.0 # width of waveguide +w = 1.0 # width of waveguide -geometry = [mp.Block(center=mp.Vector3(), - size=mp.Vector3(mp.inf,w,mp.inf), - e1=mp.Vector3(x=1).rotate(mp.Vector3(z=1), rot_angle), - e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), rot_angle), - material=mp.Medium(epsilon=12))] +geometry = [ + mp.Block( + center=mp.Vector3(), + size=mp.Vector3(mp.inf, w, mp.inf), + e1=mp.Vector3(x=1).rotate(mp.Vector3(z=1), rot_angle), + e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), rot_angle), + material=mp.Medium(epsilon=12), + ) +] -fsrc = 0.15 # frequency of eigenmode or constant-amplitude source -bnum = 1 # band number of eigenmode +fsrc = 0.15 # frequency of eigenmode or constant-amplitude source +bnum = 1 # band number of eigenmode kpoint = mp.Vector3(x=1).rotate(mp.Vector3(z=1), rot_angle) -compute_flux = True # compute flux (True) or plot the field profile (False) +compute_flux = True # compute flux (True) or plot the field profile (False) -eig_src = True # eigenmode (True) or constant-amplitude (False) source +eig_src = True # eigenmode (True) or constant-amplitude (False) source if eig_src: - sources = [mp.EigenModeSource(src=mp.GaussianSource(fsrc,fwidth=0.2*fsrc) if compute_flux else mp.ContinuousSource(fsrc), - center=mp.Vector3(), - size=mp.Vector3(y=3*w), - direction=mp.NO_DIRECTION, - eig_kpoint=kpoint, - eig_band=bnum, - eig_parity=mp.EVEN_Y+mp.ODD_Z if rot_angle == 0 else mp.ODD_Z, - eig_match_freq=True)] + sources = [ + mp.EigenModeSource( + src=mp.GaussianSource(fsrc, fwidth=0.2 * fsrc) + if compute_flux + else mp.ContinuousSource(fsrc), + center=mp.Vector3(), + size=mp.Vector3(y=3 * w), + direction=mp.NO_DIRECTION, + eig_kpoint=kpoint, + eig_band=bnum, + eig_parity=mp.EVEN_Y + mp.ODD_Z if rot_angle == 0 else mp.ODD_Z, + eig_match_freq=True, + ) + ] else: - sources = [mp.Source(src=mp.GaussianSource(fsrc,fwidth=0.2*fsrc) if compute_flux else mp.ContinuousSource(fsrc), - center=mp.Vector3(), - size=mp.Vector3(y=3*w), - component=mp.Ez)] + sources = [ + mp.Source( + src=mp.GaussianSource(fsrc, fwidth=0.2 * fsrc) + if compute_flux + else mp.ContinuousSource(fsrc), + center=mp.Vector3(), + size=mp.Vector3(y=3 * w), + component=mp.Ez, + ) + ] -sim = mp.Simulation(cell_size=cell_size, - resolution=resolution, - boundary_layers=pml_layers, - sources=sources, - geometry=geometry, - symmetries=[mp.Mirror(mp.Y)] if rot_angle == 0 else []) +sim = mp.Simulation( + cell_size=cell_size, + resolution=resolution, + boundary_layers=pml_layers, + sources=sources, + geometry=geometry, + symmetries=[mp.Mirror(mp.Y)] if rot_angle == 0 else [], +) if compute_flux: - tran = sim.add_flux(fsrc, 0, 1, mp.FluxRegion(center=mp.Vector3(x=5), size=mp.Vector3(y=14))) + tran = sim.add_flux( + fsrc, 0, 1, mp.FluxRegion(center=mp.Vector3(x=5), size=mp.Vector3(y=14)) + ) sim.run(until_after_sources=50) - res = sim.get_eigenmode_coefficients(tran, - [1], - eig_parity=mp.EVEN_Y+mp.ODD_Z if rot_angle == 0 else mp.ODD_Z, - direction=mp.NO_DIRECTION, - kpoint_func=lambda f,n: kpoint) - print("flux:, {:.6f}, {:.6f}".format(mp.get_fluxes(tran)[0],abs(res.alpha[0,0,0])**2)) + res = sim.get_eigenmode_coefficients( + tran, + [1], + eig_parity=mp.EVEN_Y + mp.ODD_Z if rot_angle == 0 else mp.ODD_Z, + direction=mp.NO_DIRECTION, + kpoint_func=lambda f, n: kpoint, + ) + print( + "flux:, {:.6f}, {:.6f}".format( + mp.get_fluxes(tran)[0], abs(res.alpha[0, 0, 0]) ** 2 + ) + ) else: sim.run(until=100) - sim.plot2D(output_plane=mp.Volume(center=mp.Vector3(), size=mp.Vector3(10,10)), - fields=mp.Ez, - field_parameters={'alpha':0.9}) + sim.plot2D( + output_plane=mp.Volume(center=mp.Vector3(), size=mp.Vector3(10, 10)), + fields=mp.Ez, + field_parameters={"alpha": 0.9}, + ) plt.show() diff --git a/python/examples/parallel-wvgs-force.py b/python/examples/parallel-wvgs-force.py index c7a3e2a42..99200c32d 100644 --- a/python/examples/parallel-wvgs-force.py +++ b/python/examples/parallel-wvgs-force.py @@ -1,96 +1,117 @@ -import meep as mp -import numpy as np import matplotlib.pyplot as plt +import numpy as np + +import meep as mp + +resolution = 40 # pixels/μm -resolution = 40 # pixels/μm - Si = mp.Medium(index=3.45) dpml = 1.0 pml_layers = [mp.PML(dpml)] - + sx = 5 sy = 3 -cell = mp.Vector3(sx+2*dpml,sy+2*dpml,0) +cell = mp.Vector3(sx + 2 * dpml, sy + 2 * dpml, 0) -a = 1.0 # waveguide width/height +a = 1.0 # waveguide width/height k_point = mp.Vector3(z=0.5) -def parallel_waveguide(s,xodd): - geometry = [mp.Block(center=mp.Vector3(-0.5*(s+a)), - size=mp.Vector3(a,a,mp.inf), - material=Si), - mp.Block(center=mp.Vector3(0.5*(s+a)), - size=mp.Vector3(a,a,mp.inf), - material=Si)] - - symmetries = [mp.Mirror(mp.X, phase=-1 if xodd else 1), - mp.Mirror(mp.Y, phase=-1)] - sim = mp.Simulation(resolution=resolution, - cell_size=cell, - geometry=geometry, - boundary_layers=pml_layers, - symmetries=symmetries, - k_point=k_point) +def parallel_waveguide(s, xodd): + geometry = [ + mp.Block( + center=mp.Vector3(-0.5 * (s + a)), + size=mp.Vector3(a, a, mp.inf), + material=Si, + ), + mp.Block( + center=mp.Vector3(0.5 * (s + a)), size=mp.Vector3(a, a, mp.inf), material=Si + ), + ] + + symmetries = [mp.Mirror(mp.X, phase=-1 if xodd else 1), mp.Mirror(mp.Y, phase=-1)] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell, + geometry=geometry, + boundary_layers=pml_layers, + symmetries=symmetries, + k_point=k_point, + ) sim.init_sim() - EigenmodeData = sim.get_eigenmode(0.22, - mp.Z, - mp.Volume(center=mp.Vector3(), size=mp.Vector3(sx,sy)), - 2 if xodd else 1, - k_point, - match_frequency=False, - parity=mp.ODD_Y) + EigenmodeData = sim.get_eigenmode( + 0.22, + mp.Z, + mp.Volume(center=mp.Vector3(), size=mp.Vector3(sx, sy)), + 2 if xodd else 1, + k_point, + match_frequency=False, + parity=mp.ODD_Y, + ) fcen = EigenmodeData.freq - print("freq:, {}, {}, {}".format("xodd" if xodd else "xeven", s, fcen)) + print(f'freq:, {"xodd" if xodd else "xeven"}, {s}, {fcen}') sim.reset_meep() - eig_sources = [mp.EigenModeSource(src=mp.GaussianSource(fcen, fwidth=0.1*fcen), - size=mp.Vector3(sx,sy), - center=mp.Vector3(), - eig_band=2 if xodd else 1, - eig_kpoint=k_point, - eig_match_freq=False, - eig_parity=mp.ODD_Y)] + eig_sources = [ + mp.EigenModeSource( + src=mp.GaussianSource(fcen, fwidth=0.1 * fcen), + size=mp.Vector3(sx, sy), + center=mp.Vector3(), + eig_band=2 if xodd else 1, + eig_kpoint=k_point, + eig_match_freq=False, + eig_parity=mp.ODD_Y, + ) + ] sim.change_sources(eig_sources) - flux_reg = mp.FluxRegion(direction=mp.Z, center=mp.Vector3(), size=mp.Vector3(sx,sy)) + flux_reg = mp.FluxRegion( + direction=mp.Z, center=mp.Vector3(), size=mp.Vector3(sx, sy) + ) wvg_flux = sim.add_flux(fcen, 0, 1, flux_reg) - force_reg1 = mp.ForceRegion(mp.Vector3(0.49*s), direction=mp.X, weight=1, size=mp.Vector3(y=sy)) - force_reg2 = mp.ForceRegion(mp.Vector3(0.5*s+1.01*a), direction=mp.X, weight=-1, size=mp.Vector3(y=sy)) + force_reg1 = mp.ForceRegion( + mp.Vector3(0.49 * s), direction=mp.X, weight=1, size=mp.Vector3(y=sy) + ) + force_reg2 = mp.ForceRegion( + mp.Vector3(0.5 * s + 1.01 * a), direction=mp.X, weight=-1, size=mp.Vector3(y=sy) + ) wvg_force = sim.add_force(fcen, 0, 1, force_reg1, force_reg2) sim.run(until_after_sources=1500) flux = mp.get_fluxes(wvg_flux)[0] force = mp.get_forces(wvg_force)[0] - print("data:, {}, {}, {}, {}, {}".format("xodd" if xodd else "xeven", s, flux, force, -force/flux)) + print( + f'data:, {"xodd" if xodd else "xeven"}, {s}, {flux}, {force}, {-force / flux}' + ) sim.reset_meep() return flux, force -s = np.arange(0.05,1.05,0.05) +s = np.arange(0.05, 1.05, 0.05) fluxes_odd = np.zeros(s.size) forces_odd = np.zeros(s.size) fluxes_even = np.zeros(s.size) forces_even = np.zeros(s.size) for k in range(len(s)): - fluxes_odd[k], forces_odd[k] = parallel_waveguide(s[k],True) - fluxes_even[k], forces_even[k] = parallel_waveguide(s[k],False) + fluxes_odd[k], forces_odd[k] = parallel_waveguide(s[k], True) + fluxes_even[k], forces_even[k] = parallel_waveguide(s[k], False) plt.figure(dpi=150) -plt.plot(s,-forces_odd/fluxes_odd,'rs',label='anti-symmetric') -plt.plot(s,-forces_even/fluxes_even,'bo',label='symmetric') +plt.plot(s, -forces_odd / fluxes_odd, "rs", label="anti-symmetric") +plt.plot(s, -forces_even / fluxes_even, "bo", label="symmetric") plt.grid(True) -plt.xlabel('waveguide separation s/a') -plt.ylabel('optical force (F/L)(ac/P)') -plt.legend(loc='upper right') +plt.xlabel("waveguide separation s/a") +plt.ylabel("optical force (F/L)(ac/P)") +plt.legend(loc="upper right") plt.show() diff --git a/python/examples/parallel-wvgs-mpb.py b/python/examples/parallel-wvgs-mpb.py index 1436b908c..84420fe26 100644 --- a/python/examples/parallel-wvgs-mpb.py +++ b/python/examples/parallel-wvgs-mpb.py @@ -1,35 +1,43 @@ -# -*- coding: utf-8 -*- +import matplotlib.pyplot as plt +import numpy as np import meep as mp from meep import mpb -import numpy as np -import matplotlib.pyplot as plt resolution = 128 # pixels/μm Si = mp.Medium(index=3.45) syz = 10 -geometry_lattice = mp.Lattice(size=mp.Vector3(0,syz,syz)) +geometry_lattice = mp.Lattice(size=mp.Vector3(0, syz, syz)) k_points = [mp.Vector3(0.5)] a = 1.0 # waveguide width -def parallel_waveguide(s,yodd): - geometry = [mp.Block(center=mp.Vector3(0,-0.5*(s+a),0), - size=mp.Vector3(mp.inf,a,a), - material=Si), - mp.Block(center=mp.Vector3(0,0.5*(s+a),0), - size=mp.Vector3(mp.inf,a,a), - material=Si)] - - ms = mpb.ModeSolver(resolution=resolution, - k_points=k_points, - geometry_lattice=geometry_lattice, - geometry=geometry, - num_bands=1, - tolerance=1e-9) + +def parallel_waveguide(s, yodd): + geometry = [ + mp.Block( + center=mp.Vector3(0, -0.5 * (s + a), 0), + size=mp.Vector3(mp.inf, a, a), + material=Si, + ), + mp.Block( + center=mp.Vector3(0, 0.5 * (s + a), 0), + size=mp.Vector3(mp.inf, a, a), + material=Si, + ), + ] + + ms = mpb.ModeSolver( + resolution=resolution, + k_points=k_points, + geometry_lattice=geometry_lattice, + geometry=geometry, + num_bands=1, + tolerance=1e-9, + ) if yodd: ms.run_yodd_zodd() @@ -37,11 +45,12 @@ def parallel_waveguide(s,yodd): ms.run_yeven_zodd() f = ms.get_freqs()[0] - vg = ms.compute_group_velocity_component(mp.Vector3(1,0,0))[0] + vg = ms.compute_group_velocity_component(mp.Vector3(1, 0, 0))[0] + + return f, vg - return f,vg -ss = np.arange(0.025,1.075,0.05) +ss = np.arange(0.025, 1.075, 0.05) f_odd = np.zeros(len(ss)) vg_odd = np.zeros(len(ss)) @@ -49,26 +58,28 @@ def parallel_waveguide(s,yodd): vg_even = np.zeros(len(ss)) for j in range(len(ss)): - f_odd[j], vg_odd[j] = parallel_waveguide(ss[j],True) - f_even[j], vg_even[j] = parallel_waveguide(ss[j],False) + f_odd[j], vg_odd[j] = parallel_waveguide(ss[j], True) + f_even[j], vg_even[j] = parallel_waveguide(ss[j], False) + +ds = ss[1] - ss[0] + -ds = ss[1]-ss[0] +def compute_force(f, vg): + f_avg = 0.5 * (f[:-1] + f[1:]) + df = f[1:] - f[:-1] + vg_avg = 0.5 * (vg[:-1] + vg[1:]) + return -1 / f_avg * df / ds * 1 / vg_avg -def compute_force(f,vg): - f_avg = 0.5*(f[:-1]+f[1:]) - df = f[1:]-f[:-1] - vg_avg = 0.5*(vg[:-1]+vg[1:]) - return -1/f_avg * df/ds * 1/vg_avg -force_odd = compute_force(f_odd,vg_odd) -force_even = compute_force(f_even,vg_even) +force_odd = compute_force(f_odd, vg_odd) +force_even = compute_force(f_even, vg_even) plt.figure(dpi=200) -plt.plot(ss[:-1],force_odd,'b-',label='anti-symmetric') -plt.plot(ss[:-1],force_even,'r-',label='symmetric') +plt.plot(ss[:-1], force_odd, "b-", label="anti-symmetric") +plt.plot(ss[:-1], force_even, "r-", label="symmetric") plt.xlabel("waveguide separation s/a") plt.ylabel("optical force (F/L)(ac/P)") -plt.legend(loc='upper right') -plt.xticks(np.arange(0,1.2,0.2)) -plt.yticks(np.arange(-1.5,1.0,0.5)) +plt.legend(loc="upper right") +plt.xticks(np.arange(0, 1.2, 0.2)) +plt.yticks(np.arange(-1.5, 1.0, 0.5)) plt.show() diff --git a/python/examples/perturbation_theory.py b/python/examples/perturbation_theory.py index b6a7d5e4f..5782b48ab 100644 --- a/python/examples/perturbation_theory.py +++ b/python/examples/perturbation_theory.py @@ -1,52 +1,63 @@ -import meep as mp -import numpy as np import argparse +import numpy as np + +import meep as mp + def main(args): if args.perpendicular: src_cmpt = mp.Hz - fcen = 0.21 # pulse center frequency + fcen = 0.21 # pulse center frequency else: src_cmpt = mp.Ez - fcen = 0.17 # pulse center frequency + fcen = 0.17 # pulse center frequency - n = 3.4 # index of waveguide - w = 1 # ring width - r = 1 # inner radius of ring - pad = 4 # padding between waveguide and edge of PML - dpml = 2 # thickness of PML - m = 5 # angular dependence + n = 3.4 # index of waveguide + w = 1 # ring width + r = 1 # inner radius of ring + pad = 4 # padding between waveguide and edge of PML + dpml = 2 # thickness of PML + m = 5 # angular dependence pml_layers = [mp.PML(dpml)] - sr = r + w + pad + dpml # radial size (cell is from 0 to sr) - dimensions = mp.CYLINDRICAL # coordinate system is (r,phi,z) instead of (x,y,z) + sr = r + w + pad + dpml # radial size (cell is from 0 to sr) + dimensions = mp.CYLINDRICAL # coordinate system is (r,phi,z) instead of (x,y,z) cell = mp.Vector3(sr) - geometry = [mp.Block(center=mp.Vector3(r + (w / 2)), - size=mp.Vector3(w, mp.inf, mp.inf), - material=mp.Medium(index=n))] + geometry = [ + mp.Block( + center=mp.Vector3(r + (w / 2)), + size=mp.Vector3(w, mp.inf, mp.inf), + material=mp.Medium(index=n), + ) + ] # find resonant frequency of unperturbed geometry using broadband source - df = 0.2*fcen # pulse width (in frequency) - - sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df), - component=src_cmpt, - center=mp.Vector3(r+0.1))] - - sim = mp.Simulation(cell_size=cell, - geometry=geometry, - boundary_layers=pml_layers, - resolution=args.res, - sources=sources, - dimensions=dimensions, - m=m) - - h = mp.Harminv(src_cmpt, mp.Vector3(r+0.1), fcen, df) - sim.run(mp.after_sources(h), - until_after_sources=100) + df = 0.2 * fcen # pulse width (in frequency) + + sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=src_cmpt, + center=mp.Vector3(r + 0.1), + ) + ] + + sim = mp.Simulation( + cell_size=cell, + geometry=geometry, + boundary_layers=pml_layers, + resolution=args.res, + sources=sources, + dimensions=dimensions, + m=m, + ) + + h = mp.Harminv(src_cmpt, mp.Vector3(r + 0.1), fcen, df) + sim.run(mp.after_sources(h), until_after_sources=100) frq_unperturbed = h.modes[0].freq @@ -55,34 +66,68 @@ def main(args): # unperturbed geometry with narrowband source centered at resonant frequency fcen = frq_unperturbed - df = 0.05*fcen - - sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df), - component=src_cmpt, - center=mp.Vector3(r+0.1))] - - sim = mp.Simulation(cell_size=cell, - geometry=geometry, - boundary_layers=pml_layers, - resolution=args.res, - sources=sources, - dimensions=dimensions, - m=m) + df = 0.05 * fcen + + sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=src_cmpt, + center=mp.Vector3(r + 0.1), + ) + ] + + sim = mp.Simulation( + cell_size=cell, + geometry=geometry, + boundary_layers=pml_layers, + resolution=args.res, + sources=sources, + dimensions=dimensions, + m=m, + ) sim.run(until_after_sources=100) deps = 1 - n**2 - deps_inv = 1 - 1/n**2 + deps_inv = 1 - 1 / n**2 if args.perpendicular: - para_integral = deps*2*np.pi*(r*abs(sim.get_field_point(mp.Ep, mp.Vector3(r)))**2 - (r+w)*abs(sim.get_field_point(mp.Ep, mp.Vector3(r+w)))**2) - perp_integral = deps_inv*2*np.pi*(-r*abs(sim.get_field_point(mp.Dr, mp.Vector3(r)))**2 + (r+w)*abs(sim.get_field_point(mp.Dr, mp.Vector3(r+w)))**2) + para_integral = ( + deps + * 2 + * np.pi + * ( + r * abs(sim.get_field_point(mp.Ep, mp.Vector3(r))) ** 2 + - (r + w) * abs(sim.get_field_point(mp.Ep, mp.Vector3(r + w))) ** 2 + ) + ) + perp_integral = ( + deps_inv + * 2 + * np.pi + * ( + -r * abs(sim.get_field_point(mp.Dr, mp.Vector3(r))) ** 2 + + (r + w) * abs(sim.get_field_point(mp.Dr, mp.Vector3(r + w))) ** 2 + ) + ) numerator_integral = para_integral + perp_integral else: - numerator_integral = deps*2*np.pi*(r*abs(sim.get_field_point(mp.Ez, mp.Vector3(r)))**2 - (r+w)*abs(sim.get_field_point(mp.Ez, mp.Vector3(r+w)))**2) - - denominator_integral = sim.electric_energy_in_box(center=mp.Vector3(0.5*sr), size=mp.Vector3(sr)) - perturb_theory_dw_dR = -frq_unperturbed * numerator_integral / (4 * denominator_integral) + numerator_integral = ( + deps + * 2 + * np.pi + * ( + r * abs(sim.get_field_point(mp.Ez, mp.Vector3(r))) ** 2 + - (r + w) * abs(sim.get_field_point(mp.Ez, mp.Vector3(r + w))) ** 2 + ) + ) + + denominator_integral = sim.electric_energy_in_box( + center=mp.Vector3(0.5 * sr), size=mp.Vector3(sr) + ) + perturb_theory_dw_dR = ( + -frq_unperturbed * numerator_integral / (4 * denominator_integral) + ) sim.reset_meep() @@ -90,35 +135,53 @@ def main(args): dr = 0.01 - sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df), - component=src_cmpt, - center=mp.Vector3(r + dr + 0.1))] - - geometry = [mp.Block(center=mp.Vector3(r + dr + (w / 2)), - size=mp.Vector3(w, mp.inf, mp.inf), - material=mp.Medium(index=n))] - - sim = mp.Simulation(cell_size=cell, - geometry=geometry, - boundary_layers=pml_layers, - resolution=args.res, - sources=sources, - dimensions=dimensions, - m=m) - - h = mp.Harminv(src_cmpt, mp.Vector3(r+dr+0.1), fcen, df) - sim.run(mp.after_sources(h), - until_after_sources=100) + sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=src_cmpt, + center=mp.Vector3(r + dr + 0.1), + ) + ] + + geometry = [ + mp.Block( + center=mp.Vector3(r + dr + (w / 2)), + size=mp.Vector3(w, mp.inf, mp.inf), + material=mp.Medium(index=n), + ) + ] + + sim = mp.Simulation( + cell_size=cell, + geometry=geometry, + boundary_layers=pml_layers, + resolution=args.res, + sources=sources, + dimensions=dimensions, + m=m, + ) + + h = mp.Harminv(src_cmpt, mp.Vector3(r + dr + 0.1), fcen, df) + sim.run(mp.after_sources(h), until_after_sources=100) frq_perturbed = h.modes[0].freq finite_diff_dw_dR = (frq_perturbed - frq_unperturbed) / dr - print("dwdR:, {} (pert. theory), {} (finite diff.)".format(perturb_theory_dw_dR,finite_diff_dw_dR)) + print( + f"dwdR:, {perturb_theory_dw_dR} (pert. theory), {finite_diff_dw_dR} (finite diff.)" + ) + -if __name__ == '__main__': +if __name__ == "__main__": parser = argparse.ArgumentParser() - parser.add_argument('-perpendicular', action='store_true', help='use perpendicular field source (default: parallel field source)') - parser.add_argument('-res', type=int, default=100, help='resolution (default: 100 pixels/um)') + parser.add_argument( + "-perpendicular", + action="store_true", + help="use perpendicular field source (default: parallel field source)", + ) + parser.add_argument( + "-res", type=int, default=100, help="resolution (default: 100 pixels/um)" + ) args = parser.parse_args() main(args) diff --git a/python/examples/perturbation_theory_2d.py b/python/examples/perturbation_theory_2d.py index 13f2d5d2f..08cb3a5ea 100644 --- a/python/examples/perturbation_theory_2d.py +++ b/python/examples/perturbation_theory_2d.py @@ -1,61 +1,73 @@ -import meep as mp -import numpy as np import argparse +import numpy as np + +import meep as mp + def main(args): if args.perpendicular: src_cmpt = mp.Hz - fcen = 0.21 # pulse center frequency + fcen = 0.21 # pulse center frequency else: src_cmpt = mp.Ez - fcen = 0.17 # pulse center frequency + fcen = 0.17 # pulse center frequency - n = 3.4 # index of waveguide - w = 1 # ring width - r = 1 # inner radius of ring - pad = 4 # padding between waveguide and edge of PML - dpml = 2 # thickness of PML + n = 3.4 # index of waveguide + w = 1 # ring width + r = 1 # inner radius of ring + pad = 4 # padding between waveguide and edge of PML + dpml = 2 # thickness of PML pml_layers = [mp.PML(dpml)] - sxy = 2*(r+w+pad+dpml) - cell_size = mp.Vector3(sxy,sxy) + sxy = 2 * (r + w + pad + dpml) + cell_size = mp.Vector3(sxy, sxy) - symmetries = [mp.Mirror(mp.X,phase=+1 if args.perpendicular else -1), - mp.Mirror(mp.Y,phase=-1 if args.perpendicular else +1)] + symmetries = [ + mp.Mirror(mp.X, phase=+1 if args.perpendicular else -1), + mp.Mirror(mp.Y, phase=-1 if args.perpendicular else +1), + ] - geometry = [mp.Cylinder(material=mp.Medium(index=n), - radius=r+w, - height=mp.inf, - center=mp.Vector3()), - mp.Cylinder(material=mp.vacuum, - radius=r, - height=mp.inf, - center=mp.Vector3())] + geometry = [ + mp.Cylinder( + material=mp.Medium(index=n), + radius=r + w, + height=mp.inf, + center=mp.Vector3(), + ), + mp.Cylinder(material=mp.vacuum, radius=r, height=mp.inf, center=mp.Vector3()), + ] # find resonant frequency of unperturbed geometry using broadband source - df = 0.2*fcen # pulse width (in frequency) - - sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), - component=src_cmpt, - center=mp.Vector3(r+0.1)), - mp.Source(mp.GaussianSource(fcen, fwidth=df), - component=src_cmpt, - center=mp.Vector3(-(r+0.1)), - amplitude=-1)] - - sim = mp.Simulation(cell_size=cell_size, - geometry=geometry, - boundary_layers=pml_layers, - resolution=args.res, - sources=sources, - symmetries=symmetries) - - h = mp.Harminv(src_cmpt, mp.Vector3(r+0.1), fcen, df) - sim.run(mp.after_sources(h), - until_after_sources=100) + df = 0.2 * fcen # pulse width (in frequency) + + sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=src_cmpt, + center=mp.Vector3(r + 0.1), + ), + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=src_cmpt, + center=mp.Vector3(-(r + 0.1)), + amplitude=-1, + ), + ] + + sim = mp.Simulation( + cell_size=cell_size, + geometry=geometry, + boundary_layers=pml_layers, + resolution=args.res, + sources=sources, + symmetries=symmetries, + ) + + h = mp.Harminv(src_cmpt, mp.Vector3(r + 0.1), fcen, df) + sim.run(mp.after_sources(h), until_after_sources=100) frq_unperturbed = h.modes[0].freq @@ -64,37 +76,73 @@ def main(args): # unperturbed geometry with narrowband source centered at resonant frequency fcen = frq_unperturbed - df = 0.05*fcen - - sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), - component=src_cmpt, - center=mp.Vector3(r+0.1)), - mp.Source(mp.GaussianSource(fcen, fwidth=df), - component=src_cmpt, - center=mp.Vector3(-(r+0.1)), - amplitude=-1)] - - sim = mp.Simulation(cell_size=cell_size, - geometry=geometry, - boundary_layers=pml_layers, - resolution=args.res, - sources=sources, - symmetries=symmetries) + df = 0.05 * fcen + + sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=src_cmpt, + center=mp.Vector3(r + 0.1), + ), + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=src_cmpt, + center=mp.Vector3(-(r + 0.1)), + amplitude=-1, + ), + ] + + sim = mp.Simulation( + cell_size=cell_size, + geometry=geometry, + boundary_layers=pml_layers, + resolution=args.res, + sources=sources, + symmetries=symmetries, + ) sim.run(until_after_sources=100) deps = 1 - n**2 - deps_inv = 1 - 1/n**2 + deps_inv = 1 - 1 / n**2 if args.perpendicular: - para_integral = deps*2*np.pi*(r*abs(sim.get_field_point(mp.Ey, mp.Vector3(r)))**2 - (r+w)*abs(sim.get_field_point(mp.Ey, mp.Vector3(r+w)))**2) - perp_integral = deps_inv*2*np.pi*(-r*abs(sim.get_field_point(mp.Dy, mp.Vector3(y=r)))**2 + (r+w)*abs(sim.get_field_point(mp.Dy, mp.Vector3(y=r+w)))**2) + para_integral = ( + deps + * 2 + * np.pi + * ( + r * abs(sim.get_field_point(mp.Ey, mp.Vector3(r))) ** 2 + - (r + w) * abs(sim.get_field_point(mp.Ey, mp.Vector3(r + w))) ** 2 + ) + ) + perp_integral = ( + deps_inv + * 2 + * np.pi + * ( + -r * abs(sim.get_field_point(mp.Dy, mp.Vector3(y=r))) ** 2 + + (r + w) * abs(sim.get_field_point(mp.Dy, mp.Vector3(y=r + w))) ** 2 + ) + ) numerator_integral = para_integral + perp_integral else: - numerator_integral = deps*2*np.pi*(r*abs(sim.get_field_point(mp.Ez, mp.Vector3(r)))**2 - (r+w)*abs(sim.get_field_point(mp.Ez, mp.Vector3(r+w)))**2) - - denominator_integral = sim.electric_energy_in_box(center=mp.Vector3(), size=mp.Vector3(sxy-2*dpml,sxy-2*dpml)) - perturb_theory_dw_dR = -frq_unperturbed * numerator_integral / (8 * denominator_integral) + numerator_integral = ( + deps + * 2 + * np.pi + * ( + r * abs(sim.get_field_point(mp.Ez, mp.Vector3(r))) ** 2 + - (r + w) * abs(sim.get_field_point(mp.Ez, mp.Vector3(r + w))) ** 2 + ) + ) + + denominator_integral = sim.electric_energy_in_box( + center=mp.Vector3(), size=mp.Vector3(sxy - 2 * dpml, sxy - 2 * dpml) + ) + perturb_theory_dw_dR = ( + -frq_unperturbed * numerator_integral / (8 * denominator_integral) + ) # perturbed geometry with narrowband source @@ -102,43 +150,62 @@ def main(args): sim.reset_meep() - sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), - component=src_cmpt, - center=mp.Vector3(r+dr+0.1)), - mp.Source(mp.GaussianSource(fcen, fwidth=df), - component=src_cmpt, - center=mp.Vector3(-(r+dr+0.1)), - amplitude=-1)] - - geometry = [mp.Cylinder(material=mp.Medium(index=n), - radius=r+dr+w, - height=mp.inf, - center=mp.Vector3()), - mp.Cylinder(material=mp.vacuum, - radius=r+dr, - height=mp.inf, - center=mp.Vector3())] - - sim = mp.Simulation(cell_size=cell_size, - geometry=geometry, - boundary_layers=pml_layers, - resolution=args.res, - sources=sources, - symmetries=symmetries) - - h = mp.Harminv(src_cmpt, mp.Vector3(r+dr+0.1), fcen, df) - sim.run(mp.after_sources(h), - until_after_sources=100) + sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=src_cmpt, + center=mp.Vector3(r + dr + 0.1), + ), + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=src_cmpt, + center=mp.Vector3(-(r + dr + 0.1)), + amplitude=-1, + ), + ] + + geometry = [ + mp.Cylinder( + material=mp.Medium(index=n), + radius=r + dr + w, + height=mp.inf, + center=mp.Vector3(), + ), + mp.Cylinder( + material=mp.vacuum, radius=r + dr, height=mp.inf, center=mp.Vector3() + ), + ] + + sim = mp.Simulation( + cell_size=cell_size, + geometry=geometry, + boundary_layers=pml_layers, + resolution=args.res, + sources=sources, + symmetries=symmetries, + ) + + h = mp.Harminv(src_cmpt, mp.Vector3(r + dr + 0.1), fcen, df) + sim.run(mp.after_sources(h), until_after_sources=100) frq_perturbed = h.modes[0].freq finite_diff_dw_dR = (frq_perturbed - frq_unperturbed) / dr - print("dwdR:, {} (pert. theory), {} (finite diff.)".format(perturb_theory_dw_dR,finite_diff_dw_dR)) + print( + f"dwdR:, {perturb_theory_dw_dR} (pert. theory), {finite_diff_dw_dR} (finite diff.)" + ) + -if __name__ == '__main__': +if __name__ == "__main__": parser = argparse.ArgumentParser() - parser.add_argument('-perpendicular', action='store_true', help='use perpendicular field source (default: parallel field source)') - parser.add_argument('-res', type=int, default=30, help='resolution (default: 30 pixels/um)') + parser.add_argument( + "-perpendicular", + action="store_true", + help="use perpendicular field source (default: parallel field source)", + ) + parser.add_argument( + "-res", type=int, default=30, help="resolution (default: 30 pixels/um)" + ) args = parser.parse_args() main(args) diff --git a/python/examples/phase_in_material.py b/python/examples/phase_in_material.py index 5f629579a..6ccdc0eb0 100644 --- a/python/examples/phase_in_material.py +++ b/python/examples/phase_in_material.py @@ -1,26 +1,25 @@ import meep as mp -cell_size = mp.Vector3(6,6,0) +cell_size = mp.Vector3(6, 6, 0) -geometry1 = [mp.Cylinder(center=mp.Vector3(),radius=1.0,material=mp.Medium(index=3.5))] +geometry1 = [ + mp.Cylinder(center=mp.Vector3(), radius=1.0, material=mp.Medium(index=3.5)) +] -sim1 = mp.Simulation(cell_size=cell_size, - geometry=geometry1, - resolution=20) +sim1 = mp.Simulation(cell_size=cell_size, geometry=geometry1, resolution=20) sim1.init_sim() -geometry2 = [mp.Cylinder(center=mp.Vector3(1,1),radius=1.0,material=mp.Medium(index=3.5))] +geometry2 = [ + mp.Cylinder(center=mp.Vector3(1, 1), radius=1.0, material=mp.Medium(index=3.5)) +] -sim2 = mp.Simulation(cell_size=cell_size, - geometry=geometry2, - resolution=20) +sim2 = mp.Simulation(cell_size=cell_size, geometry=geometry2, resolution=20) sim2.init_sim() -sim1.fields.phase_in_material(sim2.structure,10.0) - -sim1.run(mp.at_beginning(mp.output_epsilon), - mp.at_every(0.5,mp.output_epsilon), - until=10) +sim1.fields.phase_in_material(sim2.structure, 10.0) +sim1.run( + mp.at_beginning(mp.output_epsilon), mp.at_every(0.5, mp.output_epsilon), until=10 +) diff --git a/python/examples/planar_cavity_ldos.py b/python/examples/planar_cavity_ldos.py index ac9fd5cc5..f421c77d8 100644 --- a/python/examples/planar_cavity_ldos.py +++ b/python/examples/planar_cavity_ldos.py @@ -2,14 +2,13 @@ # dielectric cavity with lossless metallic walls. The result is computed in # cylindrical and 3D coordinates and compared with the analytic theory from: # I. Abram et al., IEEE J. Quantum Electronics, Vol. 34, pp. 71-76 (1998). - +import matplotlib +import numpy as np import meep as mp -import numpy as np -import matplotlib -matplotlib.use('agg') -import matplotlib.pyplot as plt +matplotlib.use("agg") +import matplotlib.pyplot as plt # important note: # Meep may round the cell dimensions to an integer number @@ -17,169 +16,196 @@ resolution = 70 # pixels/μm -dpml = 0.5 # thickness of PML -L = 6.0 # length of non-PML region -n = 2.4 # refractive index of surrounding medium -wvl = 1.0 # wavelength (in vacuum) +dpml = 0.5 # thickness of PML +L = 6.0 # length of non-PML region +n = 2.4 # refractive index of surrounding medium +wvl = 1.0 # wavelength (in vacuum) -fcen = 1/wvl +fcen = 1 / wvl def bulk_ldos_cyl(): - sr = L+dpml - sz = L+2*dpml - cell_size = mp.Vector3(sr,0,sz) + sr = L + dpml + sz = L + 2 * dpml + cell_size = mp.Vector3(sr, 0, sz) pml_layers = [mp.PML(dpml)] - sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen), - component=mp.Er, - center=mp.Vector3())] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - sources=sources, - dimensions=mp.CYLINDRICAL, - m=-1, - default_material=mp.Medium(index=n)) - - sim.run(mp.dft_ldos(fcen,0,1), - until_after_sources=mp.stop_when_fields_decayed(20, - mp.Er, - mp.Vector3(), - 1e-6)) + sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=0.2 * fcen), + component=mp.Er, + center=mp.Vector3(), + ) + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + sources=sources, + dimensions=mp.CYLINDRICAL, + m=-1, + default_material=mp.Medium(index=n), + ) + + sim.run( + mp.dft_ldos(fcen, 0, 1), + until_after_sources=mp.stop_when_fields_decayed(20, mp.Er, mp.Vector3(), 1e-6), + ) return sim.ldos_data[0] def cavity_ldos_cyl(sz): - sr = L+dpml - cell_size = mp.Vector3(sr,0,sz) - - pml_layers = [mp.PML(dpml,direction=mp.R)] - - sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen), - component=mp.Er, - center=mp.Vector3())] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - sources=sources, - dimensions=mp.CYLINDRICAL, - m=-1, - default_material=mp.Medium(index=n)) - - sim.run(mp.dft_ldos(fcen,0,1), - until_after_sources=mp.stop_when_fields_decayed(20, - mp.Er, - mp.Vector3(), - 1e-6)) + sr = L + dpml + cell_size = mp.Vector3(sr, 0, sz) + + pml_layers = [mp.PML(dpml, direction=mp.R)] + + sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=0.2 * fcen), + component=mp.Er, + center=mp.Vector3(), + ) + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + sources=sources, + dimensions=mp.CYLINDRICAL, + m=-1, + default_material=mp.Medium(index=n), + ) + + sim.run( + mp.dft_ldos(fcen, 0, 1), + until_after_sources=mp.stop_when_fields_decayed(20, mp.Er, mp.Vector3(), 1e-6), + ) return sim.ldos_data[0] def bulk_ldos_3D(): - s = L+2*dpml - cell_size = mp.Vector3(s,s,s) + s = L + 2 * dpml + cell_size = mp.Vector3(s, s, s) pml_layers = [mp.PML(dpml)] - sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen), - component=mp.Ex, - center=mp.Vector3())] - - symmetries = [mp.Mirror(direction=mp.X,phase=-1), - mp.Mirror(direction=mp.Y), - mp.Mirror(direction=mp.Z)] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - sources=sources, - symmetries=symmetries, - default_material=mp.Medium(index=n)) - - sim.run(mp.dft_ldos(fcen,0,1), - until_after_sources=mp.stop_when_fields_decayed(20, - mp.Ex, - mp.Vector3(), - 1e-6)) + sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=0.2 * fcen), + component=mp.Ex, + center=mp.Vector3(), + ) + ] + + symmetries = [ + mp.Mirror(direction=mp.X, phase=-1), + mp.Mirror(direction=mp.Y), + mp.Mirror(direction=mp.Z), + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + sources=sources, + symmetries=symmetries, + default_material=mp.Medium(index=n), + ) + + sim.run( + mp.dft_ldos(fcen, 0, 1), + until_after_sources=mp.stop_when_fields_decayed(20, mp.Ex, mp.Vector3(), 1e-6), + ) return sim.ldos_data[0] def cavity_ldos_3D(sz): - sxy = L+2*dpml - cell_size = mp.Vector3(sxy,sxy,sz) - - boundary_layers = [mp.PML(dpml,direction=mp.X), - mp.PML(dpml,direction=mp.Y)] - - sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen), - component=mp.Ex, - center=mp.Vector3())] - - symmetries = [mp.Mirror(direction=mp.X,phase=-1), - mp.Mirror(direction=mp.Y), - mp.Mirror(direction=mp.Z)] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=boundary_layers, - sources=sources, - symmetries=symmetries, - default_material=mp.Medium(index=n)) - - sim.run(mp.dft_ldos(fcen,0,1), - until_after_sources=mp.stop_when_fields_decayed(20, - mp.Ex, - mp.Vector3(), - 1e-6)) + sxy = L + 2 * dpml + cell_size = mp.Vector3(sxy, sxy, sz) + + boundary_layers = [mp.PML(dpml, direction=mp.X), mp.PML(dpml, direction=mp.Y)] + + sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=0.2 * fcen), + component=mp.Ex, + center=mp.Vector3(), + ) + ] + + symmetries = [ + mp.Mirror(direction=mp.X, phase=-1), + mp.Mirror(direction=mp.Y), + mp.Mirror(direction=mp.Z), + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=boundary_layers, + sources=sources, + symmetries=symmetries, + default_material=mp.Medium(index=n), + ) + + sim.run( + mp.dft_ldos(fcen, 0, 1), + until_after_sources=mp.stop_when_fields_decayed(20, mp.Ex, mp.Vector3(), 1e-6), + ) return sim.ldos_data[0] -if __name__ == '__main__': +if __name__ == "__main__": ldos_bulk_cyl = bulk_ldos_cyl() ldos_bulk_3D = bulk_ldos_3D() # units of wavelength in medium - cavity_thickness = np.arange(0.50,2.55,0.05) + cavity_thickness = np.arange(0.50, 2.55, 0.05) - gap = cavity_thickness*wvl/n + gap = cavity_thickness * wvl / n ldos_cavity_cyl = np.zeros(len(cavity_thickness)) ldos_cavity_3D = np.zeros(len(cavity_thickness)) - for idx,g in enumerate(gap): + for idx, g in enumerate(gap): ldos_cavity_cyl[idx] = cavity_ldos_cyl(g) ldos_cavity_3D[idx] = cavity_ldos_3D(g) - print("purcell-enh:, {:.3f}, " - "{:.6f} (cyl.), {:.6f} (3D)".format(cavity_thickness[idx], - ldos_cavity_cyl[idx]/ldos_bulk_cyl, - ldos_cavity_3D[idx]/ldos_bulk_3D)) + print( + "purcell-enh:, {:.3f}, " + "{:.6f} (cyl.), {:.6f} (3D)".format( + cavity_thickness[idx], + ldos_cavity_cyl[idx] / ldos_bulk_cyl, + ldos_cavity_3D[idx] / ldos_bulk_3D, + ) + ) # Purcell enhancement factor (relative to bulk medium) pe_meep_cyl = ldos_cavity_cyl / ldos_bulk_cyl pe_meep_3D = ldos_cavity_3D / ldos_bulk_3D # equation 7 of reference - pe_theory = (3*np.fix(cavity_thickness+0.5)/(4*cavity_thickness) + - (4*np.power(np.fix(cavity_thickness+0.5),3) - - np.fix(cavity_thickness+0.5)) / - (16*np.power(cavity_thickness,3))) + pe_theory = 3 * np.fix(cavity_thickness + 0.5) / (4 * cavity_thickness) + ( + 4 * np.power(np.fix(cavity_thickness + 0.5), 3) - np.fix(cavity_thickness + 0.5) + ) / (16 * np.power(cavity_thickness, 3)) if mp.am_master(): - plt.plot(cavity_thickness,pe_meep_3D,'b-',label='Meep (3D)') - plt.plot(cavity_thickness,pe_meep_cyl,'r-',label='Meep (cylin.)') - plt.plot(cavity_thickness,pe_theory,'g-',label='theory') - plt.plot(cavity_thickness,np.ones(len(cavity_thickness)),'k--') - plt.xlabel('cavity thickness, $nL/\lambda$') - plt.ylabel('Purcell enhancement factor') - plt.title("planar point dipole at λ=1.0 μm in a planar cavity\n" - "with n=2.4 and lossless metallic walls") - plt.axis([0.5,2.5,0.4,3.1]) + plt.plot(cavity_thickness, pe_meep_3D, "b-", label="Meep (3D)") + plt.plot(cavity_thickness, pe_meep_cyl, "r-", label="Meep (cylin.)") + plt.plot(cavity_thickness, pe_theory, "g-", label="theory") + plt.plot(cavity_thickness, np.ones(len(cavity_thickness)), "k--") + plt.xlabel(r"cavity thickness, $nL/\lambda$") + plt.ylabel("Purcell enhancement factor") + plt.title( + "planar point dipole at λ=1.0 μm in a planar cavity\n" + "with n=2.4 and lossless metallic walls" + ) + plt.axis([0.5, 2.5, 0.4, 3.1]) plt.legend() - plt.savefig('cavity_purcell_factor_vs_thickness.png', - bbox_inches='tight') + plt.savefig("cavity_purcell_factor_vs_thickness.png", bbox_inches="tight") diff --git a/python/examples/polarization_grating.py b/python/examples/polarization_grating.py index 8cccb1a96..23fbee9a4 100644 --- a/python/examples/polarization_grating.py +++ b/python/examples/polarization_grating.py @@ -1,70 +1,108 @@ -# -*- coding: utf-8 -*- - # polarization grating from C. Oh and M.J. Escuti, Optics Letters, Vol. 33, No. 20, pp. 2287-9, 2008 # note: reference uses z as the propagation direction and y as the out-of-plane direction; this script uses x and z, respectively - -import meep as mp -import numpy as np import math + import matplotlib.pyplot as plt +import numpy as np -resolution = 50 # pixels/μm +import meep as mp -dpml = 1.0 # PML thickness -dsub = 1.0 # substrate thickness -dpad = 1.0 # padding thickness +resolution = 50 # pixels/μm -k_point = mp.Vector3(0,0,0) +dpml = 1.0 # PML thickness +dsub = 1.0 # substrate thickness +dpad = 1.0 # padding thickness -pml_layers = [mp.PML(thickness=dpml,direction=mp.X)] +k_point = mp.Vector3(0, 0, 0) + +pml_layers = [mp.PML(thickness=dpml, direction=mp.X)] n_0 = 1.55 delta_n = 0.159 -epsilon_diag = mp.Matrix(mp.Vector3(n_0**2,0,0),mp.Vector3(0,n_0**2,0),mp.Vector3(0,0,(n_0+delta_n)**2)) +epsilon_diag = mp.Matrix( + mp.Vector3(n_0**2, 0, 0), + mp.Vector3(0, n_0**2, 0), + mp.Vector3(0, 0, (n_0 + delta_n) ** 2), +) + +wvl = 0.54 # center wavelength +fcen = 1 / wvl # center frequency -wvl = 0.54 # center wavelength -fcen = 1/wvl # center frequency -def pol_grating(d,ph,gp,nmode): - sx = dpml+dsub+d+d+dpad+dpml +def pol_grating(d, ph, gp, nmode): + sx = dpml + dsub + d + d + dpad + dpml sy = gp - cell_size = mp.Vector3(sx,sy,0) + cell_size = mp.Vector3(sx, sy, 0) # twist angle of nematic director; from equation 1b def phi(p): - xx = p.x-(-0.5*sx+dpml+dsub) + xx = p.x - (-0.5 * sx + dpml + dsub) if (xx >= 0) and (xx <= d): - return math.pi*p.y/gp + ph*xx/d + return math.pi * p.y / gp + ph * xx / d else: - return math.pi*p.y/gp - ph*xx/d + 2*ph + return math.pi * p.y / gp - ph * xx / d + 2 * ph # return the anisotropic permittivity tensor for a uniaxial, twisted nematic liquid crystal def lc_mat(p): # rotation matrix for rotation around x axis - Rx = mp.Matrix(mp.Vector3(1,0,0),mp.Vector3(0,math.cos(phi(p)),math.sin(phi(p))),mp.Vector3(0,-math.sin(phi(p)),math.cos(phi(p)))) + Rx = mp.Matrix( + mp.Vector3(1, 0, 0), + mp.Vector3(0, math.cos(phi(p)), math.sin(phi(p))), + mp.Vector3(0, -math.sin(phi(p)), math.cos(phi(p))), + ) lc_epsilon = Rx * epsilon_diag * Rx.transpose() - lc_epsilon_diag = mp.Vector3(lc_epsilon[0].x,lc_epsilon[1].y,lc_epsilon[2].z) - lc_epsilon_offdiag = mp.Vector3(lc_epsilon[1].x,lc_epsilon[2].x,lc_epsilon[2].y) - return mp.Medium(epsilon_diag=lc_epsilon_diag,epsilon_offdiag=lc_epsilon_offdiag) - - geometry = [mp.Block(center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub)),size=mp.Vector3(dpml+dsub,mp.inf,mp.inf),material=mp.Medium(index=n_0)), - mp.Block(center=mp.Vector3(-0.5*sx+dpml+dsub+d),size=mp.Vector3(2*d,mp.inf,mp.inf),material=lc_mat)] + lc_epsilon_diag = mp.Vector3(lc_epsilon[0].x, lc_epsilon[1].y, lc_epsilon[2].z) + lc_epsilon_offdiag = mp.Vector3( + lc_epsilon[1].x, lc_epsilon[2].x, lc_epsilon[2].y + ) + return mp.Medium( + epsilon_diag=lc_epsilon_diag, epsilon_offdiag=lc_epsilon_offdiag + ) + + geometry = [ + mp.Block( + center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub)), + size=mp.Vector3(dpml + dsub, mp.inf, mp.inf), + material=mp.Medium(index=n_0), + ), + mp.Block( + center=mp.Vector3(-0.5 * sx + dpml + dsub + d), + size=mp.Vector3(2 * d, mp.inf, mp.inf), + material=lc_mat, + ), + ] # linear-polarized planewave pulse source - src_pt = mp.Vector3(-0.5*sx+dpml+0.3*dsub,0,0) - sources = [mp.Source(mp.GaussianSource(fcen,fwidth=0.05*fcen), component=mp.Ez, center=src_pt, size=mp.Vector3(0,sy,0)), - mp.Source(mp.GaussianSource(fcen,fwidth=0.05*fcen), component=mp.Ey, center=src_pt, size=mp.Vector3(0,sy,0))] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - k_point=k_point, - sources=sources, - default_material=mp.Medium(index=n_0)) - - tran_pt = mp.Vector3(0.5*sx-dpml-0.5*dpad,0,0) - tran_flux = sim.add_flux(fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0,sy,0))) + src_pt = mp.Vector3(-0.5 * sx + dpml + 0.3 * dsub, 0, 0) + sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=0.05 * fcen), + component=mp.Ez, + center=src_pt, + size=mp.Vector3(0, sy, 0), + ), + mp.Source( + mp.GaussianSource(fcen, fwidth=0.05 * fcen), + component=mp.Ey, + center=src_pt, + size=mp.Vector3(0, sy, 0), + ), + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + k_point=k_point, + sources=sources, + default_material=mp.Medium(index=n_0), + ) + + tran_pt = mp.Vector3(0.5 * sx - dpml - 0.5 * dpad, 0, 0) + tran_flux = sim.add_flux( + fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0, sy, 0)) + ) sim.run(until_after_sources=100) @@ -72,30 +110,37 @@ def lc_mat(p): sim.reset_meep() - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - k_point=k_point, - sources=sources, - geometry=geometry) + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + k_point=k_point, + sources=sources, + geometry=geometry, + ) - tran_flux = sim.add_flux(fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0,sy,0))) + tran_flux = sim.add_flux( + fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0, sy, 0)) + ) sim.run(until_after_sources=300) - res1 = sim.get_eigenmode_coefficients(tran_flux, range(1,nmode+1), eig_parity=mp.ODD_Z+mp.EVEN_Y) - res2 = sim.get_eigenmode_coefficients(tran_flux, range(1,nmode+1), eig_parity=mp.EVEN_Z+mp.ODD_Y) - angles = [math.degrees(math.acos(kdom.x/fcen)) for kdom in res1.kdom] - - return input_flux[0], angles, res1.alpha[:,0,0], res2.alpha[:,0,0]; + res1 = sim.get_eigenmode_coefficients( + tran_flux, range(1, nmode + 1), eig_parity=mp.ODD_Z + mp.EVEN_Y + ) + res2 = sim.get_eigenmode_coefficients( + tran_flux, range(1, nmode + 1), eig_parity=mp.EVEN_Z + mp.ODD_Y + ) + angles = [math.degrees(math.acos(kdom.x / fcen)) for kdom in res1.kdom] + return input_flux[0], angles, res1.alpha[:, 0, 0], res2.alpha[:, 0, 0] -ph_uniaxial = 0 # chiral layer twist angle for uniaxial grating -ph_twisted = 70 # chiral layer twist angle for bilayer grating -gp = 6.5 # grating period -nmode = 5 # number of mode coefficients to compute -dd = np.arange(0.1,3.5,0.1) # chiral layer thickness +ph_uniaxial = 0 # chiral layer twist angle for uniaxial grating +ph_twisted = 70 # chiral layer twist angle for bilayer grating +gp = 6.5 # grating period +nmode = 5 # number of mode coefficients to compute +dd = np.arange(0.1, 3.5, 0.1) # chiral layer thickness m0_uniaxial = np.zeros(dd.size) m1_uniaxial = np.zeros(dd.size) @@ -106,58 +151,62 @@ def lc_mat(p): ang_twisted = np.zeros(dd.size) for k in range(len(dd)): - input_flux, angles, coeffs1, coeffs2 = pol_grating(0.5*dd[k],math.radians(ph_uniaxial),gp,nmode) - tran = (abs(coeffs1)**2+abs(coeffs2)**2)/input_flux + input_flux, angles, coeffs1, coeffs2 = pol_grating( + 0.5 * dd[k], math.radians(ph_uniaxial), gp, nmode + ) + tran = (abs(coeffs1) ** 2 + abs(coeffs2) ** 2) / input_flux for m in range(nmode): - print("tran (uniaxial):, {}, {:.2f}, {:.5f}".format(m,angles[m],tran[m])) + print(f"tran (uniaxial):, {m}, {angles[m]:.2f}, {tran[m]:.5f}") m0_uniaxial[k] = tran[0] m1_uniaxial[k] = tran[1] ang_uniaxial[k] = angles[1] - input_flux, angles, coeffs1, coeffs2 = pol_grating(dd[k],math.radians(ph_twisted),gp,nmode) - tran = (abs(coeffs1)**2+abs(coeffs2)**2)/input_flux + input_flux, angles, coeffs1, coeffs2 = pol_grating( + dd[k], math.radians(ph_twisted), gp, nmode + ) + tran = (abs(coeffs1) ** 2 + abs(coeffs2) ** 2) / input_flux for m in range(nmode): - print("tran (twisted):, {}, {:.2f}, {:.5f}".format(m,angles[m],tran[m])) + print(f"tran (twisted):, {m}, {angles[m]:.2f}, {tran[m]:.5f}") m0_twisted[k] = tran[0] m1_twisted[k] = tran[1] ang_twisted[k] = angles[1] cos_angles = [math.cos(math.radians(t)) for t in ang_uniaxial] -tran = m0_uniaxial+2*m1_uniaxial -eff_m0 = m0_uniaxial/tran -eff_m1 = (2*m1_uniaxial/tran)/cos_angles +tran = m0_uniaxial + 2 * m1_uniaxial +eff_m0 = m0_uniaxial / tran +eff_m1 = (2 * m1_uniaxial / tran) / cos_angles -phase = delta_n*dd/wvl -eff_m0_analytic = [math.cos(math.pi*p)**2 for p in phase] -eff_m1_analytic = [math.sin(math.pi*p)**2 for p in phase] +phase = delta_n * dd / wvl +eff_m0_analytic = [math.cos(math.pi * p) ** 2 for p in phase] +eff_m1_analytic = [math.sin(math.pi * p) ** 2 for p in phase] plt.figure(dpi=150) -plt.subplot(1,2,1) -plt.plot(phase,eff_m0,'bo-',clip_on=False,label='0th order (meep)') -plt.plot(phase,eff_m0_analytic,'b--',clip_on=False,label='0th order (analytic)') -plt.plot(phase,eff_m1,'ro-',clip_on=False,label='±1 orders (meep)') -plt.plot(phase,eff_m1_analytic,'r--',clip_on=False,label='±1 orders (analytic)') +plt.subplot(1, 2, 1) +plt.plot(phase, eff_m0, "bo-", clip_on=False, label="0th order (meep)") +plt.plot(phase, eff_m0_analytic, "b--", clip_on=False, label="0th order (analytic)") +plt.plot(phase, eff_m1, "ro-", clip_on=False, label="±1 orders (meep)") +plt.plot(phase, eff_m1_analytic, "r--", clip_on=False, label="±1 orders (analytic)") plt.axis([0, 1.0, 0, 1]) -plt.xticks([t for t in np.arange(0,1.2,0.2)]) +plt.xticks(list(np.arange(0, 1.2, 0.2))) plt.xlabel("phase delay Δnd/λ") plt.ylabel("diffraction efficiency @ λ = 0.54 μm") -plt.legend(loc='center') +plt.legend(loc="center") plt.title("homogeneous uniaxial grating") cos_angles = [math.cos(math.radians(t)) for t in ang_twisted] -tran = m0_twisted+2*m1_twisted -eff_m0 = m0_twisted/tran -eff_m1 = (2*m1_twisted/tran)/cos_angles +tran = m0_twisted + 2 * m1_twisted +eff_m0 = m0_twisted / tran +eff_m1 = (2 * m1_twisted / tran) / cos_angles -plt.subplot(1,2,2) -plt.plot(phase,eff_m0,'bo-',clip_on=False,label='0th order (meep)') -plt.plot(phase,eff_m1,'ro-',clip_on=False,label='±1 orders (meep)') +plt.subplot(1, 2, 2) +plt.plot(phase, eff_m0, "bo-", clip_on=False, label="0th order (meep)") +plt.plot(phase, eff_m1, "ro-", clip_on=False, label="±1 orders (meep)") plt.axis([0, 1.0, 0, 1]) -plt.xticks([t for t in np.arange(0,1.2,0.2)]) +plt.xticks(list(np.arange(0, 1.2, 0.2))) plt.xlabel("phase delay Δnd/λ") plt.ylabel("diffraction efficiency @ λ = 0.54 μm") -plt.legend(loc='center') +plt.legend(loc="center") plt.title("bilayer twisted-nematic grating") plt.show() diff --git a/python/examples/pw-source.py b/python/examples/pw-source.py index c22d9b227..2a244dc99 100644 --- a/python/examples/pw-source.py +++ b/python/examples/pw-source.py @@ -1,12 +1,10 @@ # This example creates an approximate Ez-polarized planewave in vacuum # propagating at a 45-degree angle, by using a couple of current sources # with amplitude exp(ikx) corresponding to the desired planewave. -from __future__ import division - import cmath import math -import meep as mp +import meep as mp s = 11 # the size of the computational cell, not including PML dpml = 1 # thickness of PML layers @@ -26,12 +24,14 @@ def pw_amp(k, x0): def _pw_amp(x): return cmath.exp(1j * k.dot(x + x0)) + return _pw_amp + fcen = 0.8 # pulse center frequency df = 0.02 # turn-on bandwidth kdir = mp.Vector3(1, 1) # direction of k (length is irrelevant) -n = 1 # refractive index of material containing the source +n = 1 # refractive index of material containing the source k = kdir.unit().scale(2 * math.pi * fcen * n) # k with correct length sources = [ @@ -40,15 +40,15 @@ def _pw_amp(x): component=mp.Ez, center=mp.Vector3(-0.5 * s, 0), size=mp.Vector3(0, s), - amp_func=pw_amp(k, mp.Vector3(x=-0.5 * s)) + amp_func=pw_amp(k, mp.Vector3(x=-0.5 * s)), ), mp.Source( mp.ContinuousSource(fcen, fwidth=df), component=mp.Ez, center=mp.Vector3(0, -0.5 * s), size=mp.Vector3(s, 0), - amp_func=pw_amp(k, mp.Vector3(y=-0.5 * s)) - ) + amp_func=pw_amp(k, mp.Vector3(y=-0.5 * s)), + ), ] sim = mp.Simulation( diff --git a/python/examples/refl-angular-kz2d.py b/python/examples/refl-angular-kz2d.py index 89bd49d39..1009e047d 100644 --- a/python/examples/refl-angular-kz2d.py +++ b/python/examples/refl-angular-kz2d.py @@ -1,12 +1,14 @@ -import meep as mp import math +import meep as mp + + def refl_planar(theta, kz_2d): resolution = 100 dpml = 1.0 sx = 10 - sx = 10 + 2*dpml + sx = 10 + 2 * dpml cell_size = mp.Vector3(sx) pml_layers = [mp.PML(dpml)] @@ -15,67 +17,94 @@ def refl_planar(theta, kz_2d): # plane of incidence is XZ k = mp.Vector3(z=math.sin(theta)).scale(fcen) - sources = [mp.Source(mp.GaussianSource(fcen,fwidth=0.2*fcen), - component=mp.Ey, - center=mp.Vector3(-0.5*sx+dpml))] - - sim = mp.Simulation(cell_size=cell_size, - boundary_layers=pml_layers, - sources=sources, - k_point=k, - kz_2d=kz_2d, - resolution=resolution) - - refl_fr = mp.FluxRegion(center=mp.Vector3(-0.25*sx)) + sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=0.2 * fcen), + component=mp.Ey, + center=mp.Vector3(-0.5 * sx + dpml), + ) + ] + + sim = mp.Simulation( + cell_size=cell_size, + boundary_layers=pml_layers, + sources=sources, + k_point=k, + kz_2d=kz_2d, + resolution=resolution, + ) + + refl_fr = mp.FluxRegion(center=mp.Vector3(-0.25 * sx)) refl = sim.add_flux(fcen, 0, 1, refl_fr) - - sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ey, mp.Vector3(-0.5*sx+dpml), 1e-9)) + + sim.run( + until_after_sources=mp.stop_when_fields_decayed( + 50, mp.Ey, mp.Vector3(-0.5 * sx + dpml), 1e-9 + ) + ) input_flux = mp.get_fluxes(refl) input_data = sim.get_flux_data(refl) sim.reset_meep() # add a block with n=3.5 for the air-dielectric interface - geometry = [mp.Block(size=mp.Vector3(0.5*sx,mp.inf,mp.inf), - center=mp.Vector3(0.25*sx), - material=mp.Medium(index=3.5))] - - sim = mp.Simulation(cell_size=cell_size, - geometry=geometry, - boundary_layers=pml_layers, - sources=sources, - k_point=k, - kz_2d=kz_2d, - resolution=resolution) + geometry = [ + mp.Block( + size=mp.Vector3(0.5 * sx, mp.inf, mp.inf), + center=mp.Vector3(0.25 * sx), + material=mp.Medium(index=3.5), + ) + ] + + sim = mp.Simulation( + cell_size=cell_size, + geometry=geometry, + boundary_layers=pml_layers, + sources=sources, + k_point=k, + kz_2d=kz_2d, + resolution=resolution, + ) refl = sim.add_flux(fcen, 0, 1, refl_fr) sim.load_minus_flux_data(refl, input_data) - sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ey, mp.Vector3(-0.5*sx+dpml), 1e-9)) + sim.run( + until_after_sources=mp.stop_when_fields_decayed( + 50, mp.Ey, mp.Vector3(-0.5 * sx + dpml), 1e-9 + ) + ) refl_flux = mp.get_fluxes(refl) freqs = mp.get_flux_freqs(refl) - Rmeep = -refl_flux[0]/input_flux[0] - return Rmeep + return -refl_flux[0] / input_flux[0] # rotation angle of source: CCW around Y axis, 0 degrees along +X axis theta_r = math.radians(19.4) -Rmeep_real_imag = refl_planar(theta_r,"real/imag") -Rmeep_complex = refl_planar(theta_r,"complex") -Rmeep_3d = refl_planar(theta_r,"3d") +Rmeep_real_imag = refl_planar(theta_r, "real/imag") +Rmeep_complex = refl_planar(theta_r, "complex") +Rmeep_3d = refl_planar(theta_r, "3d") -n1=1 -n2=3.5 +n1 = 1 +n2 = 3.5 # compute angle of refracted planewave in medium n2 # for incident planewave in medium n1 at angle theta_in -theta_out = lambda theta_in: math.asin(n1*math.sin(theta_in)/n2) +theta_out = lambda theta_in: math.asin(n1 * math.sin(theta_in) / n2) # compute Fresnel reflectance for S-polarization in medium n2 # for incident planewave in medium n1 at angle theta_in -Rfresnel = lambda theta_in: math.fabs((n2*math.cos(theta_out(theta_in))-n1*math.cos(theta_in))/(n2*math.cos(theta_out(theta_in))+n1*math.cos(theta_in)))**2 - -print("refl:, {} (real/imag), {} (complex), {} (3d), {} (analytic)".format(Rmeep_real_imag,Rmeep_complex,Rmeep_3d,Rfresnel(theta_r))) +Rfresnel = ( + lambda theta_in: math.fabs( + (n2 * math.cos(theta_out(theta_in)) - n1 * math.cos(theta_in)) + / (n2 * math.cos(theta_out(theta_in)) + n1 * math.cos(theta_in)) + ) + ** 2 +) + +print( + f"refl:, {Rmeep_real_imag} (real/imag), {Rmeep_complex} (complex), {Rmeep_3d} (3d), {Rfresnel(theta_r)} (analytic)" +) diff --git a/python/examples/refl-angular.py b/python/examples/refl-angular.py index a51791cc9..1f20d3f05 100644 --- a/python/examples/refl-angular.py +++ b/python/examples/refl-angular.py @@ -1,83 +1,110 @@ -import meep as mp import argparse import math +import meep as mp + def main(args): resolution = args.res - dpml = 1.0 # PML thickness - sz = 10 + 2*dpml # size of computational cell (without PMLs) - cell_size = mp.Vector3(0,0,sz) + dpml = 1.0 # PML thickness + sz = 10 + 2 * dpml # size of computational cell (without PMLs) + cell_size = mp.Vector3(0, 0, sz) pml_layers = [mp.PML(dpml)] - wvl_min = 0.4 # min wavelength - wvl_max = 0.8 # max wavelength - fmin = 1/wvl_max # min frequency - fmax = 1/wvl_min # max frequency - fcen = 0.5*(fmin+fmax) # center frequency - df = fmax-fmin # frequency width - nfreq = 50 # number of frequency bins + wvl_min = 0.4 # min wavelength + wvl_max = 0.8 # max wavelength + fmin = 1 / wvl_max # min frequency + fmax = 1 / wvl_min # max frequency + fcen = 0.5 * (fmin + fmax) # center frequency + df = fmax - fmin # frequency width + nfreq = 50 # number of frequency bins # rotation angle (in degrees) of source: CCW around Y axis, 0 degrees along +Z axis theta_r = math.radians(args.theta) # plane of incidence is XZ - k = mp.Vector3(math.sin(theta_r),0,math.cos(theta_r)).scale(fmin) + k = mp.Vector3(math.sin(theta_r), 0, math.cos(theta_r)).scale(fmin) # if normal incidence, force number of dimensions to be 1 - if theta_r == 0: - dimensions = 1 - else: - dimensions = 3 - - sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df), - component=mp.Ex, - center=mp.Vector3(0,0,-0.5*sz+dpml))] - - sim = mp.Simulation(cell_size=cell_size, - boundary_layers=pml_layers, - sources=sources, - k_point=k, - dimensions=dimensions, - resolution=resolution) - - refl_fr = mp.FluxRegion(center=mp.Vector3(0,0,-0.25*sz)) + dimensions = 1 if theta_r == 0 else 3 + sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=mp.Ex, + center=mp.Vector3(0, 0, -0.5 * sz + dpml), + ) + ] + + sim = mp.Simulation( + cell_size=cell_size, + boundary_layers=pml_layers, + sources=sources, + k_point=k, + dimensions=dimensions, + resolution=resolution, + ) + + refl_fr = mp.FluxRegion(center=mp.Vector3(0, 0, -0.25 * sz)) refl = sim.add_flux(fcen, df, nfreq, refl_fr) - sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ex, mp.Vector3(0,0,-0.5*sz+dpml), 1e-9)) + sim.run( + until_after_sources=mp.stop_when_fields_decayed( + 50, mp.Ex, mp.Vector3(0, 0, -0.5 * sz + dpml), 1e-9 + ) + ) empty_flux = mp.get_fluxes(refl) empty_data = sim.get_flux_data(refl) sim.reset_meep() # add a block with n=3.5 for the air-dielectric interface - geometry = [mp.Block(size=mp.Vector3(mp.inf,mp.inf,0.5*sz), - center=mp.Vector3(0,0,0.25*sz), - material=mp.Medium(index=3.5))] - - sim = mp.Simulation(cell_size=cell_size, - geometry=geometry, - boundary_layers=pml_layers, - sources=sources, - k_point=k, - dimensions=dimensions, - resolution=resolution) + geometry = [ + mp.Block( + size=mp.Vector3(mp.inf, mp.inf, 0.5 * sz), + center=mp.Vector3(0, 0, 0.25 * sz), + material=mp.Medium(index=3.5), + ) + ] + + sim = mp.Simulation( + cell_size=cell_size, + geometry=geometry, + boundary_layers=pml_layers, + sources=sources, + k_point=k, + dimensions=dimensions, + resolution=resolution, + ) refl = sim.add_flux(fcen, df, nfreq, refl_fr) sim.load_minus_flux_data(refl, empty_data) - sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ex, mp.Vector3(0,0,-0.5*sz+dpml), 1e-9)) + sim.run( + until_after_sources=mp.stop_when_fields_decayed( + 50, mp.Ex, mp.Vector3(0, 0, -0.5 * sz + dpml), 1e-9 + ) + ) refl_flux = mp.get_fluxes(refl) freqs = mp.get_flux_freqs(refl) for i in range(nfreq): - print("refl:, {}, {}, {}, {}".format(k.x,1/freqs[i],math.degrees(math.asin(k.x/freqs[i])),-refl_flux[i]/empty_flux[i])) + print( + f"refl:, {k.x}, {1 / freqs[i]}, {math.degrees(math.asin(k.x/freqs[i]))}, {-refl_flux[i] / empty_flux[i]}" + ) + -if __name__ == '__main__': +if __name__ == "__main__": parser = argparse.ArgumentParser() - parser.add_argument('-res', type=int, default=200, help='resolution (default: 200 pixels/um)') - parser.add_argument('-theta', type=float, default=0, help='angle of incident planewave (default: 0 degrees)') + parser.add_argument( + "-res", type=int, default=200, help="resolution (default: 200 pixels/um)" + ) + parser.add_argument( + "-theta", + type=float, + default=0, + help="angle of incident planewave (default: 0 degrees)", + ) args = parser.parse_args() main(args) diff --git a/python/examples/refl-quartz.py b/python/examples/refl-quartz.py index 55a61a23a..6427a9256 100644 --- a/python/examples/refl-quartz.py +++ b/python/examples/refl-quartz.py @@ -1,35 +1,43 @@ -# -*- coding: utf-8 -*- - -import meep as mp -from meep.materials import fused_quartz -import numpy as np import math + import matplotlib.pyplot as plt +import numpy as np +from meep.materials import fused_quartz + +import meep as mp resolution = 200 # pixels/μm dpml = 1.0 -sz = 10+2*dpml +sz = 10 + 2 * dpml cell_size = mp.Vector3(z=sz) pml_layers = [mp.PML(dpml)] wvl_min = 0.4 wvl_max = 0.8 -fmin = 1/wvl_max -fmax = 1/wvl_min -fcen = 0.5*(fmax+fmin) -df = fmax-fmin +fmin = 1 / wvl_max +fmax = 1 / wvl_min +fcen = 0.5 * (fmax + fmin) +df = fmax - fmin nfreq = 50 -sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df), component=mp.Ex, center=mp.Vector3(z=-0.5*sz+dpml))] - -sim = mp.Simulation(cell_size=cell_size, - boundary_layers=pml_layers, - sources=sources, - dimensions=1, - resolution=resolution) - -refl_fr = mp.FluxRegion(center=mp.Vector3(z=-0.25*sz)) +sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=mp.Ex, + center=mp.Vector3(z=-0.5 * sz + dpml), + ) +] + +sim = mp.Simulation( + cell_size=cell_size, + boundary_layers=pml_layers, + sources=sources, + dimensions=1, + resolution=resolution, +) + +refl_fr = mp.FluxRegion(center=mp.Vector3(z=-0.25 * sz)) refl = sim.add_flux(fcen, df, nfreq, refl_fr) sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ex, mp.Vector3(), 1e-9)) @@ -38,14 +46,22 @@ empty_data = sim.get_flux_data(refl) sim.reset_meep() -geometry = [mp.Block(mp.Vector3(mp.inf,mp.inf,0.5*sz), center=mp.Vector3(z=0.25*sz), material=fused_quartz)] - -sim = mp.Simulation(cell_size=cell_size, - boundary_layers=pml_layers, - geometry=geometry, - sources=sources, - dimensions=1, - resolution=resolution) +geometry = [ + mp.Block( + mp.Vector3(mp.inf, mp.inf, 0.5 * sz), + center=mp.Vector3(z=0.25 * sz), + material=fused_quartz, + ) +] + +sim = mp.Simulation( + cell_size=cell_size, + boundary_layers=pml_layers, + geometry=geometry, + sources=sources, + dimensions=1, + resolution=resolution, +) refl = sim.add_flux(fcen, df, nfreq, refl_fr) sim.load_minus_flux_data(refl, empty_data) @@ -53,21 +69,28 @@ sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ex, mp.Vector3(), 1e-9)) refl_flux = mp.get_fluxes(refl) -R_meep = -1*np.divide(refl_flux,empty_flux) +R_meep = -1 * np.divide(refl_flux, empty_flux) freqs = mp.get_flux_freqs(refl) -wvls = np.divide(1,freqs) - -eps_quartz = lambda l: 1+0.6961663*math.pow(l,2)/(pow(l,2)-pow(0.0684043,2))+0.4079426*pow(l,2)/(pow(l,2)-pow(0.1162414,2))+0.8974794*pow(l,2)/(pow(l,2)-pow(9.896161,2)) -R_fresnel = lambda l: math.pow(math.fabs(1-math.sqrt(eps_quartz(l)))/(1+math.sqrt(eps_quartz(l))),2) +wvls = np.divide(1, freqs) + +eps_quartz = ( + lambda l: 1 + + 0.6961663 * math.pow(l, 2) / (pow(l, 2) - pow(0.0684043, 2)) + + 0.4079426 * pow(l, 2) / (pow(l, 2) - pow(0.1162414, 2)) + + 0.8974794 * pow(l, 2) / (pow(l, 2) - pow(9.896161, 2)) +) +R_fresnel = lambda l: math.pow( + math.fabs(1 - math.sqrt(eps_quartz(l))) / (1 + math.sqrt(eps_quartz(l))), 2 +) R_analytic = [R_fresnel(i) for i in wvls] plt.figure() -plt.plot(wvls,R_meep,'bo-',label='meep') -plt.plot(wvls,R_analytic,'rs-',label='analytic') +plt.plot(wvls, R_meep, "bo-", label="meep") +plt.plot(wvls, R_analytic, "rs-", label="analytic") plt.xlabel("wavelength (μm)") plt.ylabel("reflectance") plt.axis([0.4, 0.8, 0.0340, 0.0365]) -plt.xticks([t for t in np.arange(0.4,0.9,0.1)]) -plt.legend(loc='upper right') +plt.xticks(list(np.arange(0.4, 0.9, 0.1))) +plt.legend(loc="upper right") plt.show() diff --git a/python/examples/ring-cyl.py b/python/examples/ring-cyl.py index d4eafd4dd..2d87151ea 100644 --- a/python/examples/ring-cyl.py +++ b/python/examples/ring-cyl.py @@ -1,17 +1,17 @@ # Calculating 2d ring-resonator modes using cylindrical coordinates, # from the Meep tutorial. -from __future__ import division +import argparse import meep as mp -import argparse + def main(args): - n = 3.4 # index of waveguide - w = 1 # width of waveguide - r = 1 # inner radius of ring - pad = 4 # padding between waveguide and edge of PML - dpml = 32 # thickness of PML + n = 3.4 # index of waveguide + w = 1 # width of waveguide + r = 1 # inner radius of ring + pad = 4 # padding between waveguide and edge of PML + dpml = 32 # thickness of PML sr = r + w + pad + dpml # radial size (cell is from 0 to sr) dimensions = mp.CYLINDRICAL @@ -21,9 +21,13 @@ def main(args): # is given by exp(i m phi), where m is given by: m = args.m - geometry = [mp.Block(center=mp.Vector3(r + (w / 2)), - size=mp.Vector3(w, mp.inf, mp.inf), - material=mp.Medium(index=n))] + geometry = [ + mp.Block( + center=mp.Vector3(r + (w / 2)), + size=mp.Vector3(w, mp.inf, mp.inf), + material=mp.Medium(index=n), + ) + ] pml_layers = [mp.PML(dpml)] resolution = 20 @@ -33,38 +37,58 @@ def main(args): # arbitrary direction. We will only look for Ez-polarized modes. fcen = args.fcen # pulse center frequency - df = args.df # pulse frequency width - sources = [mp.Source(src=mp.GaussianSource(fcen, fwidth=df), - component=mp.Ez, - center=mp.Vector3(r + 0.1))] + df = args.df # pulse frequency width + sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=df), + component=mp.Ez, + center=mp.Vector3(r + 0.1), + ) + ] # note that the r -> -r mirror symmetry is exploited automatically - sim = mp.Simulation(cell_size=cell, - geometry=geometry, - boundary_layers=pml_layers, - resolution=resolution, - sources=sources, - dimensions=dimensions, - m=m) + sim = mp.Simulation( + cell_size=cell, + geometry=geometry, + boundary_layers=pml_layers, + resolution=resolution, + sources=sources, + dimensions=dimensions, + m=m, + ) - sim.run(mp.after_sources(mp.Harminv(mp.Ez, mp.Vector3(r + 0.1), fcen, df)), - until_after_sources=200) + sim.run( + mp.after_sources(mp.Harminv(mp.Ez, mp.Vector3(r + 0.1), fcen, df)), + until_after_sources=200, + ) # Output fields for one period at the end. (If we output # at a single time, we might accidentally catch the Ez field when it is # almost zero and get a distorted view.) We'll append the fields # to a file to get an r-by-t picture. We'll also output from -sr to -sr # instead of from 0 to sr. - sim.run(mp.in_volume(mp.Volume(center=mp.Vector3(), size=mp.Vector3(2 * sr)), - mp.at_beginning(mp.output_epsilon), - mp.to_appended("ez", mp.at_every(1 / fcen / 20, mp.output_efield_z))), - until=1 / fcen) + sim.run( + mp.in_volume( + mp.Volume(center=mp.Vector3(), size=mp.Vector3(2 * sr)), + mp.at_beginning(mp.output_epsilon), + mp.to_appended("ez", mp.at_every(1 / fcen / 20, mp.output_efield_z)), + ), + until=1 / fcen, + ) + -if __name__ == '__main__': +if __name__ == "__main__": parser = argparse.ArgumentParser() - parser.add_argument('-fcen', type=float, default=0.15, help='pulse center frequency') - parser.add_argument('-df', type=float, default=0.1, help='pulse frequency width') - parser.add_argument('-m', type=int, default=3, help='phi (angular) dependence of the fields given by exp(i m phi)') + parser.add_argument( + "-fcen", type=float, default=0.15, help="pulse center frequency" + ) + parser.add_argument("-df", type=float, default=0.1, help="pulse frequency width") + parser.add_argument( + "-m", + type=int, + default=3, + help="phi (angular) dependence of the fields given by exp(i m phi)", + ) args = parser.parse_args() main(args) diff --git a/python/examples/ring-mode-overlap.py b/python/examples/ring-mode-overlap.py index 72182fdd7..593392a88 100644 --- a/python/examples/ring-mode-overlap.py +++ b/python/examples/ring-mode-overlap.py @@ -1,7 +1,6 @@ # Calculating 2d ring-resonator modes, from the Meep tutorial. import meep as mp - n = 3.4 # index of waveguide w = 1 # width of waveguide r = 1 # inner radius of ring @@ -17,7 +16,7 @@ # and the inner (air) cylinder second. geometry = [ mp.Cylinder(radius=r + w, height=mp.inf, material=mp.Medium(index=n)), - mp.Cylinder(radius=r, height=mp.inf, material=mp.air) + mp.Cylinder(radius=r, height=mp.inf, material=mp.air), ] pml_layers = [mp.PML(dpml)] @@ -28,19 +27,26 @@ # arbitrary direction. We will only look for Ez-polarized modes. fcen = 0.118 # pulse center frequency -df = 0.010 # pulse width (in frequency) -sources = [mp.Source(src=mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, - center=mp.Vector3(r + 0.1))] +df = 0.010 # pulse width (in frequency) +sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=df), + component=mp.Ez, + center=mp.Vector3(r + 0.1), + ) +] # exploit the mirror symmetry in structure+source: symmetries = [mp.Mirror(mp.Y)] -sim = mp.Simulation(cell_size=cell, - resolution=resolution, - geometry=geometry, - boundary_layers=pml_layers, - sources=sources, - symmetries=symmetries) +sim = mp.Simulation( + cell_size=cell, + resolution=resolution, + geometry=geometry, + boundary_layers=pml_layers, + sources=sources, + symmetries=symmetries, +) h1 = mp.Harminv(mp.Ez, mp.Vector3(r + 0.1), fcen, df) sim.run(mp.after_sources(h1), until_after_sources=300) @@ -56,5 +62,6 @@ def overlap_integral(r, ez1, ez2): return ez1.conjugate() * ez2 + res = sim.integrate2_field_function(fields2, [mp.Ez], [mp.Ez], overlap_integral) -print("overlap integral of mode at w and 2w: {}".format(abs(res))) +print(f"overlap integral of mode at w and 2w: {abs(res)}") diff --git a/python/examples/ring.py b/python/examples/ring.py index 1c2b2dbd4..4d6042488 100644 --- a/python/examples/ring.py +++ b/python/examples/ring.py @@ -1,47 +1,51 @@ # Calculating 2d ring-resonator modes, from the Meep tutorial. -from __future__ import division - import meep as mp + def main(): - n = 3.4 # index of waveguide - w = 1 # width of waveguide - r = 1 # inner radius of ring - pad = 4 # padding between waveguide and edge of PML - dpml = 2 # thickness of PML - sxy = 2*(r+w+pad+dpml) # cell size + n = 3.4 # index of waveguide + w = 1 # width of waveguide + r = 1 # inner radius of ring + pad = 4 # padding between waveguide and edge of PML + dpml = 2 # thickness of PML + sxy = 2 * (r + w + pad + dpml) # cell size # Create a ring waveguide by two overlapping cylinders - later objects # take precedence over earlier objects, so we put the outer cylinder first. # and the inner (air) cylinder second. - c1 = mp.Cylinder(radius=r+w, material=mp.Medium(index=n)) + c1 = mp.Cylinder(radius=r + w, material=mp.Medium(index=n)) c2 = mp.Cylinder(radius=r) # If we don't want to excite a specific mode symmetry, we can just # put a single point source at some arbitrary place, pointing in some # arbitrary direction. We will only look for Ez-polarized modes. - fcen = 0.15 # pulse center frequency - df = 0.1 # pulse width (in frequency) + fcen = 0.15 # pulse center frequency + df = 0.1 # pulse width (in frequency) - src = mp.Source(mp.GaussianSource(fcen, fwidth=df), mp.Ez, mp.Vector3(r+0.1)) + src = mp.Source(mp.GaussianSource(fcen, fwidth=df), mp.Ez, mp.Vector3(r + 0.1)) - sim = mp.Simulation(cell_size=mp.Vector3(sxy, sxy), - geometry=[c1, c2], - sources=[src], - resolution=10, - symmetries=[mp.Mirror(mp.Y)], - boundary_layers=[mp.PML(dpml)]) + sim = mp.Simulation( + cell_size=mp.Vector3(sxy, sxy), + geometry=[c1, c2], + sources=[src], + resolution=10, + symmetries=[mp.Mirror(mp.Y)], + boundary_layers=[mp.PML(dpml)], + ) - sim.run(mp.at_beginning(mp.output_epsilon), - mp.after_sources(mp.Harminv(mp.Ez, mp.Vector3(r+0.1), fcen, df)), - until_after_sources=300) + sim.run( + mp.at_beginning(mp.output_epsilon), + mp.after_sources(mp.Harminv(mp.Ez, mp.Vector3(r + 0.1), fcen, df)), + until_after_sources=300, + ) # Output fields for one period at the end. (If we output # at a single time, we might accidentally catch the Ez field when it is # almost zero and get a distorted view.) - sim.run(mp.at_every(1/fcen/20, mp.output_efield_z), until=1/fcen) + sim.run(mp.at_every(1 / fcen / 20, mp.output_efield_z), until=1 / fcen) + -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/python/examples/ring_gds.py b/python/examples/ring_gds.py index 64e2b99d5..6da93fe4d 100644 --- a/python/examples/ring_gds.py +++ b/python/examples/ring_gds.py @@ -1,103 +1,117 @@ -import numpy as np +import importlib + import gdspy +import numpy as np from matplotlib import pyplot as plt -import importlib + import meep as mp # core and cladding materials -Si = mp.Medium(index=3.4) +Si = mp.Medium(index=3.4) SiO2 = mp.Medium(index=1.4) # layer numbers for GDS file -RING_LAYER = 0 -SOURCE0_LAYER = 1 -SOURCE1_LAYER = 2 -MONITOR_LAYER = 3 +RING_LAYER = 0 +SOURCE0_LAYER = 1 +SOURCE1_LAYER = 2 +MONITOR_LAYER = 3 SIMULATION_LAYER = 4 -resolution = 50 # pixels/μm -dpml = 1 # thickness of PML -zmin = 0 # minimum z value of simulation domain (0 for 2D) -zmax = 0 # maximum z value of simulation domain (0 for 2D) +resolution = 50 # pixels/μm +dpml = 1 # thickness of PML +zmin = 0 # minimum z value of simulation domain (0 for 2D) +zmax = 0 # maximum z value of simulation domain (0 for 2D) + -def create_ring_gds(radius,width): +def create_ring_gds(radius, width): # Reload the library each time to prevent gds library name clashes importlib.reload(gdspy) - ringCell = gdspy.Cell("ring_resonator_r{}_w{}".format(radius,width)) + ringCell = gdspy.Cell(f"ring_resonator_r{radius}_w{width}") # Draw the ring - ringCell.add(gdspy.Round((0,0), - inner_radius=radius-width/2, - radius=radius+width/2, - layer=RING_LAYER)) + ringCell.add( + gdspy.Round( + (0, 0), + inner_radius=radius - width / 2, + radius=radius + width / 2, + layer=RING_LAYER, + ) + ) # Draw the first source - ringCell.add(gdspy.Rectangle((radius-width,0), - (radius+width,0), - SOURCE0_LAYER)) + ringCell.add( + gdspy.Rectangle((radius - width, 0), (radius + width, 0), SOURCE0_LAYER) + ) # Draw the second source - ringCell.add(gdspy.Rectangle((-radius-width,0), - (-radius+width,0), - SOURCE1_LAYER)) + ringCell.add( + gdspy.Rectangle((-radius - width, 0), (-radius + width, 0), SOURCE1_LAYER) + ) # Draw the monitor location - ringCell.add(gdspy.Rectangle((radius-width/2,0), - (radius+width/2,0), - MONITOR_LAYER)) + ringCell.add( + gdspy.Rectangle((radius - width / 2, 0), (radius + width / 2, 0), MONITOR_LAYER) + ) # Draw the simulation domain pad = 2 # padding between waveguide and edge of PML - ringCell.add(gdspy.Rectangle((-radius-width/2-pad,-radius-width/2-pad), - (radius+width/2+pad,radius+width/2+pad), - SIMULATION_LAYER)) - - filename = "ring_r{}_w{}.gds".format(radius,width) + ringCell.add( + gdspy.Rectangle( + (-radius - width / 2 - pad, -radius - width / 2 - pad), + (radius + width / 2 + pad, radius + width / 2 + pad), + SIMULATION_LAYER, + ) + ) + + filename = f"ring_r{radius}_w{width}.gds" gdspy.write_gds(filename, unit=1.0e-6, precision=1.0e-9) return filename -def find_modes(filename,wvl=1.55,bw=0.05): + +def find_modes(filename, wvl=1.55, bw=0.05): # Read in the ring structure - geometry = mp.get_GDSII_prisms(Si,filename,RING_LAYER,-100,100) + geometry = mp.get_GDSII_prisms(Si, filename, RING_LAYER, -100, 100) - cell = mp.GDSII_vol(filename,SIMULATION_LAYER,zmin,zmax) + cell = mp.GDSII_vol(filename, SIMULATION_LAYER, zmin, zmax) - src_vol0 = mp.GDSII_vol(filename,SOURCE0_LAYER,zmin,zmax) - src_vol1 = mp.GDSII_vol(filename,SOURCE1_LAYER,zmin,zmax) + src_vol0 = mp.GDSII_vol(filename, SOURCE0_LAYER, zmin, zmax) + src_vol1 = mp.GDSII_vol(filename, SOURCE1_LAYER, zmin, zmax) - mon_vol = mp.GDSII_vol(filename,MONITOR_LAYER,zmin,zmax) + mon_vol = mp.GDSII_vol(filename, MONITOR_LAYER, zmin, zmax) - fcen = 1/wvl - df = bw*fcen + fcen = 1 / wvl + df = bw * fcen - src = [mp.Source(mp.GaussianSource(fcen, fwidth=df), - component=mp.Hz, - volume=src_vol0), - mp.Source(mp.GaussianSource(fcen, fwidth=df), - component=mp.Hz, - volume=src_vol1, - amplitude=-1)] + src = [ + mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Hz, volume=src_vol0), + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=mp.Hz, + volume=src_vol1, + amplitude=-1, + ), + ] - sim = mp.Simulation(cell_size=cell.size, - geometry=geometry, - sources=src, - resolution=resolution, - boundary_layers=[mp.PML(dpml)], - default_material=SiO2) + sim = mp.Simulation( + cell_size=cell.size, + geometry=geometry, + sources=src, + resolution=resolution, + boundary_layers=[mp.PML(dpml)], + default_material=SiO2, + ) - h = mp.Harminv(mp.Hz,mon_vol.center,fcen,df) + h = mp.Harminv(mp.Hz, mon_vol.center, fcen, df) - sim.run(mp.after_sources(h), - until_after_sources=100) + sim.run(mp.after_sources(h), until_after_sources=100) plt.figure() - sim.plot2D(fields=mp.Hz, - eps_parameters={'contour':True}) - plt.savefig('ring_fields.png',bbox_inches='tight',dpi=150) + sim.plot2D(fields=mp.Hz, eps_parameters={"contour": True}) + plt.savefig("ring_fields.png", bbox_inches="tight", dpi=150) - wvl = np.array([1/m.freq for m in h.modes]) + wvl = np.array([1 / m.freq for m in h.modes]) Q = np.array([m.Q for m in h.modes]) sim.reset_meep() @@ -105,8 +119,8 @@ def find_modes(filename,wvl=1.55,bw=0.05): return wvl, Q -if __name__ == '__main__': - filename = create_ring_gds(2.0,0.5) - wvls, Qs = find_modes(filename,1.55,0.05) - for w, Q in zip(wvls,Qs): - print("mode: {}, {}".format(w,Q)) +if __name__ == "__main__": + filename = create_ring_gds(2.0, 0.5) + wvls, Qs = find_modes(filename, 1.55, 0.05) + for w, Q in zip(wvls, Qs): + print(f"mode: {w}, {Q}") diff --git a/python/examples/solve-cw.py b/python/examples/solve-cw.py index b97bbb5c1..76f58dbb4 100644 --- a/python/examples/solve-cw.py +++ b/python/examples/solve-cw.py @@ -1,7 +1,8 @@ -import meep as mp +import matplotlib.pyplot as plt import numpy as np from numpy import linalg as LA -import matplotlib.pyplot as plt + +import meep as mp n = 3.4 w = 1 @@ -9,87 +10,102 @@ pad = 4 dpml = 2 -sxy = 2*(r+w+pad+dpml) -cell_size = mp.Vector3(sxy,sxy) +sxy = 2 * (r + w + pad + dpml) +cell_size = mp.Vector3(sxy, sxy) pml_layers = [mp.PML(dpml)] -nonpml_vol = mp.Volume(mp.Vector3(), size=mp.Vector3(sxy-2*dpml,sxy-2*dpml)) +nonpml_vol = mp.Volume(mp.Vector3(), size=mp.Vector3(sxy - 2 * dpml, sxy - 2 * dpml)) -geometry = [mp.Cylinder(radius=r+w, material=mp.Medium(index=n)), - mp.Cylinder(radius=r)] +geometry = [ + mp.Cylinder(radius=r + w, material=mp.Medium(index=n)), + mp.Cylinder(radius=r), +] fcen = 0.118 -src = [mp.Source(mp.ContinuousSource(fcen), - component=mp.Ez, - center=mp.Vector3(r+0.1)), - mp.Source(mp.ContinuousSource(fcen), - component=mp.Ez, - center=mp.Vector3(-(r+0.1)), - amplitude=-1)] - -symmetries = [mp.Mirror(mp.X,phase=-1), - mp.Mirror(mp.Y,phase=+1)] - -sim = mp.Simulation(cell_size=cell_size, - geometry=geometry, - sources=src, - resolution=10, - force_complex_fields=True, - symmetries=symmetries, - boundary_layers=pml_layers) +src = [ + mp.Source(mp.ContinuousSource(fcen), component=mp.Ez, center=mp.Vector3(r + 0.1)), + mp.Source( + mp.ContinuousSource(fcen), + component=mp.Ez, + center=mp.Vector3(-(r + 0.1)), + amplitude=-1, + ), +] + +symmetries = [mp.Mirror(mp.X, phase=-1), mp.Mirror(mp.Y, phase=+1)] + +sim = mp.Simulation( + cell_size=cell_size, + geometry=geometry, + sources=src, + resolution=10, + force_complex_fields=True, + symmetries=symmetries, + boundary_layers=pml_layers, +) num_tols = 5 -tols = np.power(10, np.arange(-8.0,-8.0-num_tols,-1.0)) -ez_dat = np.zeros((122,122,num_tols), dtype=np.complex_) +tols = np.power(10, np.arange(-8.0, -8.0 - num_tols, -1.0)) +ez_dat = np.zeros((122, 122, num_tols), dtype=np.complex_) for i in range(num_tols): sim.init_sim() sim.solve_cw(tols[i], 10000, 10) - ez_dat[:,:,i] = sim.get_array(vol=nonpml_vol, component=mp.Ez) + ez_dat[:, :, i] = sim.get_array(vol=nonpml_vol, component=mp.Ez) -err_dat = np.zeros(num_tols-1) -for i in range(num_tols-1): - err_dat[i] = LA.norm(ez_dat[:,:,i]-ez_dat[:,:,num_tols-1]) +err_dat = np.zeros(num_tols - 1) +for i in range(num_tols - 1): + err_dat[i] = LA.norm(ez_dat[:, :, i] - ez_dat[:, :, num_tols - 1]) plt.figure(dpi=150) -plt.loglog(tols[:num_tols-1], err_dat, 'bo-'); -plt.xlabel("frequency-domain solver tolerance"); -plt.ylabel("L2 norm of error in fields"); +plt.loglog(tols[: num_tols - 1], err_dat, "bo-") +plt.xlabel("frequency-domain solver tolerance") +plt.ylabel("L2 norm of error in fields") plt.show() eps_data = sim.get_array(vol=nonpml_vol, component=mp.Dielectric) -ez_data = np.real(ez_dat[:,:,num_tols-1]) +ez_data = np.real(ez_dat[:, :, num_tols - 1]) plt.figure() -plt.imshow(eps_data.transpose(), interpolation='spline36', cmap='binary') -plt.imshow(ez_data.transpose(), interpolation='spline36', cmap='RdBu', alpha=0.9) -plt.axis('off') +plt.imshow(eps_data.transpose(), interpolation="spline36", cmap="binary") +plt.imshow(ez_data.transpose(), interpolation="spline36", cmap="RdBu", alpha=0.9) +plt.axis("off") plt.show() if np.all(np.diff(err_dat) < 0): - print("PASSED solve_cw test: error in the fields is decreasing with increasing resolution") + print( + "PASSED solve_cw test: error in the fields is decreasing with increasing resolution" + ) else: - print("FAILED solve_cw test: error in the fields is NOT decreasing with increasing resolution") + print( + "FAILED solve_cw test: error in the fields is NOT decreasing with increasing resolution" + ) sim.reset_meep() df = 0.08 -src = [mp.Source(mp.GaussianSource(fcen,fwidth=df), - component=mp.Ez, - center=mp.Vector3(r+0.1)), - mp.Source(mp.GaussianSource(fcen,fwidth=df), - component=mp.Ez, - center=mp.Vector3(-(r+0.1)), - amplitude=-1)] - -sim = mp.Simulation(cell_size=mp.Vector3(sxy,sxy), - geometry=geometry, - sources=src, - resolution=10, - symmetries=symmetries, - boundary_layers=pml_layers) +src = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=mp.Vector3(r + 0.1) + ), + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=mp.Ez, + center=mp.Vector3(-(r + 0.1)), + amplitude=-1, + ), +] + +sim = mp.Simulation( + cell_size=mp.Vector3(sxy, sxy), + geometry=geometry, + sources=src, + resolution=10, + symmetries=symmetries, + boundary_layers=pml_layers, +) dft_obj = sim.add_dft_fields([mp.Ez], fcen, 0, 1, where=nonpml_vol) @@ -99,7 +115,7 @@ ez_data = np.real(sim.get_dft_array(dft_obj, mp.Ez, 0)) plt.figure() -plt.imshow(eps_data.transpose(), interpolation='spline36', cmap='binary') -plt.imshow(ez_data.transpose(), interpolation='spline36', cmap='RdBu', alpha=0.9) -plt.axis('off') +plt.imshow(eps_data.transpose(), interpolation="spline36", cmap="binary") +plt.imshow(ez_data.transpose(), interpolation="spline36", cmap="RdBu", alpha=0.9) +plt.axis("off") plt.show() diff --git a/python/examples/stochastic_emitter.py b/python/examples/stochastic_emitter.py index c14e51be4..c6cc377f9 100644 --- a/python/examples/stochastic_emitter.py +++ b/python/examples/stochastic_emitter.py @@ -1,15 +1,30 @@ -import meep as mp -from meep.materials import Ag +import argparse + import numpy as np +from meep.materials import Ag + +import meep as mp -import argparse parser = argparse.ArgumentParser() -parser.add_argument('-res', type=int, default=50, help='resolution (pixels/um)') -parser.add_argument('-nr', type=int, default=20, help='number of random trials (method 1)') -parser.add_argument('-nd', type=int, default=10, help='number of dipoles') -parser.add_argument('-nf', type=int, default=500, help='number of frequencies') -parser.add_argument('-textured', action='store_true', default=False, help='flat (default) or textured surface') -parser.add_argument('-method', type=int, choices=[1,2], default=1, help='type of method: (1) random dipoles with nr trials or (2) single dipole with 1 run per dipole') +parser.add_argument("-res", type=int, default=50, help="resolution (pixels/um)") +parser.add_argument( + "-nr", type=int, default=20, help="number of random trials (method 1)" +) +parser.add_argument("-nd", type=int, default=10, help="number of dipoles") +parser.add_argument("-nf", type=int, default=500, help="number of frequencies") +parser.add_argument( + "-textured", + action="store_true", + default=False, + help="flat (default) or textured surface", +) +parser.add_argument( + "-method", + type=int, + choices=[1, 2], + default=1, + help="type of method: (1) random dipoles with nr trials or (2) single dipole with 1 run per dipole", +) args = parser.parse_args() resolution = args.res @@ -22,56 +37,81 @@ dAg = 0.5 sx = 1.1 -sy = dpml+dair+hrod+dsub+dAg +sy = dpml + dair + hrod + dsub + dAg -cell_size = mp.Vector3(sx,sy) +cell_size = mp.Vector3(sx, sy) -pml_layers = [mp.PML(direction=mp.Y, - thickness=dpml, - side=mp.High)] +pml_layers = [mp.PML(direction=mp.Y, thickness=dpml, side=mp.High)] fcen = 1.0 df = 0.2 nfreq = args.nf ndipole = args.nd ntrial = args.nr -run_time = 2*nfreq/df - -geometry = [mp.Block(material=mp.Medium(index=3.45), - center=mp.Vector3(0,0.5*sy-dpml-dair-hrod-0.5*dsub), - size=mp.Vector3(mp.inf,dsub,mp.inf)), - mp.Block(material=Ag, - center=mp.Vector3(0,-0.5*sy+0.5*dAg), - size=mp.Vector3(mp.inf,dAg,mp.inf))] +run_time = 2 * nfreq / df + +geometry = [ + mp.Block( + material=mp.Medium(index=3.45), + center=mp.Vector3(0, 0.5 * sy - dpml - dair - hrod - 0.5 * dsub), + size=mp.Vector3(mp.inf, dsub, mp.inf), + ), + mp.Block( + material=Ag, + center=mp.Vector3(0, -0.5 * sy + 0.5 * dAg), + size=mp.Vector3(mp.inf, dAg, mp.inf), + ), +] if args.textured: - geometry.append(mp.Block(material=mp.Medium(index=3.45), - center=mp.Vector3(0,0.5*sy-dpml-dair-0.5*hrod), - size=mp.Vector3(wrod,hrod,mp.inf))) + geometry.append( + mp.Block( + material=mp.Medium(index=3.45), + center=mp.Vector3(0, 0.5 * sy - dpml - dair - 0.5 * hrod), + size=mp.Vector3(wrod, hrod, mp.inf), + ) + ) -def compute_flux(m=1,n=0): + +def compute_flux(m=1, n=0): if m == 1: - sources = [] - for n in range(ndipole): - sources.append(mp.Source(mp.CustomSource(src_func=lambda t: np.random.randn()), - component=mp.Ez, - center=mp.Vector3(sx*(-0.5+n/ndipole),-0.5*sy+dAg+0.5*dsub))) + sources = [ + mp.Source( + mp.CustomSource(src_func=lambda t: np.random.randn()), + component=mp.Ez, + center=mp.Vector3( + sx * (-0.5 + n / ndipole), -0.5 * sy + dAg + 0.5 * dsub + ), + ) + for n in range(ndipole) + ] + else: - sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df), - component=mp.Ez, - center=mp.Vector3(sx*(-0.5+n/ndipole),-0.5*sy+dAg+0.5*dsub))] - - sim = mp.Simulation(cell_size=cell_size, - resolution=resolution, - k_point=mp.Vector3(), - boundary_layers=pml_layers, - geometry=geometry, - sources=sources) - - flux_mon = sim.add_flux(fcen, - df, - nfreq, - mp.FluxRegion(center=mp.Vector3(0,0.5*sy-dpml),size=mp.Vector3(sx))) + sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=mp.Ez, + center=mp.Vector3( + sx * (-0.5 + n / ndipole), -0.5 * sy + dAg + 0.5 * dsub + ), + ) + ] + + sim = mp.Simulation( + cell_size=cell_size, + resolution=resolution, + k_point=mp.Vector3(), + boundary_layers=pml_layers, + geometry=geometry, + sources=sources, + ) + + flux_mon = sim.add_flux( + fcen, + df, + nfreq, + mp.FluxRegion(center=mp.Vector3(0, 0.5 * sy - dpml), size=mp.Vector3(sx)), + ) sim.run(until=run_time) @@ -82,15 +122,18 @@ def compute_flux(m=1,n=0): if args.method == 1: - fluxes = np.zeros((nfreq,ntrial)) + fluxes = np.zeros((nfreq, ntrial)) for t in range(ntrial): - freqs, fluxes[:,t] = compute_flux(m=1) + freqs, fluxes[:, t] = compute_flux(m=1) else: - fluxes = np.zeros((nfreq,ndipole)) + fluxes = np.zeros((nfreq, ndipole)) for d in range(ndipole): - freqs, fluxes[:,d] = compute_flux(m=2,n=d) + freqs, fluxes[:, d] = compute_flux(m=2, n=d) if mp.am_master(): - with open('method{}_{}_res{}_nfreq{}_ndipole{}.npz'.format(args.method,"textured" if args.textured else "flat",resolution,nfreq,ndipole),'wb') as f: - np.savez(f,freqs=freqs,fluxes=fluxes) + with open( + f'method{args.method}_{"textured" if args.textured else "flat"}_res{resolution}_nfreq{nfreq}_ndipole{ndipole}.npz', + "wb", + ) as f: + np.savez(f, freqs=freqs, fluxes=fluxes) diff --git a/python/examples/stochastic_emitter_line.py b/python/examples/stochastic_emitter_line.py index eef3bac61..5cae674ce 100644 --- a/python/examples/stochastic_emitter_line.py +++ b/python/examples/stochastic_emitter_line.py @@ -1,15 +1,32 @@ -import meep as mp -from meep.materials import Ag +import argparse + import numpy as np +from meep.materials import Ag + +import meep as mp -import argparse parser = argparse.ArgumentParser() -parser.add_argument('-res', type=int, default=50, help='resolution (pixels/um)') -parser.add_argument('-nf', type=int, default=500, help='number of frequencies') -parser.add_argument('-nsrc', type=int, default=15, help='number of line sources with cosine Fourier series amplitude function (method 3)') -parser.add_argument('-textured', action='store_true', default=False, help='flat (default) or textured surface') -parser.add_argument('-method', type=int, choices=[2,3], default=2, - help='type of method: (2) single dipole with 1 run per dipole or (3) line source with cosine Fourier series amplitude function') +parser.add_argument("-res", type=int, default=50, help="resolution (pixels/um)") +parser.add_argument("-nf", type=int, default=500, help="number of frequencies") +parser.add_argument( + "-nsrc", + type=int, + default=15, + help="number of line sources with cosine Fourier series amplitude function (method 3)", +) +parser.add_argument( + "-textured", + action="store_true", + default=False, + help="flat (default) or textured surface", +) +parser.add_argument( + "-method", + type=int, + choices=[2, 3], + default=2, + help="type of method: (2) single dipole with 1 run per dipole or (3) line source with cosine Fourier series amplitude function", +) args = parser.parse_args() resolution = args.res @@ -22,62 +39,89 @@ dAg = 0.4 sx = 1.5 -sy = dpml+dair+hrod+dsub+dAg +sy = dpml + dair + hrod + dsub + dAg -cell_size = mp.Vector3(sx,sy) +cell_size = mp.Vector3(sx, sy) -pml_layers = [mp.PML(direction=mp.Y, - thickness=dpml, - side=mp.High)] +pml_layers = [mp.PML(direction=mp.Y, thickness=dpml, side=mp.High)] fcen = 1.0 df = 0.2 nfreq = args.nf nsrc = args.nsrc -ndipole = int(sx*resolution) -run_time = 2*nfreq/df - -geometry = [mp.Block(material=mp.Medium(index=3.45), - center=mp.Vector3(0,0.5*sy-dpml-dair-hrod-0.5*dsub), - size=mp.Vector3(mp.inf,dsub,mp.inf)), - mp.Block(material=Ag, - center=mp.Vector3(0,-0.5*sy+0.5*dAg), - size=mp.Vector3(mp.inf,dAg,mp.inf))] +ndipole = int(sx * resolution) +run_time = 2 * nfreq / df + +geometry = [ + mp.Block( + material=mp.Medium(index=3.45), + center=mp.Vector3(0, 0.5 * sy - dpml - dair - hrod - 0.5 * dsub), + size=mp.Vector3(mp.inf, dsub, mp.inf), + ), + mp.Block( + material=Ag, + center=mp.Vector3(0, -0.5 * sy + 0.5 * dAg), + size=mp.Vector3(mp.inf, dAg, mp.inf), + ), +] if args.textured: - geometry.append(mp.Block(material=mp.Medium(index=3.45), - center=mp.Vector3(0,0.5*sy-dpml-dair-0.5*hrod), - size=mp.Vector3(wrod,hrod,mp.inf))) + geometry.append( + mp.Block( + material=mp.Medium(index=3.45), + center=mp.Vector3(0, 0.5 * sy - dpml - dair - 0.5 * hrod), + size=mp.Vector3(wrod, hrod, mp.inf), + ) + ) + def src_amp_func(n): def _src_amp_func(p): if n == 0: - return 1/np.sqrt(sx) + return 1 / np.sqrt(sx) else: - return np.sqrt(2/sx) * np.cos(n*np.pi*(p.x+0.5*sx)/sx) + return np.sqrt(2 / sx) * np.cos(n * np.pi * (p.x + 0.5 * sx) / sx) + return _src_amp_func -def compute_flux(m,n): + +def compute_flux(m, n): if m == 2: - sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df), - component=mp.Ez, - center=mp.Vector3(sx*(-0.5+n/ndipole),-0.5*sy+dAg+0.5*dsub))] + sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=mp.Ez, + center=mp.Vector3( + sx * (-0.5 + n / ndipole), -0.5 * sy + dAg + 0.5 * dsub + ), + ) + ] else: - sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df), - component=mp.Ez, - center=mp.Vector3(0,-0.5*sy+dAg+0.5*dsub), - size=mp.Vector3(sx,0), - amp_func=src_amp_func(n))] - - sim = mp.Simulation(cell_size=cell_size, - resolution=resolution, - k_point=mp.Vector3(), - boundary_layers=pml_layers, - geometry=geometry, - sources=sources) - - flux_mon = sim.add_flux(fcen, df, nfreq, - mp.FluxRegion(center=mp.Vector3(0,0.5*sy-dpml),size=mp.Vector3(sx))) + sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=mp.Ez, + center=mp.Vector3(0, -0.5 * sy + dAg + 0.5 * dsub), + size=mp.Vector3(sx, 0), + amp_func=src_amp_func(n), + ) + ] + + sim = mp.Simulation( + cell_size=cell_size, + resolution=resolution, + k_point=mp.Vector3(), + boundary_layers=pml_layers, + geometry=geometry, + sources=sources, + ) + + flux_mon = sim.add_flux( + fcen, + df, + nfreq, + mp.FluxRegion(center=mp.Vector3(0, 0.5 * sy - dpml), size=mp.Vector3(sx)), + ) sim.run(until=run_time) @@ -88,20 +132,18 @@ def compute_flux(m,n): if args.method == 2: - fluxes = np.zeros((nfreq,ndipole)) + fluxes = np.zeros((nfreq, ndipole)) for d in range(ndipole): - freqs, fluxes[:,d] = compute_flux(2,d) + freqs, fluxes[:, d] = compute_flux(2, d) else: - fluxes = np.zeros((nfreq,nsrc)) + fluxes = np.zeros((nfreq, nsrc)) for d in range(nsrc): - freqs, fluxes[:,d] = compute_flux(3,d) + freqs, fluxes[:, d] = compute_flux(3, d) if mp.am_master(): - with open('method{}_{}_res{}_nfreq{}_{}{}.npz'.format(args.method, - "textured" if args.textured else "flat", - resolution, - nfreq, - "ndipole" if args.method == 2 else "nsrc", - ndipole if args.method == 2 else nsrc),'wb') as f: - np.savez(f,freqs=freqs,fluxes=fluxes) + with open( + f'method{args.method}_{"textured" if args.textured else "flat"}_res{resolution}_nfreq{nfreq}_{"ndipole" if args.method == 2 else "nsrc"}{ndipole if args.method == 2 else nsrc}.npz', + "wb", + ) as f: + np.savez(f, freqs=freqs, fluxes=fluxes) diff --git a/python/examples/straight-waveguide.py b/python/examples/straight-waveguide.py index b17bd37d4..86d3d9495 100644 --- a/python/examples/straight-waveguide.py +++ b/python/examples/straight-waveguide.py @@ -1,44 +1,48 @@ -# -*- coding: utf-8 -*- - # From the Meep tutorial: plotting permittivity and fields of a straight waveguide -from __future__ import division - import meep as mp -cell = mp.Vector3(16,8,0) +cell = mp.Vector3(16, 8, 0) -geometry = [mp.Block(mp.Vector3(mp.inf,1,mp.inf), - center=mp.Vector3(), - material=mp.Medium(epsilon=12))] +geometry = [ + mp.Block( + mp.Vector3(mp.inf, 1, mp.inf), + center=mp.Vector3(), + material=mp.Medium(epsilon=12), + ) +] -sources = [mp.Source(mp.ContinuousSource(frequency=0.15), - component=mp.Ez, - center=mp.Vector3(-7,0))] +sources = [ + mp.Source( + mp.ContinuousSource(frequency=0.15), component=mp.Ez, center=mp.Vector3(-7, 0) + ) +] pml_layers = [mp.PML(1.0)] resolution = 10 -sim = mp.Simulation(cell_size=cell, - boundary_layers=pml_layers, - geometry=geometry, - sources=sources, - resolution=resolution) +sim = mp.Simulation( + cell_size=cell, + boundary_layers=pml_layers, + geometry=geometry, + sources=sources, + resolution=resolution, +) sim.run(until=200) -import numpy as np import matplotlib.pyplot as plt +import numpy as np eps_data = sim.get_array(center=mp.Vector3(), size=cell, component=mp.Dielectric) plt.figure() -plt.imshow(eps_data.transpose(), interpolation='spline36', cmap='binary') -plt.axis('off') +plt.imshow(eps_data.transpose(), interpolation="spline36", cmap="binary") +plt.axis("off") plt.show() ez_data = sim.get_array(center=mp.Vector3(), size=cell, component=mp.Ez) plt.figure() -plt.imshow(eps_data.transpose(), interpolation='spline36', cmap='binary') -plt.imshow(ez_data.transpose(), interpolation='spline36', cmap='RdBu', alpha=0.9) -plt.axis('off') +plt.imshow(eps_data.transpose(), interpolation="spline36", cmap="binary") +plt.imshow(ez_data.transpose(), interpolation="spline36", cmap="RdBu", alpha=0.9) +plt.axis("off") plt.show() diff --git a/python/examples/wvg-src.py b/python/examples/wvg-src.py index b5cbbaf09..de0b7b0f6 100644 --- a/python/examples/wvg-src.py +++ b/python/examples/wvg-src.py @@ -1,8 +1,5 @@ -from __future__ import division - import meep as mp - # Example file illustrating an eigenmode source, generating a waveguide mode # (requires recent MPB version to be installed before Meep is compiled) @@ -10,17 +7,27 @@ # an asymmetrical dielectric waveguide: geometry = [ - mp.Block(center=mp.Vector3(), size=mp.Vector3(mp.inf, 1, mp.inf), - material=mp.Medium(epsilon=12)), - mp.Block(center=mp.Vector3(y=0.3), size=mp.Vector3(mp.inf, 0.1, mp.inf), - material=mp.Medium()) + mp.Block( + center=mp.Vector3(), + size=mp.Vector3(mp.inf, 1, mp.inf), + material=mp.Medium(epsilon=12), + ), + mp.Block( + center=mp.Vector3(y=0.3), + size=mp.Vector3(mp.inf, 0.1, mp.inf), + material=mp.Medium(), + ), ] # create a transparent source that excites a right-going waveguide mode sources = [ - mp.EigenModeSource(src=mp.ContinuousSource(0.15), size=mp.Vector3(y=6), - center=mp.Vector3(x=-5), component=mp.Dielectric, - eig_parity=mp.ODD_Z) + mp.EigenModeSource( + src=mp.ContinuousSource(0.15), + size=mp.Vector3(y=6), + center=mp.Vector3(x=-5), + component=mp.Dielectric, + eig_parity=mp.ODD_Z, + ) ] pml_layers = [mp.PML(1.0)] @@ -35,20 +42,24 @@ sources=sources, boundary_layers=pml_layers, force_complex_fields=force_complex_fields, - resolution=resolution + resolution=resolution, ) sim.run( mp.at_beginning(mp.output_epsilon), mp.at_end(mp.output_png(mp.Ez, "-a yarg -A $EPS -S3 -Zc dkbluered", rm_h5=False)), - until=200 + until=200, ) -flux1 = sim.flux_in_box(mp.X, mp.Volume(center=mp.Vector3(-6.0), size=mp.Vector3(1.8, 6))) -flux2 = sim.flux_in_box(mp.X, mp.Volume(center=mp.Vector3(6.0), size=mp.Vector3(1.8, 6))) +flux1 = sim.flux_in_box( + mp.X, mp.Volume(center=mp.Vector3(-6.0), size=mp.Vector3(1.8, 6)) +) +flux2 = sim.flux_in_box( + mp.X, mp.Volume(center=mp.Vector3(6.0), size=mp.Vector3(1.8, 6)) +) # averaged over y region of width 1.8 -print("left-going flux = {}".format(flux1 / -1.8)) +print(f"left-going flux = {flux1 / -1.8}") # averaged over y region of width 1.8 -print("right-going flux = {}".format(flux2 / 1.8)) +print(f"right-going flux = {flux2 / 1.8}") diff --git a/python/examples/zone_plate.py b/python/examples/zone_plate.py index 9defcac9f..17db0e0b9 100644 --- a/python/examples/zone_plate.py +++ b/python/examples/zone_plate.py @@ -1,104 +1,153 @@ -import meep as mp -import numpy as np import math + import matplotlib.pyplot as plt +import numpy as np + +import meep as mp -resolution = 25 # pixels/μm +resolution = 25 # pixels/μm -dpml = 1.0 # PML thickness -dsub = 2.0 # substrate thickness -dpad = 2.0 # padding betweeen zone plate and PML -zh = 0.5 # zone-plate height -zN = 25 # number of zones (odd zones: π phase shift, even zones: none) -focal_length = 200 # focal length of zone plate -spot_length = 100 # far-field line length -ff_res = 10 # far-field resolution +dpml = 1.0 # PML thickness +dsub = 2.0 # substrate thickness +dpad = 2.0 # padding betweeen zone plate and PML +zh = 0.5 # zone-plate height +zN = 25 # number of zones (odd zones: π phase shift, even zones: none) +focal_length = 200 # focal length of zone plate +spot_length = 100 # far-field line length +ff_res = 10 # far-field resolution pml_layers = [mp.PML(thickness=dpml)] wvl_cen = 0.5 -frq_cen = 1/wvl_cen -dfrq = 0.2*frq_cen +frq_cen = 1 / wvl_cen +dfrq = 0.2 * frq_cen ## radii of zones ## ref: eq. 7 of http://zoneplate.lbl.gov/theory -r = [math.sqrt(n*wvl_cen*(focal_length+n*wvl_cen/4)) for n in range(1,zN+1)] - -sr = r[-1]+dpad+dpml -sz = dpml+dsub+zh+dpad+dpml -cell_size = mp.Vector3(sr,0,sz) - -sources = [mp.Source(mp.GaussianSource(frq_cen,fwidth=dfrq,is_integrated=True), - component=mp.Er, - center=mp.Vector3(0.5*sr,0,-0.5*sz+dpml), - size=mp.Vector3(sr)), - mp.Source(mp.GaussianSource(frq_cen,fwidth=dfrq,is_integrated=True), - component=mp.Ep, - center=mp.Vector3(0.5*sr,0,-0.5*sz+dpml), - size=mp.Vector3(sr), - amplitude=-1j)] +r = [ + math.sqrt(n * wvl_cen * (focal_length + n * wvl_cen / 4)) for n in range(1, zN + 1) +] + +sr = r[-1] + dpad + dpml +sz = dpml + dsub + zh + dpad + dpml +cell_size = mp.Vector3(sr, 0, sz) + +sources = [ + mp.Source( + mp.GaussianSource(frq_cen, fwidth=dfrq, is_integrated=True), + component=mp.Er, + center=mp.Vector3(0.5 * sr, 0, -0.5 * sz + dpml), + size=mp.Vector3(sr), + ), + mp.Source( + mp.GaussianSource(frq_cen, fwidth=dfrq, is_integrated=True), + component=mp.Ep, + center=mp.Vector3(0.5 * sr, 0, -0.5 * sz + dpml), + size=mp.Vector3(sr), + amplitude=-1j, + ), +] glass = mp.Medium(index=1.5) -geometry = [mp.Block(material=glass, - size=mp.Vector3(sr,0,dpml+dsub), - center=mp.Vector3(0.5*sr,0,-0.5*sz+0.5*(dpml+dsub)))] - -for n in range(zN-1,-1,-1): - geometry.append(mp.Block(material=glass if n % 2 == 0 else mp.vacuum, - size=mp.Vector3(r[n],0,zh), - center=mp.Vector3(0.5*r[n],0,-0.5*sz+dpml+dsub+0.5*zh))) - -sim = mp.Simulation(cell_size=cell_size, - boundary_layers=pml_layers, - resolution=resolution, - sources=sources, - geometry=geometry, - dimensions=mp.CYLINDRICAL, - m=-1) +geometry = [ + mp.Block( + material=glass, + size=mp.Vector3(sr, 0, dpml + dsub), + center=mp.Vector3(0.5 * sr, 0, -0.5 * sz + 0.5 * (dpml + dsub)), + ) +] + +geometry.extend( + mp.Block( + material=glass if n % 2 == 0 else mp.vacuum, + size=mp.Vector3(r[n], 0, zh), + center=mp.Vector3(0.5 * r[n], 0, -0.5 * sz + dpml + dsub + 0.5 * zh), + ) + for n in range(zN - 1, -1, -1) +) + +sim = mp.Simulation( + cell_size=cell_size, + boundary_layers=pml_layers, + resolution=resolution, + sources=sources, + geometry=geometry, + dimensions=mp.CYLINDRICAL, + m=-1, +) ## near-field monitor -n2f_obj = sim.add_near2far(frq_cen, - 0, - 1, - mp.Near2FarRegion(center=mp.Vector3(0.5*(sr-dpml),0,0.5*sz-dpml), - size=mp.Vector3(sr-dpml)), - mp.Near2FarRegion(center=mp.Vector3(sr-dpml,0,0.5*sz-dpml-0.5*(dsub+zh+dpad)), - size=mp.Vector3(z=dsub+zh+dpad))) +n2f_obj = sim.add_near2far( + frq_cen, + 0, + 1, + mp.Near2FarRegion( + center=mp.Vector3(0.5 * (sr - dpml), 0, 0.5 * sz - dpml), + size=mp.Vector3(sr - dpml), + ), + mp.Near2FarRegion( + center=mp.Vector3(sr - dpml, 0, 0.5 * sz - dpml - 0.5 * (dsub + zh + dpad)), + size=mp.Vector3(z=dsub + zh + dpad), + ), +) sim.plot2D() if mp.am_master(): - plt.savefig("zone_plate_epsilon.png",bbox_inches='tight',dpi=150) + plt.savefig("zone_plate_epsilon.png", bbox_inches="tight", dpi=150) sim.run(until_after_sources=100) -ff_r = sim.get_farfields(n2f_obj, - ff_res, - center=mp.Vector3(0.5*(sr-dpml),0,-0.5*sz+dpml+dsub+zh+focal_length), - size=mp.Vector3(sr-dpml)) - -ff_z = sim.get_farfields(n2f_obj, - ff_res, - center=mp.Vector3(z=-0.5*sz+dpml+dsub+zh+focal_length), - size=mp.Vector3(z=spot_length)) - -E2_r = np.absolute(ff_r['Ex'])**2+np.absolute(ff_r['Ey'])**2+np.absolute(ff_r['Ez'])**2 -E2_z = np.absolute(ff_z['Ex'])**2+np.absolute(ff_z['Ey'])**2+np.absolute(ff_z['Ez'])**2 +ff_r = sim.get_farfields( + n2f_obj, + ff_res, + center=mp.Vector3( + 0.5 * (sr - dpml), 0, -0.5 * sz + dpml + dsub + zh + focal_length + ), + size=mp.Vector3(sr - dpml), +) + +ff_z = sim.get_farfields( + n2f_obj, + ff_res, + center=mp.Vector3(z=-0.5 * sz + dpml + dsub + zh + focal_length), + size=mp.Vector3(z=spot_length), +) + +E2_r = ( + np.absolute(ff_r["Ex"]) ** 2 + + np.absolute(ff_r["Ey"]) ** 2 + + np.absolute(ff_r["Ez"]) ** 2 +) +E2_z = ( + np.absolute(ff_z["Ex"]) ** 2 + + np.absolute(ff_z["Ey"]) ** 2 + + np.absolute(ff_z["Ez"]) ** 2 +) if mp.am_master(): plt.figure(dpi=200) - plt.subplot(1,2,1) - plt.semilogy(np.linspace(0,sr-dpml,len(E2_r)),E2_r,'bo-') - plt.xlim(-2,20) - plt.xticks([t for t in np.arange(0,25,5)]) - plt.grid(True,axis="y",which="both",ls="-") - plt.xlabel(r'$r$ coordinate (μm)') - plt.ylabel(r'energy density of far fields, |E|$^2$') - plt.subplot(1,2,2) - plt.semilogy(np.linspace(focal_length-0.5*spot_length,focal_length+0.5*spot_length,len(E2_z)),E2_z,'bo-') - plt.grid(True,axis="y",which="both",ls="-") - plt.xlabel(r'$z$ coordinate (μm)') - plt.ylabel(r'energy density of far fields, |E|$^2$') - plt.suptitle(r"binary-phase zone plate with focal length $z$ = {} μm".format(focal_length)) + plt.subplot(1, 2, 1) + plt.semilogy(np.linspace(0, sr - dpml, len(E2_r)), E2_r, "bo-") + plt.xlim(-2, 20) + plt.xticks(list(np.arange(0, 25, 5))) + plt.grid(True, axis="y", which="both", ls="-") + plt.xlabel(r"$r$ coordinate (μm)") + plt.ylabel(r"energy density of far fields, |E|$^2$") + plt.subplot(1, 2, 2) + plt.semilogy( + np.linspace( + focal_length - 0.5 * spot_length, + focal_length + 0.5 * spot_length, + len(E2_z), + ), + E2_z, + "bo-", + ) + plt.grid(True, axis="y", which="both", ls="-") + plt.xlabel(r"$z$ coordinate (μm)") + plt.ylabel(r"energy density of far fields, |E|$^2$") + plt.suptitle(f"binary-phase zone plate with focal length $z$ = {focal_length} μm") + plt.tight_layout() plt.savefig("zone_plate_farfields.png") diff --git a/python/geom.py b/python/geom.py index 908337089..0f676e3dc 100755 --- a/python/geom.py +++ b/python/geom.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- import functools import math import numbers @@ -9,24 +8,25 @@ from numbers import Number import numpy as np -import meep as mp +import meep as mp -FreqRange = namedtuple('FreqRange', ['min', 'max']) +FreqRange = namedtuple("FreqRange", ["min", "max"]) def check_nonnegative(prop, val): if val >= 0: return val else: - raise ValueError("{} cannot be negative. Got {}".format(prop, val)) + raise ValueError(f"{prop} cannot be negative. Got {val}") + def init_do_averaging(mat_func): - if not hasattr(mat_func, 'do_averaging'): + if not hasattr(mat_func, "do_averaging"): mat_func.do_averaging = False -class Vector3(object): +class Vector3: """ Properties: @@ -113,7 +113,7 @@ def __mul__(self, other): elif isinstance(other, Number): return self.scale(other) else: - raise TypeError("No operation known for 'Vector3 * {}'".format(type(other))) + raise TypeError(f"No operation known for 'Vector3 * {type(other)}'") def __truediv__(self, other): if type(other) is Vector3: @@ -121,7 +121,7 @@ def __truediv__(self, other): elif isinstance(other, Number): return Vector3(self.x / other, self.y / other, self.z / other) else: - raise TypeError("No operation known for 'Vector3 / {}'".format(type(other))) + raise TypeError(f"No operation known for 'Vector3 / {type(other)}'") def __rmul__(self, other): """ @@ -135,7 +135,7 @@ def __rmul__(self, other): if isinstance(other, Number): return self.scale(other) else: - raise TypeError("No operation known for '{} * Vector3'".format(type(other))) + raise TypeError(f"No operation known for '{type(other)} * Vector3'") def __getitem__(self, i): if i == 0: @@ -145,10 +145,10 @@ def __getitem__(self, i): elif i == 2: return self.z else: - raise IndexError("No value at index {}".format(i)) + raise IndexError(f"No value at index {i}") def __repr__(self): - return "Vector3<{}, {}, {}>".format(self.x, self.y, self.z) + return f"Vector3<{self.x}, {self.y}, {self.z}>" def __array__(self): return np.array([self.x, self.y, self.z]) @@ -220,9 +220,11 @@ def close(self, v, tol=1.0e-7): v1.close(v2, [tol]) ``` """ - return (abs(self.x - v.x) <= tol and - abs(self.y - v.y) <= tol and - abs(self.z - v.z) <= tol) + return ( + abs(self.x - v.x) <= tol + and abs(self.y - v.y) <= tol + and abs(self.z - v.z) <= tol + ) def rotate(self, axis, theta): """ @@ -255,7 +257,7 @@ def rotate_reciprocal(self, axis, theta, lat): return cartesian_to_reciprocal(v.rotate(a, theta), lat) -class Medium(object): +class Medium: """ This class is used to specify the materials that geometric objects are made of. It represents an electromagnetic medium which is possibly nonlinear and/or dispersive. @@ -307,32 +309,36 @@ class Medium(object): Dispersive dielectric and magnetic materials, above, are specified via a list of objects that are subclasses of type `Susceptibility`. """ - def __init__(self, epsilon_diag=Vector3(1, 1, 1), - epsilon_offdiag=Vector3(), - mu_diag=Vector3(1, 1, 1), - mu_offdiag=Vector3(), - E_susceptibilities=None, - H_susceptibilities=None, - E_chi2_diag=Vector3(), - E_chi3_diag=Vector3(), - H_chi2_diag=Vector3(), - H_chi3_diag=Vector3(), - D_conductivity_diag=Vector3(), - D_conductivity_offdiag=Vector3(), - B_conductivity_diag=Vector3(), - B_conductivity_offdiag=Vector3(), - epsilon=None, - index=None, - mu=None, - chi2=None, - chi3=None, - D_conductivity=None, - B_conductivity=None, - E_chi2=None, - E_chi3=None, - H_chi2=None, - H_chi3=None, - valid_freq_range=FreqRange(min=-mp.inf, max=mp.inf)): + + def __init__( + self, + epsilon_diag=Vector3(1, 1, 1), + epsilon_offdiag=Vector3(), + mu_diag=Vector3(1, 1, 1), + mu_offdiag=Vector3(), + E_susceptibilities=None, + H_susceptibilities=None, + E_chi2_diag=Vector3(), + E_chi3_diag=Vector3(), + H_chi2_diag=Vector3(), + H_chi3_diag=Vector3(), + D_conductivity_diag=Vector3(), + D_conductivity_offdiag=Vector3(), + B_conductivity_diag=Vector3(), + B_conductivity_offdiag=Vector3(), + epsilon=None, + index=None, + mu=None, + chi2=None, + chi3=None, + D_conductivity=None, + B_conductivity=None, + E_chi2=None, + E_chi3=None, + H_chi2=None, + H_chi3=None, + valid_freq_range=FreqRange(min=-mp.inf, max=mp.inf), + ): """ Creates a `Medium` object. @@ -406,9 +412,13 @@ def __init__(self, epsilon_diag=Vector3(1, 1, 1), mu_diag = Vector3(mu, mu, mu) if D_conductivity: - D_conductivity_diag = Vector3(D_conductivity, D_conductivity, D_conductivity) + D_conductivity_diag = Vector3( + D_conductivity, D_conductivity, D_conductivity + ) if B_conductivity: - B_conductivity_diag = Vector3(B_conductivity, B_conductivity, B_conductivity) + B_conductivity_diag = Vector3( + B_conductivity, B_conductivity, B_conductivity + ) if E_chi2: E_chi2_diag = Vector3(E_chi2, E_chi2, E_chi2) @@ -423,8 +433,8 @@ def __init__(self, epsilon_diag=Vector3(1, 1, 1), self.epsilon_offdiag = Vector3(*epsilon_offdiag) self.mu_diag = Vector3(*mu_diag) self.mu_offdiag = Vector3(*mu_offdiag) - self.E_susceptibilities = E_susceptibilities if E_susceptibilities else [] - self.H_susceptibilities = H_susceptibilities if H_susceptibilities else [] + self.E_susceptibilities = E_susceptibilities or [] + self.H_susceptibilities = H_susceptibilities or [] self.E_chi2_diag = Vector3(chi2, chi2, chi2) if chi2 else Vector3(*E_chi2_diag) self.E_chi3_diag = Vector3(chi3, chi3, chi3) if chi3 else Vector3(*E_chi3_diag) self.H_chi2_diag = Vector3(*H_chi2_diag) @@ -436,7 +446,7 @@ def __init__(self, epsilon_diag=Vector3(1, 1, 1), self.valid_freq_range = valid_freq_range def __repr__(self): - return 'Medium()' + return "Medium()" def transform(self, m): """ @@ -451,12 +461,22 @@ def transform(self, m): left-handed materials, which are [problematic in nondispersive media](FAQ.md#why-does-my-simulation-diverge-if-0). """ - eps = Matrix(mp.Vector3(self.epsilon_diag.x, self.epsilon_offdiag.x, self.epsilon_offdiag.y), - mp.Vector3(self.epsilon_offdiag.x, self.epsilon_diag.y, self.epsilon_offdiag.z), - mp.Vector3(self.epsilon_offdiag.y, self.epsilon_offdiag.z, self.epsilon_diag.z)) - mu = Matrix(mp.Vector3(self.mu_diag.x, self.mu_offdiag.x, self.mu_offdiag.y), - mp.Vector3(self.mu_offdiag.x, self.mu_diag.y, self.mu_offdiag.z), - mp.Vector3(self.mu_offdiag.y, self.mu_offdiag.z, self.mu_diag.z)) + eps = Matrix( + mp.Vector3( + self.epsilon_diag.x, self.epsilon_offdiag.x, self.epsilon_offdiag.y + ), + mp.Vector3( + self.epsilon_offdiag.x, self.epsilon_diag.y, self.epsilon_offdiag.z + ), + mp.Vector3( + self.epsilon_offdiag.y, self.epsilon_offdiag.z, self.epsilon_diag.z + ), + ) + mu = Matrix( + mp.Vector3(self.mu_diag.x, self.mu_offdiag.x, self.mu_offdiag.y), + mp.Vector3(self.mu_offdiag.x, self.mu_diag.y, self.mu_offdiag.z), + mp.Vector3(self.mu_offdiag.y, self.mu_offdiag.z, self.mu_diag.z), + ) new_eps = (m * eps * m.transpose()) / abs(m.determinant()) new_mu = (m * mu * m.transpose()) / abs(m.determinant()) @@ -472,26 +492,48 @@ def transform(self, m): s.transform(m) def rotate(self, axis, theta): - T = get_rotation_matrix(axis,theta) + T = get_rotation_matrix(axis, theta) self.transform(T) - def epsilon(self,freq): + def epsilon(self, freq): """ Returns the medium's permittivity tensor as a 3x3 Numpy array at the specified frequency `freq` which can be either a scalar, list, or Numpy array. In the case of a list/array of N frequency points, a Numpy array of size Nx3x3 is returned. """ - return self._get_epsmu(self.epsilon_diag, self.epsilon_offdiag, self.E_susceptibilities, self.D_conductivity_diag, self.D_conductivity_offdiag, freq) + return self._get_epsmu( + self.epsilon_diag, + self.epsilon_offdiag, + self.E_susceptibilities, + self.D_conductivity_diag, + self.D_conductivity_offdiag, + freq, + ) - def mu(self,freq): + def mu(self, freq): """ Returns the medium's permeability tensor as a 3x3 Numpy array at the specified frequency `freq` which can be either a scalar, list, or Numpy array. In the case of a list/array of N frequency points, a Numpy array of size Nx3x3 is returned. """ - return self._get_epsmu(self.mu_diag, self.mu_offdiag, self.H_susceptibilities, self.B_conductivity_diag, self.B_conductivity_offdiag, freq) - - def _get_epsmu(self, diag, offdiag, susceptibilities, conductivity_diag, conductivity_offdiag, freq): + return self._get_epsmu( + self.mu_diag, + self.mu_offdiag, + self.H_susceptibilities, + self.B_conductivity_diag, + self.B_conductivity_offdiag, + freq, + ) + + def _get_epsmu( + self, + diag, + offdiag, + susceptibilities, + conductivity_diag, + conductivity_offdiag, + freq, + ): # Clean the input if np.isscalar(freq): freqs = np.array(freq)[np.newaxis, np.newaxis, np.newaxis] @@ -501,48 +543,60 @@ def _get_epsmu(self, diag, offdiag, susceptibilities, conductivity_diag, conduct # Check for values outside of allowed ranges if np.min(np.squeeze(freqs)) < self.valid_freq_range.min: - raise ValueError('User specified frequency {} is below the Medium\'s limit, {}.'.format(np.min(np.squeeze(freqs)),self.valid_freq_range.min)) + raise ValueError( + f"User specified frequency {np.min(np.squeeze(freqs))} is below the Medium's limit, {self.valid_freq_range.min}." + ) + if np.max(np.squeeze(freqs)) > self.valid_freq_range.max: - raise ValueError('User specified frequency {} is above the Medium\'s limit, {}.'.format(np.max(np.squeeze(freqs)),self.valid_freq_range.max)) + raise ValueError( + f"User specified frequency {np.max(np.squeeze(freqs))} is above the Medium's limit, {self.valid_freq_range.max}." + ) # Initialize with instantaneous dielectric tensor - epsmu = np.expand_dims(Matrix(diag=diag,offdiag=offdiag),axis=0) + epsmu = np.expand_dims(Matrix(diag=diag, offdiag=offdiag), axis=0) # Iterate through susceptibilities for i_sus in range(len(susceptibilities)): epsmu = epsmu + susceptibilities[i_sus].eval_susceptibility(freqs) # Account for conductivity term (only multiply if nonzero to avoid unnecessary complex numbers) - conductivity = np.expand_dims(Matrix(diag=conductivity_diag,offdiag=conductivity_offdiag),axis=0) + conductivity = np.expand_dims( + Matrix(diag=conductivity_diag, offdiag=conductivity_offdiag), axis=0 + ) if np.count_nonzero(conductivity) > 0: - epsmu = (1 + 1j/(2*np.pi*freqs) * conductivity) * epsmu + epsmu = (1 + 1j / (2 * np.pi * freqs) * conductivity) * epsmu # Convert list matrix to 3D numpy array size [freqs,3,3] return np.squeeze(epsmu) -class MaterialGrid(object): + +class MaterialGrid: """ This class is used to specify materials on a rectilinear grid. A class object is passed as the `material` argument of a [`Block`](#block) geometric object or the `default_material` argument of the [`Simulation`](#Simulation) constructor (similar to a [material function](#medium)). """ + def check_weights(self, w): - if np.amin(w) < 0. or np.amax(w) > 1.: - warnings.warn('The weights parameter of MaterialGrid must be in the range [0,1].') - return np.clip(w, 0., 1.) - else: + if np.amin(w) >= 0.0 and np.amax(w) <= 1.0: return w - - def __init__(self, - grid_size, - medium1, - medium2, - weights=None, - grid_type="U_DEFAULT", - do_averaging=True, - beta=0, - eta=0.5, - damping=0): + warnings.warn( + "The weights parameter of MaterialGrid must be in the range [0,1]." + ) + return np.clip(w, 0.0, 1.0) + + def __init__( + self, + grid_size, + medium1, + medium2, + weights=None, + grid_type="U_DEFAULT", + do_averaging=True, + beta=0, + eta=0.5, + damping=0, + ): """ Creates a `MaterialGrid` object. @@ -593,15 +647,17 @@ def __init__(self, self.grid_size = mp.Vector3(*grid_size) self.medium1 = medium1 self.medium2 = medium2 + def isclose(a, b, rel_tol=1e-09, abs_tol=0.0): - return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol) - if isclose(self.grid_size.x,0): + return abs(a - b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol) + + if isclose(self.grid_size.x, 0): self.grid_size.x = 1 - if isclose(self.grid_size.y,0): + if isclose(self.grid_size.y, 0): self.grid_size.y = 1 - if isclose(self.grid_size.z,0): + if isclose(self.grid_size.z, 0): self.grid_size.z = 1 - self.num_params=int(self.grid_size.x*self.grid_size.y*self.grid_size.z) + self.num_params = int(self.grid_size.x * self.grid_size.y * self.grid_size.z) self.do_averaging = do_averaging self.beta = beta self.eta = eta @@ -609,18 +665,21 @@ def isclose(a, b, rel_tol=1e-09, abs_tol=0.0): if weights is None: self.weights = np.zeros((self.num_params,)) elif weights.size != self.num_params: - raise ValueError("weights of shape {} do not match user specified grid dimension: {}".format(weights.size,self.grid_size)) + raise ValueError( + "weights of shape {} do not match user specified grid dimension: {}".format( + weights.size, self.grid_size + ) + ) else: self.weights = self.check_weights(weights).flatten().astype(np.float64) - grid_type_dict = { - "U_MIN":0, - "U_PROD":1, - "U_MEAN":2, - "U_DEFAULT":3 - } + grid_type_dict = {"U_MIN": 0, "U_PROD": 1, "U_MEAN": 2, "U_DEFAULT": 3} if grid_type not in grid_type_dict: - raise ValueError("Invalid grid_type: {}. Must be either U_MIN, U_PROD, U_MEAN, or U_DEFAULT".format(grid_type_dict)) + raise ValueError( + "Invalid grid_type: {}. Must be either U_MIN, U_PROD, U_MEAN, or U_DEFAULT".format( + grid_type_dict + ) + ) self.grid_type = grid_type_dict[grid_type] self.swigobj = None @@ -630,14 +689,19 @@ def update_weights(self, x): Reset the `weights` to `x`. """ if x.size != self.num_params: - raise ValueError("weights of shape {} do not match user specified grid dimension: {}".format(self.weights.size,self.grid_size)) + raise ValueError( + f"weights of shape {self.weights.size} do not match user specified grid dimension: {self.grid_size}" + ) + self.weights[:] = self.check_weights(x).flatten().astype(np.float64) -class Susceptibility(object): + +class Susceptibility: """ Parent class for various dispersive susceptibility terms, parameterized by an anisotropic amplitude $\\sigma$. See [Material Dispersion](Materials.md#material-dispersion). """ + def __init__(self, sigma_diag=Vector3(), sigma_offdiag=Vector3(), sigma=None): """ + **`sigma` [`number`]** — The scale factor $\\sigma$. @@ -650,11 +714,13 @@ def __init__(self, sigma_diag=Vector3(), sigma_offdiag=Vector3(), sigma=None): \\begin{pmatrix} a & u & v \\\\ u & b & w \\\\ v & w & c \\end{pmatrix} """ - self.sigma_diag = Vector3(sigma, sigma, sigma) if sigma else Vector3(*sigma_diag) + self.sigma_diag = ( + Vector3(sigma, sigma, sigma) if sigma else Vector3(*sigma_diag) + ) self.sigma_offdiag = Vector3(*sigma_offdiag) def transform(self, m): - sigma = Matrix(diag=self.sigma_diag,offdiag=self.sigma_offdiag) + sigma = Matrix(diag=self.sigma_diag, offdiag=self.sigma_offdiag) new_sigma = (m * sigma * m.transpose()) / abs(m.determinant()) self.sigma_diag = mp.Vector3(new_sigma.c1.x, new_sigma.c2.y, new_sigma.c3.z) self.sigma_offdiag = mp.Vector3(new_sigma.c2.x, new_sigma.c3.x, new_sigma.c3.y) @@ -666,6 +732,7 @@ class LorentzianSusceptibility(Susceptibility): oscillator) form. See [Material Dispersion](Materials.md#material-dispersion), with the parameters (in addition to $\\sigma$): """ + def __init__(self, frequency=0.0, gamma=0.0, **kwargs): """ + **`frequency` [`number`]** — The resonance frequency $f_n = \\omega_n / 2\\pi$. @@ -676,16 +743,32 @@ def __init__(self, frequency=0.0, gamma=0.0, **kwargs): different `sigma` will appear as a *single* Lorentzian susceptibility term in the preliminary simulation info output. """ - super(LorentzianSusceptibility, self).__init__(**kwargs) + super().__init__(**kwargs) self.frequency = frequency self.gamma = gamma - def eval_susceptibility(self,freq): - sigma = np.expand_dims(Matrix(diag=self.sigma_diag,offdiag=self.sigma_offdiag),axis=0) + def eval_susceptibility(self, freq): + sigma = np.expand_dims( + Matrix(diag=self.sigma_diag, offdiag=self.sigma_offdiag), axis=0 + ) if self.gamma == 0: - return self.frequency*self.frequency / (self.frequency*self.frequency - freq*freq) * sigma + return ( + self.frequency + * self.frequency + / (self.frequency * self.frequency - freq * freq) + * sigma + ) else: - return self.frequency*self.frequency / (self.frequency*self.frequency - freq*freq - 1j*self.gamma*freq) * sigma + return ( + self.frequency + * self.frequency + / ( + self.frequency * self.frequency + - freq * freq + - 1j * self.gamma * freq + ) + * sigma + ) class DrudeSusceptibility(Susceptibility): @@ -693,6 +776,7 @@ class DrudeSusceptibility(Susceptibility): Specifies a single dispersive susceptibility of Drude form. See [Material Dispersion](Materials.md#material-dispersion), with the parameters (in addition to $\\sigma$): """ + def __init__(self, frequency=0.0, gamma=0.0, **kwargs): """ + **`frequency` [`number`]** — The frequency scale factor $f_n = \\omega_n / 2\\pi$ @@ -700,16 +784,23 @@ def __init__(self, frequency=0.0, gamma=0.0, **kwargs): + **`gamma` [`number`]** — The loss rate $\\gamma_n / 2\\pi$. """ - super(DrudeSusceptibility, self).__init__(**kwargs) + super().__init__(**kwargs) self.frequency = frequency self.gamma = gamma - def eval_susceptibility(self,freq): - sigma = np.expand_dims(Matrix(diag=self.sigma_diag,offdiag=self.sigma_offdiag),axis=0) + def eval_susceptibility(self, freq): + sigma = np.expand_dims( + Matrix(diag=self.sigma_diag, offdiag=self.sigma_offdiag), axis=0 + ) if self.gamma == 0: - return -self.frequency*self.frequency / (freq*(freq)) * sigma + return -self.frequency * self.frequency / (freq * (freq)) * sigma else: - return -self.frequency*self.frequency / (freq*(freq + 1j*self.gamma)) * sigma + return ( + -self.frequency + * self.frequency + / (freq * (freq + 1j * self.gamma)) + * sigma + ) class NoisyLorentzianSusceptibility(LorentzianSusceptibility): @@ -720,6 +811,7 @@ class NoisyLorentzianSusceptibility(LorentzianSusceptibility): `gamma` parameters, but with an additional Gaussian random noise term (uncorrelated in space and time, zero mean) added to the **P** damped-oscillator equation. """ + def __init__(self, noise_amp=0.0, **kwargs): """ + **`noise_amp` [`number`]** — The noise has root-mean square amplitude σ $\\times$ @@ -738,7 +830,7 @@ def __init__(self, noise_amp=0.0, **kwargs): [here](http://doi.org/10.1103/PhysRevB.92.134202) or [here](http://doi.org/10.1103/PhysRevB.88.054305). """ - super(NoisyLorentzianSusceptibility, self).__init__(**kwargs) + super().__init__(**kwargs) self.noise_amp = noise_amp @@ -750,6 +842,7 @@ class NoisyDrudeSusceptibility(DrudeSusceptibility): `gamma` parameters, but with an additional Gaussian random noise term (uncorrelated in space and time, zero mean) added to the **P** damped-oscillator equation. """ + def __init__(self, noise_amp=0.0, **kwargs): """ + **`noise_amp` [`number`]** — The noise has root-mean square amplitude σ $\\times$ @@ -768,7 +861,7 @@ def __init__(self, noise_amp=0.0, **kwargs): [here](http://doi.org/10.1103/PhysRevB.92.134202) or [here](http://doi.org/10.1103/PhysRevB.88.054305). """ - super(NoisyDrudeSusceptibility, self).__init__(**kwargs) + super().__init__(**kwargs) self.noise_amp = noise_amp @@ -780,13 +873,14 @@ class GyrotropicLorentzianSusceptibility(LorentzianSusceptibility): parameters are `sigma`, `frequency`, and `gamma`, which have the [usual meanings](#susceptibility), and an additional 3-vector `bias`: """ + def __init__(self, bias=Vector3(), **kwargs): """ + **`bias` [`Vector3`]** — The gyrotropy vector. Its direction determines the orientation of the gyrotropic response, and the magnitude is the precession frequency $|\\mathbf{b}_n|/2\\pi$. """ - super(GyrotropicLorentzianSusceptibility, self).__init__(**kwargs) + super().__init__(**kwargs) self.bias = bias @@ -798,13 +892,14 @@ class GyrotropicDrudeSusceptibility(DrudeSusceptibility): parameters are `sigma`, `frequency`, and `gamma`, which have the [usual meanings](#susceptibility), and an additional 3-vector `bias`: """ + def __init__(self, bias=Vector3(), **kwargs): """ + **`bias` [`Vector3`]** — The gyrotropy vector. Its direction determines the orientation of the gyrotropic response, and the magnitude is the precession frequency $|\\mathbf{b}_n|/2\\pi$. """ - super(GyrotropicDrudeSusceptibility, self).__init__(**kwargs) + super().__init__(**kwargs) self.bias = bias @@ -818,6 +913,7 @@ class GyrotropicSaturatedSusceptibility(Susceptibility): different from the Lorentzian and Drude case. It also takes a 3-vector `bias` parameter and an `alpha` parameter: """ + def __init__(self, bias=Vector3(), frequency=0.0, gamma=0.0, alpha=0.0, **kwargs): """ + **`sigma` [`number`]** — The coupling factor $\\sigma_n / 2\\pi$ between the @@ -842,7 +938,7 @@ def __init__(self, bias=Vector3(), frequency=0.0, gamma=0.0, alpha=0.0, **kwargs the magnitude is ignored; instead, the relevant precession frequencies are determined by the `sigma` and `frequency` parameters. """ - super(GyrotropicSaturatedSusceptibility, self).__init__(**kwargs) + super().__init__(**kwargs) self.frequency = frequency self.gamma = gamma self.bias = bias @@ -858,24 +954,26 @@ class MultilevelAtom(Susceptibility): atomic level. See [Materials/Saturable Gain and Absorption](Materials.md#saturable-gain-and-absorption). """ + def __init__(self, initial_populations=None, transitions=None, **kwargs): - super(MultilevelAtom, self).__init__(**kwargs) - self.initial_populations = initial_populations if initial_populations else [] - self.transitions = transitions if transitions else [] + super().__init__(**kwargs) + self.initial_populations = initial_populations or [] + self.transitions = transitions or [] -class Transition(object): - """ - """ +class Transition: + """ """ - def __init__(self, - from_level, - to_level, - transition_rate=0, - frequency=0, - sigma_diag=Vector3(1, 1, 1), - gamma=0, - pumping_rate=0): + def __init__( + self, + from_level, + to_level, + transition_rate=0, + frequency=0, + sigma_diag=Vector3(1, 1, 1), + gamma=0, + pumping_rate=0, + ): """ Construct a `Transition`. @@ -894,8 +992,8 @@ def __init__(self, + **`pumping_rate` [`number`]** — The pumping rate $f = \\omega / 2\\pi$. Default is 0. """ - self.from_level = check_nonnegative('from_level', from_level) - self.to_level = check_nonnegative('to_level', to_level) + self.from_level = check_nonnegative("from_level", from_level) + self.to_level = check_nonnegative("to_level", to_level) self.transition_rate = transition_rate self.frequency = frequency self.sigma_diag = sigma_diag @@ -903,7 +1001,7 @@ def __init__(self, self.pumping_rate = pumping_rate -class GeometricObject(object): +class GeometricObject: """ This class, and its descendants, are used to specify the solid geometric objects that form the dielectric structure being simulated. @@ -956,6 +1054,7 @@ class GeometricObject(object): geometry = [mp.Prism(vertices, height=1.5, center=mp.Vector3(), material=cSi)] ``` """ + def __init__(self, material=Medium(), center=Vector3(), epsilon_func=None): """ Construct a `GeometricObject`. @@ -1035,7 +1134,7 @@ class Sphere(GeometricObject): def __init__(self, radius, **kwargs): """Constructs a `Sphere`""" self.radius = float(radius) - super(Sphere, self).__init__(**kwargs) + super().__init__(**kwargs) @property def radius(self): @@ -1067,7 +1166,7 @@ def __init__(self, radius, axis=Vector3(0, 0, 1), height=1e20, **kwargs): self.axis = Vector3(*axis) self.radius = float(radius) self.height = float(height) - super(Cylinder, self).__init__(**kwargs) + super().__init__(**kwargs) @property def radius(self): @@ -1090,13 +1189,16 @@ class Wedge(Cylinder): """ Represents a cylindrical wedge. """ - def __init__(self, radius, wedge_angle=2 * math.pi, wedge_start=Vector3(1, 0, 0), **kwargs): + + def __init__( + self, radius, wedge_angle=2 * math.pi, wedge_start=Vector3(1, 0, 0), **kwargs + ): """ Constructs a `Wedge`. """ self.wedge_angle = wedge_angle self.wedge_start = Vector3(*wedge_start) - super(Wedge, self).__init__(radius, **kwargs) + super().__init__(radius, **kwargs) class Cone(Cylinder): @@ -1107,6 +1209,7 @@ class Cone(Cylinder): the radius of the tip is given by the new property, `radius2`. The `center` of a cone is halfway between the two circular ends. """ + def __init__(self, radius, radius2=0, **kwargs): """ Construct a `Cone`. @@ -1116,14 +1219,22 @@ def __init__(self, radius, radius2=0, **kwargs): Radius of the tip of the cone (i.e. the end of the cone pointed to by the `axis` vector). Defaults to zero (a "sharp" cone). """ self.radius2 = radius2 - super(Cone, self).__init__(radius, **kwargs) + super().__init__(radius, **kwargs) class Block(GeometricObject): """ A parallelepiped (i.e., a brick, possibly with non-orthogonal axes). """ - def __init__(self, size, e1=Vector3(1, 0, 0), e2=Vector3(0, 1, 0), e3=Vector3(0, 0, 1), **kwargs): + + def __init__( + self, + size, + e1=Vector3(1, 0, 0), + e2=Vector3(0, 1, 0), + e3=Vector3(0, 0, 1), + **kwargs, + ): """ Construct a `Block`. @@ -1140,7 +1251,7 @@ def __init__(self, size, e1=Vector3(1, 0, 0), e2=Vector3(0, 1, 0), e3=Vector3(0, self.e1 = Vector3(*e1) self.e2 = Vector3(*e2) self.e3 = Vector3(*e3) - super(Block, self).__init__(**kwargs) + super().__init__(**kwargs) class Ellipsoid(Block): @@ -1148,18 +1259,28 @@ class Ellipsoid(Block): An ellipsoid. This is actually a subclass of `Block`, and inherits all the same properties, but defines an ellipsoid inscribed inside the block. """ + def __init__(self, **kwargs): """ Construct an `Ellipsoid`. """ - super(Ellipsoid, self).__init__(**kwargs) + super().__init__(**kwargs) class Prism(GeometricObject): """ Polygonal prism type. """ - def __init__(self, vertices, height, axis=Vector3(z=1), center=None, sidewall_angle=0, **kwargs): + + def __init__( + self, + vertices, + height, + axis=Vector3(z=1), + center=None, + sidewall_angle=0, + **kwargs, + ): """ Construct a `Prism`. @@ -1186,8 +1307,12 @@ def __init__(self, vertices, height, axis=Vector3(z=1), center=None, sidewall_an radians. Default is 0. """ - centroid = sum(vertices, Vector3(0)) * (1.0 / len(vertices)) # centroid of floor polygon - original_center = centroid + (0.5*height)*axis # center as computed from vertices, height, axis + centroid = sum(vertices, Vector3(0)) * ( + 1.0 / len(vertices) + ) # centroid of floor polygon + original_center = ( + centroid + (0.5 * height) * axis + ) # center as computed from vertices, height, axis if center is not None and len(vertices): center = Vector3(*center) # translate vertices to center prism at requested center @@ -1200,10 +1325,10 @@ def __init__(self, vertices, height, axis=Vector3(z=1), center=None, sidewall_an self.axis = axis self.sidewall_angle = sidewall_angle - super(Prism, self).__init__(center=center, **kwargs) + super().__init__(center=center, **kwargs) -class Matrix(object): +class Matrix: """ The `Matrix` class represents a 3x3 matrix with c1, c2, and c3 as its columns. @@ -1240,7 +1365,15 @@ class Matrix(object): Scales the matrix `m` by the number `s`. """ - def __init__(self, c1=Vector3(), c2=Vector3(), c3=Vector3(), diag=Vector3(), offdiag=Vector3()): + + def __init__( + self, + c1=Vector3(), + c2=Vector3(), + c3=Vector3(), + diag=Vector3(), + offdiag=Vector3(), + ): """ Constructs a `Matrix`. """ @@ -1263,13 +1396,13 @@ def __mul__(self, m): elif isinstance(m, Number): return self.scale(m) else: - raise TypeError("No operation known for 'Matrix * {}'".format(type(m))) + raise TypeError(f"No operation known for 'Matrix * {type(m)}'") def __rmul__(self, left_arg): if isinstance(left_arg, Number): return self.scale(left_arg) else: - raise TypeError("No operation known for 'Matrix * {}'".format(type(left_arg))) + raise TypeError(f"No operation known for 'Matrix * {type(left_arg)}'") def __truediv__(self, scalar): return Matrix(self.c1 / scalar, self.c2 / scalar, self.c3 / scalar) @@ -1284,28 +1417,26 @@ def __repr__(self): r0 = self.row(0) r1 = self.row(1) r2 = self.row(2) - return "<<{} {} {}>\n <{} {} {}>\n <{} {} {}>>".format(r0[0], r0[1], r0[2], - r1[0], r1[1], r1[2], - r2[0], r2[1], r2[2]) + return f"<<{r0[0]} {r0[1]} {r0[2]}>\n <{r1[0]} {r1[1]} {r1[2]}>\n <{r2[0]} {r2[1]} {r2[2]}>>" def __array__(self): - return np.array([self.row(0).__array__(), - self.row(1).__array__(), - self.row(2).__array__()]) + return np.array( + [self.row(0).__array__(), self.row(1).__array__(), self.row(2).__array__()] + ) def row(self, i): return Vector3(self.c1[i], self.c2[i], self.c3[i]) def mm_mult(self, m): - c1 = Vector3(self.row(0).dot(m.c1), - self.row(1).dot(m.c1), - self.row(2).dot(m.c1)) - c2 = Vector3(self.row(0).dot(m.c2), - self.row(1).dot(m.c2), - self.row(2).dot(m.c2)) - c3 = Vector3(self.row(0).dot(m.c3), - self.row(1).dot(m.c3), - self.row(2).dot(m.c3)) + c1 = Vector3( + self.row(0).dot(m.c1), self.row(1).dot(m.c1), self.row(2).dot(m.c1) + ) + c2 = Vector3( + self.row(0).dot(m.c2), self.row(1).dot(m.c2), self.row(2).dot(m.c2) + ) + c3 = Vector3( + self.row(0).dot(m.c3), self.row(1).dot(m.c3), self.row(2).dot(m.c3) + ) return Matrix(c1, c2, c3) @@ -1316,16 +1447,20 @@ def scale(self, s): return Matrix(self.c1.scale(s), self.c2.scale(s), self.c3.scale(s)) def determinant(self): - sum1 = sum([ - functools.reduce(operator.mul, [self[x][x] for x in range(3)]), - functools.reduce(operator.mul, [self[0][1], self[1][2], self[2][0]]), - functools.reduce(operator.mul, [self[1][0], self[2][1], self[0][2]]) - ]) - sum2 = sum([ - functools.reduce(operator.mul, [self[0][2], self[1][1], self[2][0]]), - functools.reduce(operator.mul, [self[0][1], self[1][0], self[2][2]]), - functools.reduce(operator.mul, [self[1][2], self[2][1], self[0][0]]) - ]) + sum1 = sum( + [ + functools.reduce(operator.mul, [self[x][x] for x in range(3)]), + functools.reduce(operator.mul, [self[0][1], self[1][2], self[2][0]]), + functools.reduce(operator.mul, [self[1][0], self[2][1], self[0][2]]), + ] + ) + sum2 = sum( + [ + functools.reduce(operator.mul, [self[0][2], self[1][1], self[2][0]]), + functools.reduce(operator.mul, [self[0][1], self[1][0], self[2][2]]), + functools.reduce(operator.mul, [self[1][2], self[2][1], self[0][0]]), + ] + ) return sum1 - sum2 def conj(self): @@ -1360,14 +1495,15 @@ def inverse(self): H = property(getH, None) -class Lattice(object): - - def __init__(self, - size=Vector3(1, 1, 1), - basis_size=Vector3(1, 1, 1), - basis1=Vector3(1, 0, 0), - basis2=Vector3(0, 1, 0), - basis3=Vector3(0, 0, 1)): +class Lattice: + def __init__( + self, + size=Vector3(1, 1, 1), + basis_size=Vector3(1, 1, 1), + basis1=Vector3(1, 0, 0), + basis2=Vector3(0, 1, 0), + basis3=Vector3(0, 0, 1), + ): self.size = Vector3(*size) self.basis_size = Vector3(*basis_size) @@ -1446,10 +1582,7 @@ def reciprocal_to_cartesian(x, lat): m = Matrix(Vector3(s.x), Vector3(y=s.y), Vector3(z=s.z)) Rst = (lat.basis * m).transpose() - if isinstance(x, Vector3): - return Rst.inverse() * x - else: - return (Rst.inverse() * x) * Rst + return Rst.inverse() * x if isinstance(x, Vector3) else (Rst.inverse() * x) * Rst def cartesian_to_reciprocal(x, lat): @@ -1458,10 +1591,7 @@ def cartesian_to_reciprocal(x, lat): m = Matrix(Vector3(s.x), Vector3(y=s.y), Vector3(z=s.z)) Rst = (lat.basis * m).transpose() - if isinstance(x, Vector3): - return Rst * x - else: - return (Rst * x) * Rst.inverse() + return Rst * x if isinstance(x, Vector3) else (Rst * x) * Rst.inverse() def lattice_to_reciprocal(x, lat): @@ -1475,12 +1605,12 @@ def reciprocal_to_lattice(x, lat): def geometric_object_duplicates(shift_vector, min_multiple, max_multiple, go): shift_vector = Vector3(*shift_vector) + def _dup(min_multiple, lst): - if min_multiple <= max_multiple: - shifted = go.shift(shift_vector.scale(min_multiple)) - return _dup(min_multiple + 1, [shifted] + lst) - else: + if min_multiple > max_multiple: return lst + shifted = go.shift(shift_vector.scale(min_multiple)) + return _dup(min_multiple + 1, [shifted] + lst) return _dup(min_multiple, []) @@ -1489,12 +1619,13 @@ def geometric_objects_duplicates(shift_vector, min_multiple, max_multiple, go_li dups = [] shift_vector = Vector3(*shift_vector) for go in go_list: - dups += geometric_object_duplicates(shift_vector, min_multiple, max_multiple, go) + dups += geometric_object_duplicates( + shift_vector, min_multiple, max_multiple, go + ) return dups def geometric_objects_lattice_duplicates(lat, go_list, *usize): - def lat_to_lattice(v): return cartesian_to_lattice(lat.basis * v, lat) @@ -1538,6 +1669,7 @@ def _mem(y=None): fy = f(y) f_memo_tab[y] = fy return fy + return _mem @@ -1550,9 +1682,7 @@ def find_root_deriv(f, tol, x_min, x_max, x_guess=None): f_memo = memoize(f) def lazy(x): - if isinstance(x, numbers.Number): - return x - return x() + return x if isinstance(x, numbers.Number) else x() def pick_bound(which): def _pb(): @@ -1567,6 +1697,7 @@ def _pb(): return x_max else: raise ValueError("failed to bracket the root in find_root_deriv") + return _pb def in_bounds(x, f, df, a, b): @@ -1586,7 +1717,11 @@ def newton(x, a, b, dx): a_prime = x if f < 0 else a b_prime = x if f > 0 else b - if dx != x_max - x_min and dx * (f / df) < 0 and f_memo(lazy(a_prime))[0] * f_memo(lazy(b_prime))[0] > 0: + if ( + dx != x_max - x_min + and dx * (f / df) < 0 + and f_memo(lazy(a_prime))[0] * f_memo(lazy(b_prime))[0] > 0 + ): raise ValueError("failed to bracket the root in find_root_deriv") if isinstance(a, numbers.Number) and isinstance(b, numbers.Number): @@ -1608,8 +1743,12 @@ def newton(x, a, b, dx): if x_guess is None: x_guess = (x_min + x_max) * 0.5 - return newton(x_guess, pick_bound(lambda aa: aa < 0), - pick_bound(lambda aa: aa > 0), x_max - x_min) + return newton( + x_guess, + pick_bound(lambda aa: aa < 0), + pick_bound(lambda aa: aa > 0), + x_max - x_min, + ) def get_rotation_matrix(axis, theta): @@ -1622,6 +1761,8 @@ def get_rotation_matrix(axis, theta): + `theta` [`number`] — The rotation angle (in radians). """ - return Matrix(Vector3(x=1).rotate(axis, theta), - Vector3(y=1).rotate(axis, theta), - Vector3(z=1).rotate(axis, theta)) + return Matrix( + Vector3(x=1).rotate(axis, theta), + Vector3(y=1).rotate(axis, theta), + Vector3(z=1).rotate(axis, theta), + ) diff --git a/python/materials.py b/python/materials.py index 6da4e66e0..604571494 100644 --- a/python/materials.py +++ b/python/materials.py @@ -1,951 +1,1116 @@ -# -*- coding: utf-8 -*- # Materials Library +import numpy as np import meep as mp -import numpy as np # default unit length is 1 μm um_scale = 1.0 # conversion factor for eV to 1/μm [=1/hc] -eV_um_scale = um_scale/1.23984193 +eV_um_scale = um_scale / 1.23984193 -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # crystalline silicon (c-Si) from A. Deinega et al., J. Optical Society of America A, Vol. 28, No. 5, pp. 770-77 (2011) # based on experimental data for intrinsic silicon at T=300K from M.A. Green and M. Keevers, Progress in Photovoltaics, Vol. 3, pp. 189-92 (1995) # wavelength range: 0.4 - 1.0 μm -cSi_range = mp.FreqRange(min=um_scale, max=um_scale/0.4) +cSi_range = mp.FreqRange(min=um_scale, max=um_scale / 0.4) -cSi_frq1 = 3.64/um_scale +cSi_frq1 = 3.64 / um_scale cSi_gam1 = 0 cSi_sig1 = 8 -cSi_frq2 = 2.76/um_scale -cSi_gam2 = 2*0.063/um_scale +cSi_frq2 = 2.76 / um_scale +cSi_gam2 = 2 * 0.063 / um_scale cSi_sig2 = 2.85 -cSi_frq3 = 1.73/um_scale -cSi_gam3 = 2*2.5/um_scale +cSi_frq3 = 1.73 / um_scale +cSi_gam3 = 2 * 2.5 / um_scale cSi_sig3 = -0.107 -cSi_susc = [mp.LorentzianSusceptibility(frequency=cSi_frq1, gamma=cSi_gam1, sigma=cSi_sig1), - mp.LorentzianSusceptibility(frequency=cSi_frq2, gamma=cSi_gam2, sigma=cSi_sig2), - mp.LorentzianSusceptibility(frequency=cSi_frq3, gamma=cSi_gam3, sigma=cSi_sig3)] +cSi_susc = [ + mp.LorentzianSusceptibility(frequency=cSi_frq1, gamma=cSi_gam1, sigma=cSi_sig1), + mp.LorentzianSusceptibility(frequency=cSi_frq2, gamma=cSi_gam2, sigma=cSi_sig2), + mp.LorentzianSusceptibility(frequency=cSi_frq3, gamma=cSi_gam3, sigma=cSi_sig3), +] cSi = mp.Medium(epsilon=1.0, E_susceptibilities=cSi_susc, valid_freq_range=cSi_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # amorphous silicon (a-Si) from Horiba Technical Note 08: Lorentz Dispersion Model # ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Lorentz_Dispersion_Model.pdf # wavelength range: 0.21 - 0.83 μm -aSi_range = mp.FreqRange(min=um_scale/0.83, max=um_scale/0.21) +aSi_range = mp.FreqRange(min=um_scale / 0.83, max=um_scale / 0.21) -aSi_frq1 = 1/(0.315481407124682*um_scale) -aSi_gam1 = 1/(0.645751005208333*um_scale) +aSi_frq1 = 1 / (0.315481407124682 * um_scale) +aSi_gam1 = 1 / (0.645751005208333 * um_scale) aSi_sig1 = 14.571 -aSi_susc = [mp.LorentzianSusceptibility(frequency=aSi_frq1, gamma=aSi_gam1, sigma=aSi_sig1)] +aSi_susc = [ + mp.LorentzianSusceptibility(frequency=aSi_frq1, gamma=aSi_gam1, sigma=aSi_sig1) +] aSi = mp.Medium(epsilon=3.109, E_susceptibilities=aSi_susc, valid_freq_range=aSi_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # hydrogenated amorphous silicon (a-Si:H) from Horiba Technical Note 08: Lorentz Dispersion Model # ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Lorentz_Dispersion_Model.pdf # wavelength range: 0.21 - 0.83 μm -aSi_H_range = mp.FreqRange(min=um_scale/0.83, max=um_scale/0.21) +aSi_H_range = mp.FreqRange(min=um_scale / 0.83, max=um_scale / 0.21) -aSi_H_frq1 = 1/(0.334189199460916*um_scale) -aSi_H_gam1 = 1/(0.579365387850467*um_scale) +aSi_H_frq1 = 1 / (0.334189199460916 * um_scale) +aSi_H_gam1 = 1 / (0.579365387850467 * um_scale) aSi_H_sig1 = 12.31 -aSi_H_susc = [mp.LorentzianSusceptibility(frequency=aSi_H_frq1, gamma=aSi_H_gam1, sigma=aSi_H_sig1)] +aSi_H_susc = [ + mp.LorentzianSusceptibility( + frequency=aSi_H_frq1, gamma=aSi_H_gam1, sigma=aSi_H_sig1 + ) +] -aSi_H = mp.Medium(epsilon=3.22, E_susceptibilities=aSi_H_susc, valid_freq_range=aSi_H_range) +aSi_H = mp.Medium( + epsilon=3.22, E_susceptibilities=aSi_H_susc, valid_freq_range=aSi_H_range +) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # indium tin oxide (ITO) from Horiba Technical Note 08: Lorentz Dispersion Model # ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Lorentz_Dispersion_Model.pdf # wavelength range: 0.21 - 0.83 μm -ITO_range = mp.FreqRange(min=um_scale/0.83, max=um_scale/0.21) +ITO_range = mp.FreqRange(min=um_scale / 0.83, max=um_scale / 0.21) -ITO_frq1 = 1/(0.182329695588235*um_scale) -ITO_gam1 = 1/(1.94637665620094*um_scale) +ITO_frq1 = 1 / (0.182329695588235 * um_scale) +ITO_gam1 = 1 / (1.94637665620094 * um_scale) ITO_sig1 = 2.5 -ITO_susc = [mp.LorentzianSusceptibility(frequency=ITO_frq1, gamma=ITO_gam1, sigma=ITO_sig1)] +ITO_susc = [ + mp.LorentzianSusceptibility(frequency=ITO_frq1, gamma=ITO_gam1, sigma=ITO_sig1) +] ITO = mp.Medium(epsilon=1.0, E_susceptibilities=ITO_susc, valid_freq_range=ITO_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # alumina (Al2O3) from Horiba Technical Note 08: Lorentz Dispersion Model # ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Lorentz_Dispersion_Model.pdf # wavelength range: 0.21 - 2.07 μm -Al2O3_range = mp.FreqRange(min=um_scale/2.07, max=um_scale/0.21) +Al2O3_range = mp.FreqRange(min=um_scale / 2.07, max=um_scale / 0.21) -Al2O3_frq1 = 1/(0.101476668030774*um_scale) +Al2O3_frq1 = 1 / (0.101476668030774 * um_scale) Al2O3_gam1 = 0 Al2O3_sig1 = 1.52 -Al2O3_susc = [mp.LorentzianSusceptibility(frequency=Al2O3_frq1, gamma=Al2O3_gam1, sigma=Al2O3_sig1)] +Al2O3_susc = [ + mp.LorentzianSusceptibility( + frequency=Al2O3_frq1, gamma=Al2O3_gam1, sigma=Al2O3_sig1 + ) +] -Al2O3 = mp.Medium(epsilon=1.0, E_susceptibilities=Al2O3_susc, valid_freq_range=Al2O3_range) +Al2O3 = mp.Medium( + epsilon=1.0, E_susceptibilities=Al2O3_susc, valid_freq_range=Al2O3_range +) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # aluminum nitride (AlN) from Horiba Technical Note 08: Lorentz Dispersion Model # ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Lorentz_Dispersion_Model.pdf # wavelength range: 0.26 - 1.65 μm -AlN_range = mp.FreqRange(min=um_scale/1.65, max=um_scale/0.26) +AlN_range = mp.FreqRange(min=um_scale / 1.65, max=um_scale / 0.26) -AlN_frq1 = 1/(0.139058089950651*um_scale) +AlN_frq1 = 1 / (0.139058089950651 * um_scale) AlN_gam1 = 0 AlN_sig1 = 3.306 -AlN_susc = [mp.LorentzianSusceptibility(frequency=AlN_frq1, gamma=AlN_gam1, sigma=AlN_sig1)] +AlN_susc = [ + mp.LorentzianSusceptibility(frequency=AlN_frq1, gamma=AlN_gam1, sigma=AlN_sig1) +] AlN = mp.Medium(epsilon=1.0, E_susceptibilities=AlN_susc, valid_freq_range=AlN_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # aluminum arsenide (AlAs) from R.E. Fern and A. Onton, J. Applied Physics, Vol. 42, pp. 3499-500 (1971) # ref: https://refractiveindex.info/?shelf=main&book=AlAs&page=Fern # wavelength range: 0.56 - 2.2 μm -AlAs_range = mp.FreqRange(min=um_scale/2.2, max=um_scale/0.56) +AlAs_range = mp.FreqRange(min=um_scale / 2.2, max=um_scale / 0.56) -AlAs_frq1 = 1/(0.2822*um_scale) +AlAs_frq1 = 1 / (0.2822 * um_scale) AlAs_gam1 = 0 AlAs_sig1 = 6.0840 -AlAs_frq2 = 1/(27.62*um_scale) +AlAs_frq2 = 1 / (27.62 * um_scale) AlAs_gam2 = 0 AlAs_sig2 = 1.900 -AlAs_susc = [mp.LorentzianSusceptibility(frequency=AlAs_frq1, gamma=AlAs_gam1, sigma=AlAs_sig1), - mp.LorentzianSusceptibility(frequency=AlAs_frq2, gamma=AlAs_gam2, sigma=AlAs_sig2)] +AlAs_susc = [ + mp.LorentzianSusceptibility(frequency=AlAs_frq1, gamma=AlAs_gam1, sigma=AlAs_sig1), + mp.LorentzianSusceptibility(frequency=AlAs_frq2, gamma=AlAs_gam2, sigma=AlAs_sig2), +] -AlAs = mp.Medium(epsilon=2.0792, E_susceptibilities=AlAs_susc, valid_freq_range=AlAs_range) +AlAs = mp.Medium( + epsilon=2.0792, E_susceptibilities=AlAs_susc, valid_freq_range=AlAs_range +) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # borosilicate glass (BK7) from SCHOTT Zemax catalog 2017-01-20b # ref: https://refractiveindex.info/?shelf=glass&book=BK7&page=SCHOTT # wavelength range: 0.3 - 2.5 μm -BK7_range = mp.FreqRange(min=um_scale/2.5, max=um_scale/0.3) +BK7_range = mp.FreqRange(min=um_scale / 2.5, max=um_scale / 0.3) -BK7_frq1 = 1/(0.07746417668832478*um_scale) +BK7_frq1 = 1 / (0.07746417668832478 * um_scale) BK7_gam1 = 0 BK7_sig1 = 1.03961212 -BK7_frq2 = 1/(0.14148467902921502*um_scale) +BK7_frq2 = 1 / (0.14148467902921502 * um_scale) BK7_gam2 = 0 BK7_sig2 = 0.231792344 -BK7_frq3 = 1/(10.176475470417055*um_scale) +BK7_frq3 = 1 / (10.176475470417055 * um_scale) BK7_gam3 = 0 BK7_sig3 = 1.01046945 -BK7_susc = [mp.LorentzianSusceptibility(frequency=BK7_frq1, gamma=BK7_gam1, sigma=BK7_sig1), - mp.LorentzianSusceptibility(frequency=BK7_frq2, gamma=BK7_gam2, sigma=BK7_sig2), - mp.LorentzianSusceptibility(frequency=BK7_frq3, gamma=BK7_gam3, sigma=BK7_sig3)] +BK7_susc = [ + mp.LorentzianSusceptibility(frequency=BK7_frq1, gamma=BK7_gam1, sigma=BK7_sig1), + mp.LorentzianSusceptibility(frequency=BK7_frq2, gamma=BK7_gam2, sigma=BK7_sig2), + mp.LorentzianSusceptibility(frequency=BK7_frq3, gamma=BK7_gam3, sigma=BK7_sig3), +] BK7 = mp.Medium(epsilon=1.0, E_susceptibilities=BK7_susc, valid_freq_range=BK7_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # fused quartz (silica) from I.H. Malitson, J. Optical Society of America, Vol. 55, pp. 1205-9 (1965) # ref: https://refractiveindex.info/?shelf=glass&book=fused_silica&page=Malitson # wavelength range: 0.21 - 6.7 μm -fused_quartz_range = mp.FreqRange(min=um_scale/6.7, max=um_scale/0.21) +fused_quartz_range = mp.FreqRange(min=um_scale / 6.7, max=um_scale / 0.21) -fused_quartz_frq1 = 1/(0.0684043*um_scale) +fused_quartz_frq1 = 1 / (0.0684043 * um_scale) fused_quartz_gam1 = 0 fused_quartz_sig1 = 0.696166300 -fused_quartz_frq2 = 1/(0.1162414*um_scale) +fused_quartz_frq2 = 1 / (0.1162414 * um_scale) fused_quartz_gam2 = 0 fused_quartz_sig2 = 0.407942600 -fused_quartz_frq3 = 1/(9.896161*um_scale) +fused_quartz_frq3 = 1 / (9.896161 * um_scale) fused_quartz_gam3 = 0 fused_quartz_sig3 = 0.897479400 -fused_quartz_susc = [mp.LorentzianSusceptibility(frequency=fused_quartz_frq1, gamma=fused_quartz_gam1, sigma=fused_quartz_sig1), - mp.LorentzianSusceptibility(frequency=fused_quartz_frq2, gamma=fused_quartz_gam2, sigma=fused_quartz_sig2), - mp.LorentzianSusceptibility(frequency=fused_quartz_frq3, gamma=fused_quartz_gam3, sigma=fused_quartz_sig3)] - -fused_quartz = mp.Medium(epsilon=1.0, E_susceptibilities=fused_quartz_susc, valid_freq_range=fused_quartz_range) - -#------------------------------------------------------------------ +fused_quartz_susc = [ + mp.LorentzianSusceptibility( + frequency=fused_quartz_frq1, gamma=fused_quartz_gam1, sigma=fused_quartz_sig1 + ), + mp.LorentzianSusceptibility( + frequency=fused_quartz_frq2, gamma=fused_quartz_gam2, sigma=fused_quartz_sig2 + ), + mp.LorentzianSusceptibility( + frequency=fused_quartz_frq3, gamma=fused_quartz_gam3, sigma=fused_quartz_sig3 + ), +] + +fused_quartz = mp.Medium( + epsilon=1.0, + E_susceptibilities=fused_quartz_susc, + valid_freq_range=fused_quartz_range, +) + +# ------------------------------------------------------------------ # gallium arsenide (GaAs) from T. Skauli et al., J. Applied Physics, Vol. 94, pp. 6447-55 (2003) # ref: https://refractiveindex.info/?shelf=main&book=GaAs&page=Skauli # wavelength range: 0.97 - 17 μm -GaAs_range = mp.FreqRange(min=um_scale/17, max=um_scale/0.97) +GaAs_range = mp.FreqRange(min=um_scale / 17, max=um_scale / 0.97) -GaAs_frq1 = 1/(0.4431307*um_scale) +GaAs_frq1 = 1 / (0.4431307 * um_scale) GaAs_gam1 = 0 GaAs_sig1 = 5.466742 -GaAs_frq2 = 1/(0.8746453*um_scale) +GaAs_frq2 = 1 / (0.8746453 * um_scale) GaAs_gam2 = 0 GaAs_sig2 = 0.02429960 -GaAs_frq3 = 1/(36.9166*um_scale) +GaAs_frq3 = 1 / (36.9166 * um_scale) GaAs_gam3 = 0 GaAs_sig3 = 1.957522 -GaAs_susc = [mp.LorentzianSusceptibility(frequency=GaAs_frq1, gamma=GaAs_gam1, sigma=GaAs_sig1), - mp.LorentzianSusceptibility(frequency=GaAs_frq2, gamma=GaAs_gam2, sigma=GaAs_sig2), - mp.LorentzianSusceptibility(frequency=GaAs_frq3, gamma=GaAs_gam3, sigma=GaAs_sig3)] +GaAs_susc = [ + mp.LorentzianSusceptibility(frequency=GaAs_frq1, gamma=GaAs_gam1, sigma=GaAs_sig1), + mp.LorentzianSusceptibility(frequency=GaAs_frq2, gamma=GaAs_gam2, sigma=GaAs_sig2), + mp.LorentzianSusceptibility(frequency=GaAs_frq3, gamma=GaAs_gam3, sigma=GaAs_sig3), +] -GaAs = mp.Medium(epsilon=5.372514, E_susceptibilities=GaAs_susc, valid_freq_range=GaAs_range) +GaAs = mp.Medium( + epsilon=5.372514, E_susceptibilities=GaAs_susc, valid_freq_range=GaAs_range +) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # silicon nitride (Si3N4) from H. R. Philipp, J. Electrochemical Society 120, 295-300 (1973) # ref: https://refractiveindex.info/?shelf=main&book=Si3N4&page=Philipp # wavelength range: 0.207 - 1.24 μm -Si3N4_VISNIR_range = mp.FreqRange(min=um_scale/1.24, max=um_scale/0.207) +Si3N4_VISNIR_range = mp.FreqRange(min=um_scale / 1.24, max=um_scale / 0.207) -Si3N4_VISNIR_frq1 = 1/(0.13967*um_scale) +Si3N4_VISNIR_frq1 = 1 / (0.13967 * um_scale) Si3N4_VISNIR_gam1 = 0 Si3N4_VISNIR_sig1 = 2.8939 -Si3N4_VISNIR_susc = [mp.LorentzianSusceptibility(frequency=Si3N4_VISNIR_frq1, gamma=Si3N4_VISNIR_gam1, sigma=Si3N4_VISNIR_sig1)] +Si3N4_VISNIR_susc = [ + mp.LorentzianSusceptibility( + frequency=Si3N4_VISNIR_frq1, gamma=Si3N4_VISNIR_gam1, sigma=Si3N4_VISNIR_sig1 + ) +] -Si3N4_VISNIR = mp.Medium(epsilon=1.0, E_susceptibilities=Si3N4_VISNIR_susc, valid_freq_range=Si3N4_VISNIR_range) +Si3N4_VISNIR = mp.Medium( + epsilon=1.0, + E_susceptibilities=Si3N4_VISNIR_susc, + valid_freq_range=Si3N4_VISNIR_range, +) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # silicon nitride (Si3N4) from K. Luke, et. al., Optics Letters, Vol. 40, pp. 4823-26 (2015) # ref: https://refractiveindex.info/?shelf=main&book=Si3N4&page=Luke # wavelength range: 0.310 - 5.504 μm -Si3N4_NIR_range = mp.FreqRange(min=um_scale/5.504, max=um_scale/0.310) +Si3N4_NIR_range = mp.FreqRange(min=um_scale / 5.504, max=um_scale / 0.310) -Si3N4_NIR_frq1 = 1/(0.1353406*um_scale) +Si3N4_NIR_frq1 = 1 / (0.1353406 * um_scale) Si3N4_NIR_gam1 = 0 Si3N4_NIR_sig1 = 3.0249 -Si3N4_NIR_frq2 = 1/(1239.842*um_scale) +Si3N4_NIR_frq2 = 1 / (1239.842 * um_scale) Si3N4_NIR_gam2 = 0 Si3N4_NIR_sig2 = 40314 -Si3N4_NIR_susc = [mp.LorentzianSusceptibility(frequency=Si3N4_NIR_frq1, gamma=Si3N4_NIR_gam1, sigma=Si3N4_NIR_sig1), - mp.LorentzianSusceptibility(frequency=Si3N4_NIR_frq2, gamma=Si3N4_NIR_gam2, sigma=Si3N4_NIR_sig2)] +Si3N4_NIR_susc = [ + mp.LorentzianSusceptibility( + frequency=Si3N4_NIR_frq1, gamma=Si3N4_NIR_gam1, sigma=Si3N4_NIR_sig1 + ), + mp.LorentzianSusceptibility( + frequency=Si3N4_NIR_frq2, gamma=Si3N4_NIR_gam2, sigma=Si3N4_NIR_sig2 + ), +] -Si3N4_NIR = mp.Medium(epsilon=1.0, E_susceptibilities=Si3N4_NIR_susc, valid_freq_range=Si3N4_NIR_range) +Si3N4_NIR = mp.Medium( + epsilon=1.0, E_susceptibilities=Si3N4_NIR_susc, valid_freq_range=Si3N4_NIR_range +) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # elemental metals from A.D. Rakic et al., Applied Optics, Vol. 37, No. 22, pp. 5271-83 (1998) # wavelength range: 0.2 - 12.4 μm -metal_range = mp.FreqRange(min=um_scale/12.398, max=um_scale/.24797) +metal_range = mp.FreqRange(min=um_scale / 12.398, max=um_scale / 0.24797) # silver (Ag) -Ag_plasma_frq = 9.01*eV_um_scale +Ag_plasma_frq = 9.01 * eV_um_scale Ag_f0 = 0.845 Ag_frq0 = 1e-10 -Ag_gam0 = 0.048*eV_um_scale -Ag_sig0 = Ag_f0*Ag_plasma_frq**2/Ag_frq0**2 +Ag_gam0 = 0.048 * eV_um_scale +Ag_sig0 = Ag_f0 * Ag_plasma_frq**2 / Ag_frq0**2 Ag_f1 = 0.065 -Ag_frq1 = 0.816*eV_um_scale # 1.519 μm -Ag_gam1 = 3.886*eV_um_scale -Ag_sig1 = Ag_f1*Ag_plasma_frq**2/Ag_frq1**2 +Ag_frq1 = 0.816 * eV_um_scale # 1.519 μm +Ag_gam1 = 3.886 * eV_um_scale +Ag_sig1 = Ag_f1 * Ag_plasma_frq**2 / Ag_frq1**2 Ag_f2 = 0.124 -Ag_frq2 = 4.481*eV_um_scale # 0.273 μm -Ag_gam2 = 0.452*eV_um_scale -Ag_sig2 = Ag_f2*Ag_plasma_frq**2/Ag_frq2**2 +Ag_frq2 = 4.481 * eV_um_scale # 0.273 μm +Ag_gam2 = 0.452 * eV_um_scale +Ag_sig2 = Ag_f2 * Ag_plasma_frq**2 / Ag_frq2**2 Ag_f3 = 0.011 -Ag_frq3 = 8.185*eV_um_scale # 0.152 μm -Ag_gam3 = 0.065*eV_um_scale -Ag_sig3 = Ag_f3*Ag_plasma_frq**2/Ag_frq3**2 +Ag_frq3 = 8.185 * eV_um_scale # 0.152 μm +Ag_gam3 = 0.065 * eV_um_scale +Ag_sig3 = Ag_f3 * Ag_plasma_frq**2 / Ag_frq3**2 Ag_f4 = 0.840 -Ag_frq4 = 9.083*eV_um_scale # 0.137 μm -Ag_gam4 = 0.916*eV_um_scale -Ag_sig4 = Ag_f4*Ag_plasma_frq**2/Ag_frq4**2 +Ag_frq4 = 9.083 * eV_um_scale # 0.137 μm +Ag_gam4 = 0.916 * eV_um_scale +Ag_sig4 = Ag_f4 * Ag_plasma_frq**2 / Ag_frq4**2 Ag_f5 = 5.646 -Ag_frq5 = 20.29*eV_um_scale # 0.061 μm -Ag_gam5 = 2.419*eV_um_scale -Ag_sig5 = Ag_f5*Ag_plasma_frq**2/Ag_frq5**2 - -Ag_susc = [mp.DrudeSusceptibility(frequency=Ag_frq0, gamma=Ag_gam0, sigma=Ag_sig0), - mp.LorentzianSusceptibility(frequency=Ag_frq1, gamma=Ag_gam1, sigma=Ag_sig1), - mp.LorentzianSusceptibility(frequency=Ag_frq2, gamma=Ag_gam2, sigma=Ag_sig2), - mp.LorentzianSusceptibility(frequency=Ag_frq3, gamma=Ag_gam3, sigma=Ag_sig3), - mp.LorentzianSusceptibility(frequency=Ag_frq4, gamma=Ag_gam4, sigma=Ag_sig4), - mp.LorentzianSusceptibility(frequency=Ag_frq5, gamma=Ag_gam5, sigma=Ag_sig5)] +Ag_frq5 = 20.29 * eV_um_scale # 0.061 μm +Ag_gam5 = 2.419 * eV_um_scale +Ag_sig5 = Ag_f5 * Ag_plasma_frq**2 / Ag_frq5**2 + +Ag_susc = [ + mp.DrudeSusceptibility(frequency=Ag_frq0, gamma=Ag_gam0, sigma=Ag_sig0), + mp.LorentzianSusceptibility(frequency=Ag_frq1, gamma=Ag_gam1, sigma=Ag_sig1), + mp.LorentzianSusceptibility(frequency=Ag_frq2, gamma=Ag_gam2, sigma=Ag_sig2), + mp.LorentzianSusceptibility(frequency=Ag_frq3, gamma=Ag_gam3, sigma=Ag_sig3), + mp.LorentzianSusceptibility(frequency=Ag_frq4, gamma=Ag_gam4, sigma=Ag_sig4), + mp.LorentzianSusceptibility(frequency=Ag_frq5, gamma=Ag_gam5, sigma=Ag_sig5), +] Ag = mp.Medium(epsilon=1.0, E_susceptibilities=Ag_susc, valid_freq_range=metal_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # gold (Au) -metal_range = mp.FreqRange(min=um_scale/6.1992, max=um_scale/.24797) +metal_range = mp.FreqRange(min=um_scale / 6.1992, max=um_scale / 0.24797) -Au_plasma_frq = 9.03*eV_um_scale +Au_plasma_frq = 9.03 * eV_um_scale Au_f0 = 0.760 Au_frq0 = 1e-10 -Au_gam0 = 0.053*eV_um_scale -Au_sig0 = Au_f0*Au_plasma_frq**2/Au_frq0**2 +Au_gam0 = 0.053 * eV_um_scale +Au_sig0 = Au_f0 * Au_plasma_frq**2 / Au_frq0**2 Au_f1 = 0.024 -Au_frq1 = 0.415*eV_um_scale # 2.988 μm -Au_gam1 = 0.241*eV_um_scale -Au_sig1 = Au_f1*Au_plasma_frq**2/Au_frq1**2 +Au_frq1 = 0.415 * eV_um_scale # 2.988 μm +Au_gam1 = 0.241 * eV_um_scale +Au_sig1 = Au_f1 * Au_plasma_frq**2 / Au_frq1**2 Au_f2 = 0.010 -Au_frq2 = 0.830*eV_um_scale # 1.494 μm -Au_gam2 = 0.345*eV_um_scale -Au_sig2 = Au_f2*Au_plasma_frq**2/Au_frq2**2 +Au_frq2 = 0.830 * eV_um_scale # 1.494 μm +Au_gam2 = 0.345 * eV_um_scale +Au_sig2 = Au_f2 * Au_plasma_frq**2 / Au_frq2**2 Au_f3 = 0.071 -Au_frq3 = 2.969*eV_um_scale # 0.418 μm -Au_gam3 = 0.870*eV_um_scale -Au_sig3 = Au_f3*Au_plasma_frq**2/Au_frq3**2 +Au_frq3 = 2.969 * eV_um_scale # 0.418 μm +Au_gam3 = 0.870 * eV_um_scale +Au_sig3 = Au_f3 * Au_plasma_frq**2 / Au_frq3**2 Au_f4 = 0.601 -Au_frq4 = 4.304*eV_um_scale # 0.288 μm -Au_gam4 = 2.494*eV_um_scale -Au_sig4 = Au_f4*Au_plasma_frq**2/Au_frq4**2 +Au_frq4 = 4.304 * eV_um_scale # 0.288 μm +Au_gam4 = 2.494 * eV_um_scale +Au_sig4 = Au_f4 * Au_plasma_frq**2 / Au_frq4**2 Au_f5 = 4.384 -Au_frq5 = 13.32*eV_um_scale # 0.093 μm -Au_gam5 = 2.214*eV_um_scale -Au_sig5 = Au_f5*Au_plasma_frq**2/Au_frq5**2 - -Au_susc = [mp.DrudeSusceptibility(frequency=Au_frq0, gamma=Au_gam0, sigma=Au_sig0), - mp.LorentzianSusceptibility(frequency=Au_frq1, gamma=Au_gam1, sigma=Au_sig1), - mp.LorentzianSusceptibility(frequency=Au_frq2, gamma=Au_gam2, sigma=Au_sig2), - mp.LorentzianSusceptibility(frequency=Au_frq3, gamma=Au_gam3, sigma=Au_sig3), - mp.LorentzianSusceptibility(frequency=Au_frq4, gamma=Au_gam4, sigma=Au_sig4), - mp.LorentzianSusceptibility(frequency=Au_frq5, gamma=Au_gam5, sigma=Au_sig5)] +Au_frq5 = 13.32 * eV_um_scale # 0.093 μm +Au_gam5 = 2.214 * eV_um_scale +Au_sig5 = Au_f5 * Au_plasma_frq**2 / Au_frq5**2 + +Au_susc = [ + mp.DrudeSusceptibility(frequency=Au_frq0, gamma=Au_gam0, sigma=Au_sig0), + mp.LorentzianSusceptibility(frequency=Au_frq1, gamma=Au_gam1, sigma=Au_sig1), + mp.LorentzianSusceptibility(frequency=Au_frq2, gamma=Au_gam2, sigma=Au_sig2), + mp.LorentzianSusceptibility(frequency=Au_frq3, gamma=Au_gam3, sigma=Au_sig3), + mp.LorentzianSusceptibility(frequency=Au_frq4, gamma=Au_gam4, sigma=Au_sig4), + mp.LorentzianSusceptibility(frequency=Au_frq5, gamma=Au_gam5, sigma=Au_sig5), +] Au = mp.Medium(epsilon=1.0, E_susceptibilities=Au_susc, valid_freq_range=metal_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # copper (Cu) -metal_range = mp.FreqRange(min=um_scale/12.398, max=um_scale/.20664) +metal_range = mp.FreqRange(min=um_scale / 12.398, max=um_scale / 0.20664) -Cu_plasma_frq = 10.83*eV_um_scale +Cu_plasma_frq = 10.83 * eV_um_scale Cu_f0 = 0.575 Cu_frq0 = 1e-10 -Cu_gam0 = 0.030*eV_um_scale -Cu_sig0 = Cu_f0*Cu_plasma_frq**2/Cu_frq0**2 +Cu_gam0 = 0.030 * eV_um_scale +Cu_sig0 = Cu_f0 * Cu_plasma_frq**2 / Cu_frq0**2 Cu_f1 = 0.061 -Cu_frq1 = 0.291*eV_um_scale # 4.261 μm -Cu_gam1 = 0.378*eV_um_scale -Cu_sig1 = Cu_f1*Cu_plasma_frq**2/Cu_frq1**2 +Cu_frq1 = 0.291 * eV_um_scale # 4.261 μm +Cu_gam1 = 0.378 * eV_um_scale +Cu_sig1 = Cu_f1 * Cu_plasma_frq**2 / Cu_frq1**2 Cu_f2 = 0.104 -Cu_frq2 = 2.957*eV_um_scale # 0.419 μm -Cu_gam2 = 1.056*eV_um_scale -Cu_sig2 = Cu_f2*Cu_plasma_frq**2/Cu_frq2**2 +Cu_frq2 = 2.957 * eV_um_scale # 0.419 μm +Cu_gam2 = 1.056 * eV_um_scale +Cu_sig2 = Cu_f2 * Cu_plasma_frq**2 / Cu_frq2**2 Cu_f3 = 0.723 -Cu_frq3 = 5.300*eV_um_scale # 0.234 μm -Cu_gam3 = 3.213*eV_um_scale -Cu_sig3 = Cu_f3*Cu_plasma_frq**2/Cu_frq3**2 +Cu_frq3 = 5.300 * eV_um_scale # 0.234 μm +Cu_gam3 = 3.213 * eV_um_scale +Cu_sig3 = Cu_f3 * Cu_plasma_frq**2 / Cu_frq3**2 Cu_f4 = 0.638 -Cu_frq4 = 11.18*eV_um_scale # 0.111 μm -Cu_gam4 = 4.305*eV_um_scale -Cu_sig4 = Cu_f4*Cu_plasma_frq**2/Cu_frq4**2 - -Cu_susc = [mp.DrudeSusceptibility(frequency=Cu_frq0, gamma=Cu_gam0, sigma=Cu_sig0), - mp.LorentzianSusceptibility(frequency=Cu_frq1, gamma=Cu_gam1, sigma=Cu_sig1), - mp.LorentzianSusceptibility(frequency=Cu_frq2, gamma=Cu_gam2, sigma=Cu_sig2), - mp.LorentzianSusceptibility(frequency=Cu_frq3, gamma=Cu_gam3, sigma=Cu_sig3), - mp.LorentzianSusceptibility(frequency=Cu_frq4, gamma=Cu_gam4, sigma=Cu_sig4)] +Cu_frq4 = 11.18 * eV_um_scale # 0.111 μm +Cu_gam4 = 4.305 * eV_um_scale +Cu_sig4 = Cu_f4 * Cu_plasma_frq**2 / Cu_frq4**2 + +Cu_susc = [ + mp.DrudeSusceptibility(frequency=Cu_frq0, gamma=Cu_gam0, sigma=Cu_sig0), + mp.LorentzianSusceptibility(frequency=Cu_frq1, gamma=Cu_gam1, sigma=Cu_sig1), + mp.LorentzianSusceptibility(frequency=Cu_frq2, gamma=Cu_gam2, sigma=Cu_sig2), + mp.LorentzianSusceptibility(frequency=Cu_frq3, gamma=Cu_gam3, sigma=Cu_sig3), + mp.LorentzianSusceptibility(frequency=Cu_frq4, gamma=Cu_gam4, sigma=Cu_sig4), +] Cu = mp.Medium(epsilon=1.0, E_susceptibilities=Cu_susc, valid_freq_range=metal_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # aluminum (Al) -Al_plasma_frq = 14.98*eV_um_scale +Al_plasma_frq = 14.98 * eV_um_scale Al_f0 = 0.523 Al_frq0 = 1e-10 -Al_gam0 = 0.047*eV_um_scale -Al_sig0 = Al_f0*Al_plasma_frq**2/Al_frq0**2 +Al_gam0 = 0.047 * eV_um_scale +Al_sig0 = Al_f0 * Al_plasma_frq**2 / Al_frq0**2 Al_f1 = 0.227 -Al_frq1 = 0.162*eV_um_scale # 7.654 μm -Al_gam1 = 0.333*eV_um_scale -Al_sig1 = Al_f1*Al_plasma_frq**2/Al_frq1**2 +Al_frq1 = 0.162 * eV_um_scale # 7.654 μm +Al_gam1 = 0.333 * eV_um_scale +Al_sig1 = Al_f1 * Al_plasma_frq**2 / Al_frq1**2 Al_f2 = 0.050 -Al_frq2 = 1.544*eV_um_scale # 0.803 μm -Al_gam2 = 0.312*eV_um_scale -Al_sig2 = Al_f2*Al_plasma_frq**2/Al_frq2**2 +Al_frq2 = 1.544 * eV_um_scale # 0.803 μm +Al_gam2 = 0.312 * eV_um_scale +Al_sig2 = Al_f2 * Al_plasma_frq**2 / Al_frq2**2 Al_f3 = 0.166 -Al_frq3 = 1.808*eV_um_scale # 0.686 μm -Al_gam3 = 1.351*eV_um_scale -Al_sig3 = Al_f3*Al_plasma_frq**2/Al_frq3**2 +Al_frq3 = 1.808 * eV_um_scale # 0.686 μm +Al_gam3 = 1.351 * eV_um_scale +Al_sig3 = Al_f3 * Al_plasma_frq**2 / Al_frq3**2 Al_f4 = 0.030 -Al_frq4 = 3.473*eV_um_scale # 0.357 μm -Al_gam4 = 3.382*eV_um_scale -Al_sig4 = Al_f4*Al_plasma_frq**2/Al_frq4**2 - -Al_susc = [mp.DrudeSusceptibility(frequency=Al_frq0, gamma=Al_gam0, sigma=Al_sig0), - mp.LorentzianSusceptibility(frequency=Al_frq1, gamma=Al_gam1, sigma=Al_sig1), - mp.LorentzianSusceptibility(frequency=Al_frq2, gamma=Al_gam2, sigma=Al_sig2), - mp.LorentzianSusceptibility(frequency=Al_frq3, gamma=Al_gam3, sigma=Al_sig3), - mp.LorentzianSusceptibility(frequency=Al_frq4, gamma=Al_gam4, sigma=Al_sig4)] +Al_frq4 = 3.473 * eV_um_scale # 0.357 μm +Al_gam4 = 3.382 * eV_um_scale +Al_sig4 = Al_f4 * Al_plasma_frq**2 / Al_frq4**2 + +Al_susc = [ + mp.DrudeSusceptibility(frequency=Al_frq0, gamma=Al_gam0, sigma=Al_sig0), + mp.LorentzianSusceptibility(frequency=Al_frq1, gamma=Al_gam1, sigma=Al_sig1), + mp.LorentzianSusceptibility(frequency=Al_frq2, gamma=Al_gam2, sigma=Al_sig2), + mp.LorentzianSusceptibility(frequency=Al_frq3, gamma=Al_gam3, sigma=Al_sig3), + mp.LorentzianSusceptibility(frequency=Al_frq4, gamma=Al_gam4, sigma=Al_sig4), +] Al = mp.Medium(epsilon=1.0, E_susceptibilities=Al_susc, valid_freq_range=metal_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # beryllium (Be) -Be_plasma_frq = 18.51*eV_um_scale +Be_plasma_frq = 18.51 * eV_um_scale Be_f0 = 0.084 Be_frq0 = 1e-10 -Be_gam0 = 0.035*eV_um_scale -Be_sig0 = Be_f0*Be_plasma_frq**2/Be_frq0**2 +Be_gam0 = 0.035 * eV_um_scale +Be_sig0 = Be_f0 * Be_plasma_frq**2 / Be_frq0**2 Be_f1 = 0.031 -Be_frq1 = 0.100*eV_um_scale # 12.398 μm -Be_gam1 = 1.664*eV_um_scale -Be_sig1 = Be_f1*Be_plasma_frq**2/Be_frq1**2 +Be_frq1 = 0.100 * eV_um_scale # 12.398 μm +Be_gam1 = 1.664 * eV_um_scale +Be_sig1 = Be_f1 * Be_plasma_frq**2 / Be_frq1**2 Be_f2 = 0.140 -Be_frq2 = 1.032*eV_um_scale # 1.201 μm -Be_gam2 = 3.395*eV_um_scale -Be_sig2 = Be_f2*Be_plasma_frq**2/Be_frq2**2 +Be_frq2 = 1.032 * eV_um_scale # 1.201 μm +Be_gam2 = 3.395 * eV_um_scale +Be_sig2 = Be_f2 * Be_plasma_frq**2 / Be_frq2**2 Be_f3 = 0.530 -Be_frq3 = 3.183*eV_um_scale # 0.390 μm -Be_gam3 = 4.454*eV_um_scale -Be_sig3 = Be_f3*Be_plasma_frq**2/Be_frq3**2 +Be_frq3 = 3.183 * eV_um_scale # 0.390 μm +Be_gam3 = 4.454 * eV_um_scale +Be_sig3 = Be_f3 * Be_plasma_frq**2 / Be_frq3**2 Be_f4 = 0.130 -Be_frq4 = 4.604*eV_um_scale # 0.269 μm -Be_gam4 = 1.802*eV_um_scale -Be_sig4 = Be_f4*Be_plasma_frq**2/Be_frq4**2 - -Be_susc = [mp.DrudeSusceptibility(frequency=Be_frq0, gamma=Be_gam0, sigma=Be_sig0), - mp.LorentzianSusceptibility(frequency=Be_frq1, gamma=Be_gam1, sigma=Be_sig1), - mp.LorentzianSusceptibility(frequency=Be_frq2, gamma=Be_gam2, sigma=Be_sig2), - mp.LorentzianSusceptibility(frequency=Be_frq3, gamma=Be_gam3, sigma=Be_sig3), - mp.LorentzianSusceptibility(frequency=Be_frq4, gamma=Be_gam4, sigma=Be_sig4)] +Be_frq4 = 4.604 * eV_um_scale # 0.269 μm +Be_gam4 = 1.802 * eV_um_scale +Be_sig4 = Be_f4 * Be_plasma_frq**2 / Be_frq4**2 + +Be_susc = [ + mp.DrudeSusceptibility(frequency=Be_frq0, gamma=Be_gam0, sigma=Be_sig0), + mp.LorentzianSusceptibility(frequency=Be_frq1, gamma=Be_gam1, sigma=Be_sig1), + mp.LorentzianSusceptibility(frequency=Be_frq2, gamma=Be_gam2, sigma=Be_sig2), + mp.LorentzianSusceptibility(frequency=Be_frq3, gamma=Be_gam3, sigma=Be_sig3), + mp.LorentzianSusceptibility(frequency=Be_frq4, gamma=Be_gam4, sigma=Be_sig4), +] Be = mp.Medium(epsilon=1.0, E_susceptibilities=Be_susc, valid_freq_range=metal_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # chromium (Cr) -Cr_plasma_frq = 10.75*eV_um_scale +Cr_plasma_frq = 10.75 * eV_um_scale Cr_f0 = 0.168 Cr_frq0 = 1e-10 -Cr_gam0 = 0.047*eV_um_scale -Cr_sig0 = Cr_f0*Cr_plasma_frq**2/Cr_frq0**2 +Cr_gam0 = 0.047 * eV_um_scale +Cr_sig0 = Cr_f0 * Cr_plasma_frq**2 / Cr_frq0**2 Cr_f1 = 0.151 -Cr_frq1 = 0.121*eV_um_scale # 10.247 μm -Cr_gam1 = 3.175*eV_um_scale -Cr_sig1 = Cr_f1*Cr_plasma_frq**2/Cr_frq1**2 +Cr_frq1 = 0.121 * eV_um_scale # 10.247 μm +Cr_gam1 = 3.175 * eV_um_scale +Cr_sig1 = Cr_f1 * Cr_plasma_frq**2 / Cr_frq1**2 Cr_f2 = 0.150 -Cr_frq2 = 0.543*eV_um_scale # 2.283 μm -Cr_gam2 = 1.305*eV_um_scale -Cr_sig2 = Cr_f2*Cr_plasma_frq**2/Cr_frq2**2 +Cr_frq2 = 0.543 * eV_um_scale # 2.283 μm +Cr_gam2 = 1.305 * eV_um_scale +Cr_sig2 = Cr_f2 * Cr_plasma_frq**2 / Cr_frq2**2 Cr_f3 = 1.149 -Cr_frq3 = 1.970*eV_um_scale # 0.629 μm -Cr_gam3 = 2.676*eV_um_scale -Cr_sig3 = Cr_f3*Cr_plasma_frq**2/Cr_frq3**2 +Cr_frq3 = 1.970 * eV_um_scale # 0.629 μm +Cr_gam3 = 2.676 * eV_um_scale +Cr_sig3 = Cr_f3 * Cr_plasma_frq**2 / Cr_frq3**2 Cr_f4 = 0.825 -Cr_frq4 = 8.775*eV_um_scale # 0.141 μm -Cr_gam4 = 1.335*eV_um_scale -Cr_sig4 = Cr_f4*Cr_plasma_frq**2/Cr_frq4**2 - -Cr_susc = [mp.DrudeSusceptibility(frequency=Cr_frq0, gamma=Cr_gam0, sigma=Cr_sig0), - mp.LorentzianSusceptibility(frequency=Cr_frq1, gamma=Cr_gam1, sigma=Cr_sig1), - mp.LorentzianSusceptibility(frequency=Cr_frq2, gamma=Cr_gam2, sigma=Cr_sig2), - mp.LorentzianSusceptibility(frequency=Cr_frq3, gamma=Cr_gam3, sigma=Cr_sig3), - mp.LorentzianSusceptibility(frequency=Cr_frq4, gamma=Cr_gam4, sigma=Cr_sig4)] +Cr_frq4 = 8.775 * eV_um_scale # 0.141 μm +Cr_gam4 = 1.335 * eV_um_scale +Cr_sig4 = Cr_f4 * Cr_plasma_frq**2 / Cr_frq4**2 + +Cr_susc = [ + mp.DrudeSusceptibility(frequency=Cr_frq0, gamma=Cr_gam0, sigma=Cr_sig0), + mp.LorentzianSusceptibility(frequency=Cr_frq1, gamma=Cr_gam1, sigma=Cr_sig1), + mp.LorentzianSusceptibility(frequency=Cr_frq2, gamma=Cr_gam2, sigma=Cr_sig2), + mp.LorentzianSusceptibility(frequency=Cr_frq3, gamma=Cr_gam3, sigma=Cr_sig3), + mp.LorentzianSusceptibility(frequency=Cr_frq4, gamma=Cr_gam4, sigma=Cr_sig4), +] Cr = mp.Medium(epsilon=1.0, E_susceptibilities=Cr_susc, valid_freq_range=metal_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # nickel (Ni) -Ni_plasma_frq = 15.92*eV_um_scale +Ni_plasma_frq = 15.92 * eV_um_scale Ni_f0 = 0.096 Ni_frq0 = 1e-10 -Ni_gam0 = 0.048*eV_um_scale -Ni_sig0 = Ni_f0*Ni_plasma_frq**2/Ni_frq0**2 +Ni_gam0 = 0.048 * eV_um_scale +Ni_sig0 = Ni_f0 * Ni_plasma_frq**2 / Ni_frq0**2 Ni_f1 = 0.100 -Ni_frq1 = 0.174*eV_um_scale # 7.126 μm -Ni_gam1 = 4.511*eV_um_scale -Ni_sig1 = Ni_f1*Ni_plasma_frq**2/Ni_frq1**2 +Ni_frq1 = 0.174 * eV_um_scale # 7.126 μm +Ni_gam1 = 4.511 * eV_um_scale +Ni_sig1 = Ni_f1 * Ni_plasma_frq**2 / Ni_frq1**2 Ni_f2 = 0.135 -Ni_frq2 = 0.582*eV_um_scale # 2.130 μm -Ni_gam2 = 1.334*eV_um_scale -Ni_sig2 = Ni_f2*Ni_plasma_frq**2/Ni_frq2**2 +Ni_frq2 = 0.582 * eV_um_scale # 2.130 μm +Ni_gam2 = 1.334 * eV_um_scale +Ni_sig2 = Ni_f2 * Ni_plasma_frq**2 / Ni_frq2**2 Ni_f3 = 0.106 -Ni_frq3 = 1.597*eV_um_scale # 0.776 μm -Ni_gam3 = 2.178*eV_um_scale -Ni_sig3 = Ni_f3*Ni_plasma_frq**2/Ni_frq3**2 +Ni_frq3 = 1.597 * eV_um_scale # 0.776 μm +Ni_gam3 = 2.178 * eV_um_scale +Ni_sig3 = Ni_f3 * Ni_plasma_frq**2 / Ni_frq3**2 Ni_f4 = 0.729 -Ni_frq4 = 6.089*eV_um_scale # 0.204 μm -Ni_gam4 = 6.292*eV_um_scale -Ni_sig4 = Ni_f4*Ni_plasma_frq**2/Ni_frq4**2 - -Ni_susc = [mp.DrudeSusceptibility(frequency=Ni_frq0, gamma=Ni_gam0, sigma=Ni_sig0), - mp.LorentzianSusceptibility(frequency=Ni_frq1, gamma=Ni_gam1, sigma=Ni_sig1), - mp.LorentzianSusceptibility(frequency=Ni_frq2, gamma=Ni_gam2, sigma=Ni_sig2), - mp.LorentzianSusceptibility(frequency=Ni_frq3, gamma=Ni_gam3, sigma=Ni_sig3), - mp.LorentzianSusceptibility(frequency=Ni_frq4, gamma=Ni_gam4, sigma=Ni_sig4)] +Ni_frq4 = 6.089 * eV_um_scale # 0.204 μm +Ni_gam4 = 6.292 * eV_um_scale +Ni_sig4 = Ni_f4 * Ni_plasma_frq**2 / Ni_frq4**2 + +Ni_susc = [ + mp.DrudeSusceptibility(frequency=Ni_frq0, gamma=Ni_gam0, sigma=Ni_sig0), + mp.LorentzianSusceptibility(frequency=Ni_frq1, gamma=Ni_gam1, sigma=Ni_sig1), + mp.LorentzianSusceptibility(frequency=Ni_frq2, gamma=Ni_gam2, sigma=Ni_sig2), + mp.LorentzianSusceptibility(frequency=Ni_frq3, gamma=Ni_gam3, sigma=Ni_sig3), + mp.LorentzianSusceptibility(frequency=Ni_frq4, gamma=Ni_gam4, sigma=Ni_sig4), +] Ni = mp.Medium(epsilon=1.0, E_susceptibilities=Ni_susc, valid_freq_range=metal_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # palladium (Pd) -Pd_plasma_frq = 9.72*eV_um_scale +Pd_plasma_frq = 9.72 * eV_um_scale Pd_f0 = 0.330 Pd_frq0 = 1e-10 -Pd_gam0 = 0.008*eV_um_scale -Pd_sig0 = Pd_f0*Pd_plasma_frq**2/Pd_frq0**2 +Pd_gam0 = 0.008 * eV_um_scale +Pd_sig0 = Pd_f0 * Pd_plasma_frq**2 / Pd_frq0**2 Pd_f1 = 0.649 -Pd_frq1 = 0.336*eV_um_scale # 3.690 μm -Pd_gam1 = 2.950*eV_um_scale -Pd_sig1 = Pd_f1*Pd_plasma_frq**2/Pd_frq1**2 +Pd_frq1 = 0.336 * eV_um_scale # 3.690 μm +Pd_gam1 = 2.950 * eV_um_scale +Pd_sig1 = Pd_f1 * Pd_plasma_frq**2 / Pd_frq1**2 Pd_f2 = 0.121 -Pd_frq2 = 0.501*eV_um_scale # 2.475 μm -Pd_gam2 = 0.555*eV_um_scale -Pd_sig2 = Pd_f2*Pd_plasma_frq**2/Pd_frq2**2 +Pd_frq2 = 0.501 * eV_um_scale # 2.475 μm +Pd_gam2 = 0.555 * eV_um_scale +Pd_sig2 = Pd_f2 * Pd_plasma_frq**2 / Pd_frq2**2 Pd_f3 = 0.638 -Pd_frq3 = 1.659*eV_um_scale # 0.747 μm -Pd_gam3 = 4.621*eV_um_scale -Pd_sig3 = Pd_f3*Pd_plasma_frq**2/Pd_frq3**2 +Pd_frq3 = 1.659 * eV_um_scale # 0.747 μm +Pd_gam3 = 4.621 * eV_um_scale +Pd_sig3 = Pd_f3 * Pd_plasma_frq**2 / Pd_frq3**2 Pd_f4 = 0.453 -Pd_frq4 = 5.715*eV_um_scale # 0.217 μm -Pd_gam4 = 3.236*eV_um_scale -Pd_sig4 = Pd_f4*Pd_plasma_frq**2/Pd_frq4**2 - -Pd_susc = [mp.DrudeSusceptibility(frequency=Pd_frq0, gamma=Pd_gam0, sigma=Pd_sig0), - mp.LorentzianSusceptibility(frequency=Pd_frq1, gamma=Pd_gam1, sigma=Pd_sig1), - mp.LorentzianSusceptibility(frequency=Pd_frq2, gamma=Pd_gam2, sigma=Pd_sig2), - mp.LorentzianSusceptibility(frequency=Pd_frq3, gamma=Pd_gam3, sigma=Pd_sig3), - mp.LorentzianSusceptibility(frequency=Pd_frq4, gamma=Pd_gam4, sigma=Pd_sig4)] +Pd_frq4 = 5.715 * eV_um_scale # 0.217 μm +Pd_gam4 = 3.236 * eV_um_scale +Pd_sig4 = Pd_f4 * Pd_plasma_frq**2 / Pd_frq4**2 + +Pd_susc = [ + mp.DrudeSusceptibility(frequency=Pd_frq0, gamma=Pd_gam0, sigma=Pd_sig0), + mp.LorentzianSusceptibility(frequency=Pd_frq1, gamma=Pd_gam1, sigma=Pd_sig1), + mp.LorentzianSusceptibility(frequency=Pd_frq2, gamma=Pd_gam2, sigma=Pd_sig2), + mp.LorentzianSusceptibility(frequency=Pd_frq3, gamma=Pd_gam3, sigma=Pd_sig3), + mp.LorentzianSusceptibility(frequency=Pd_frq4, gamma=Pd_gam4, sigma=Pd_sig4), +] Pd = mp.Medium(epsilon=1.0, E_susceptibilities=Pd_susc, valid_freq_range=metal_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # platinum (Pt) -Pt_plasma_frq = 9.59*eV_um_scale +Pt_plasma_frq = 9.59 * eV_um_scale Pt_f0 = 0.333 Pt_frq0 = 1e-10 -Pt_gam0 = 0.080*eV_um_scale -Pt_sig0 = Pt_f0*Pt_plasma_frq**2/Pt_frq0**2 +Pt_gam0 = 0.080 * eV_um_scale +Pt_sig0 = Pt_f0 * Pt_plasma_frq**2 / Pt_frq0**2 Pt_f1 = 0.191 -Pt_frq1 = 0.780*eV_um_scale # 1.590 μm -Pt_gam1 = 0.517*eV_um_scale -Pt_sig1 = Pt_f1*Pt_plasma_frq**2/Pt_frq1**2 +Pt_frq1 = 0.780 * eV_um_scale # 1.590 μm +Pt_gam1 = 0.517 * eV_um_scale +Pt_sig1 = Pt_f1 * Pt_plasma_frq**2 / Pt_frq1**2 Pt_f2 = 0.659 -Pt_frq2 = 1.314*eV_um_scale # 0.944 μm -Pt_gam2 = 1.838*eV_um_scale -Pt_sig2 = Pt_f2*Pt_plasma_frq**2/Pt_frq2**2 +Pt_frq2 = 1.314 * eV_um_scale # 0.944 μm +Pt_gam2 = 1.838 * eV_um_scale +Pt_sig2 = Pt_f2 * Pt_plasma_frq**2 / Pt_frq2**2 Pt_f3 = 0.547 -Pt_frq3 = 3.141*eV_um_scale # 0.395 μm -Pt_gam3 = 3.668*eV_um_scale -Pt_sig3 = Pt_f3*Pt_plasma_frq**2/Pt_frq3**2 +Pt_frq3 = 3.141 * eV_um_scale # 0.395 μm +Pt_gam3 = 3.668 * eV_um_scale +Pt_sig3 = Pt_f3 * Pt_plasma_frq**2 / Pt_frq3**2 Pt_f4 = 3.576 -Pt_frq4 = 9.249*eV_um_scale # 0.134 μm -Pt_gam4 = 8.517*eV_um_scale -Pt_sig4 = Pt_f4*Pt_plasma_frq**2/Pt_frq4**2 - -Pt_susc = [mp.DrudeSusceptibility(frequency=Pt_frq0, gamma=Pt_gam0, sigma=Pt_sig0), - mp.LorentzianSusceptibility(frequency=Pt_frq1, gamma=Pt_gam1, sigma=Pt_sig1), - mp.LorentzianSusceptibility(frequency=Pt_frq2, gamma=Pt_gam2, sigma=Pt_sig2), - mp.LorentzianSusceptibility(frequency=Pt_frq3, gamma=Pt_gam3, sigma=Pt_sig3), - mp.LorentzianSusceptibility(frequency=Pt_frq4, gamma=Pt_gam4, sigma=Pt_sig4)] +Pt_frq4 = 9.249 * eV_um_scale # 0.134 μm +Pt_gam4 = 8.517 * eV_um_scale +Pt_sig4 = Pt_f4 * Pt_plasma_frq**2 / Pt_frq4**2 + +Pt_susc = [ + mp.DrudeSusceptibility(frequency=Pt_frq0, gamma=Pt_gam0, sigma=Pt_sig0), + mp.LorentzianSusceptibility(frequency=Pt_frq1, gamma=Pt_gam1, sigma=Pt_sig1), + mp.LorentzianSusceptibility(frequency=Pt_frq2, gamma=Pt_gam2, sigma=Pt_sig2), + mp.LorentzianSusceptibility(frequency=Pt_frq3, gamma=Pt_gam3, sigma=Pt_sig3), + mp.LorentzianSusceptibility(frequency=Pt_frq4, gamma=Pt_gam4, sigma=Pt_sig4), +] Pt = mp.Medium(epsilon=1.0, E_susceptibilities=Pt_susc, valid_freq_range=metal_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # titanium (Ti) -Ti_plasma_frq = 7.29*eV_um_scale +Ti_plasma_frq = 7.29 * eV_um_scale Ti_f0 = 0.148 Ti_frq0 = 1e-10 -Ti_gam0 = 0.082*eV_um_scale -Ti_sig0 = Ti_f0*Ti_plasma_frq**2/Ti_frq0**2 +Ti_gam0 = 0.082 * eV_um_scale +Ti_sig0 = Ti_f0 * Ti_plasma_frq**2 / Ti_frq0**2 Ti_f1 = 0.899 -Ti_frq1 = 0.777*eV_um_scale # 1.596 μm -Ti_gam1 = 2.276*eV_um_scale -Ti_sig1 = Ti_f1*Ti_plasma_frq**2/Ti_frq1**2 +Ti_frq1 = 0.777 * eV_um_scale # 1.596 μm +Ti_gam1 = 2.276 * eV_um_scale +Ti_sig1 = Ti_f1 * Ti_plasma_frq**2 / Ti_frq1**2 Ti_f2 = 0.393 -Ti_frq2 = 1.545*eV_um_scale # 0.802 μm -Ti_gam2 = 2.518*eV_um_scale -Ti_sig2 = Ti_f2*Ti_plasma_frq**2/Ti_frq2**2 +Ti_frq2 = 1.545 * eV_um_scale # 0.802 μm +Ti_gam2 = 2.518 * eV_um_scale +Ti_sig2 = Ti_f2 * Ti_plasma_frq**2 / Ti_frq2**2 Ti_f3 = 0.187 -Ti_frq3 = 2.509*eV_um_scale # 0.494 μm -Ti_gam3 = 1.663*eV_um_scale -Ti_sig3 = Ti_f3*Ti_plasma_frq**2/Ti_frq3**2 +Ti_frq3 = 2.509 * eV_um_scale # 0.494 μm +Ti_gam3 = 1.663 * eV_um_scale +Ti_sig3 = Ti_f3 * Ti_plasma_frq**2 / Ti_frq3**2 Ti_f4 = 0.001 -Ti_frq4 = 19.43*eV_um_scale # 0.064 μm -Ti_gam4 = 1.762*eV_um_scale -Ti_sig4 = Ti_f4*Ti_plasma_frq**2/Ti_frq4**2 - -Ti_susc = [mp.DrudeSusceptibility(frequency=Ti_frq0, gamma=Ti_gam0, sigma=Ti_sig0), - mp.LorentzianSusceptibility(frequency=Ti_frq1, gamma=Ti_gam1, sigma=Ti_sig1), - mp.LorentzianSusceptibility(frequency=Ti_frq2, gamma=Ti_gam2, sigma=Ti_sig2), - mp.LorentzianSusceptibility(frequency=Ti_frq3, gamma=Ti_gam3, sigma=Ti_sig3), - mp.LorentzianSusceptibility(frequency=Ti_frq4, gamma=Ti_gam4, sigma=Ti_sig4)] +Ti_frq4 = 19.43 * eV_um_scale # 0.064 μm +Ti_gam4 = 1.762 * eV_um_scale +Ti_sig4 = Ti_f4 * Ti_plasma_frq**2 / Ti_frq4**2 + +Ti_susc = [ + mp.DrudeSusceptibility(frequency=Ti_frq0, gamma=Ti_gam0, sigma=Ti_sig0), + mp.LorentzianSusceptibility(frequency=Ti_frq1, gamma=Ti_gam1, sigma=Ti_sig1), + mp.LorentzianSusceptibility(frequency=Ti_frq2, gamma=Ti_gam2, sigma=Ti_sig2), + mp.LorentzianSusceptibility(frequency=Ti_frq3, gamma=Ti_gam3, sigma=Ti_sig3), + mp.LorentzianSusceptibility(frequency=Ti_frq4, gamma=Ti_gam4, sigma=Ti_sig4), +] Ti = mp.Medium(epsilon=1.0, E_susceptibilities=Ti_susc, valid_freq_range=metal_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # tungsten (W) -W_plasma_frq = 13.22*eV_um_scale +W_plasma_frq = 13.22 * eV_um_scale W_f0 = 0.206 W_frq0 = 1e-10 -W_gam0 = 0.064*eV_um_scale -W_sig0 = W_f0*W_plasma_frq**2/W_frq0**2 +W_gam0 = 0.064 * eV_um_scale +W_sig0 = W_f0 * W_plasma_frq**2 / W_frq0**2 W_f1 = 0.054 -W_frq1 = 1.004*eV_um_scale # 1.235 μm -W_gam1 = 0.530*eV_um_scale -W_sig1 = W_f1*W_plasma_frq**2/W_frq1**2 +W_frq1 = 1.004 * eV_um_scale # 1.235 μm +W_gam1 = 0.530 * eV_um_scale +W_sig1 = W_f1 * W_plasma_frq**2 / W_frq1**2 W_f2 = 0.166 -W_frq2 = 1.917*eV_um_scale # 0.647 μm -W_gam2 = 1.281*eV_um_scale -W_sig2 = W_f2*W_plasma_frq**2/W_frq2**2 +W_frq2 = 1.917 * eV_um_scale # 0.647 μm +W_gam2 = 1.281 * eV_um_scale +W_sig2 = W_f2 * W_plasma_frq**2 / W_frq2**2 W_f3 = 0.706 -W_frq3 = 3.580*eV_um_scale # 0.346 μm -W_gam3 = 3.332*eV_um_scale -W_sig3 = W_f3*W_plasma_frq**2/W_frq3**2 +W_frq3 = 3.580 * eV_um_scale # 0.346 μm +W_gam3 = 3.332 * eV_um_scale +W_sig3 = W_f3 * W_plasma_frq**2 / W_frq3**2 W_f4 = 2.590 -W_frq4 = 7.498*eV_um_scale # 0.165 μm -W_gam4 = 5.836*eV_um_scale -W_sig4 = W_f4*W_plasma_frq**2/W_frq4**2 - -W_susc = [mp.DrudeSusceptibility(frequency=W_frq0, gamma=W_gam0, sigma=W_sig0), - mp.LorentzianSusceptibility(frequency=W_frq1, gamma=W_gam1, sigma=W_sig1), - mp.LorentzianSusceptibility(frequency=W_frq2, gamma=W_gam2, sigma=W_sig2), - mp.LorentzianSusceptibility(frequency=W_frq3, gamma=W_gam3, sigma=W_sig3), - mp.LorentzianSusceptibility(frequency=W_frq4, gamma=W_gam4, sigma=W_sig4)] +W_frq4 = 7.498 * eV_um_scale # 0.165 μm +W_gam4 = 5.836 * eV_um_scale +W_sig4 = W_f4 * W_plasma_frq**2 / W_frq4**2 + +W_susc = [ + mp.DrudeSusceptibility(frequency=W_frq0, gamma=W_gam0, sigma=W_sig0), + mp.LorentzianSusceptibility(frequency=W_frq1, gamma=W_gam1, sigma=W_sig1), + mp.LorentzianSusceptibility(frequency=W_frq2, gamma=W_gam2, sigma=W_sig2), + mp.LorentzianSusceptibility(frequency=W_frq3, gamma=W_gam3, sigma=W_sig3), + mp.LorentzianSusceptibility(frequency=W_frq4, gamma=W_gam4, sigma=W_sig4), +] W = mp.Medium(epsilon=1.0, E_susceptibilities=W_susc, valid_freq_range=metal_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # metals from D. Barchiesi and T. Grosges, J. Nanophotonics, Vol. 8, 08996 (2015) # wavelength range: 0.4 - 0.8 μm -metal_visible_range = mp.FreqRange(min=um_scale/0.8, max=um_scale/0.4) +metal_visible_range = mp.FreqRange(min=um_scale / 0.8, max=um_scale / 0.4) # gold (Au) # fit to P.B. Johnson and R.W. Christy, Physical Review B, Vol. 6, pp. 4370-9 (1972) -Au_JC_visible_frq0 = 1/(0.139779231751333*um_scale) -Au_JC_visible_gam0 = 1/(1.12834046202759*um_scale) +Au_JC_visible_frq0 = 1 / (0.139779231751333 * um_scale) +Au_JC_visible_gam0 = 1 / (1.12834046202759 * um_scale) Au_JC_visible_sig0 = 1 -Au_JC_visible_frq1 = 1/(0.404064525036786*um_scale) -Au_JC_visible_gam1 = 1/(26.1269913352870*um_scale) +Au_JC_visible_frq1 = 1 / (0.404064525036786 * um_scale) +Au_JC_visible_gam1 = 1 / (26.1269913352870 * um_scale) Au_JC_visible_sig1 = 2.07118534879440 -Au_JC_visible_susc = [mp.DrudeSusceptibility(frequency=Au_JC_visible_frq0, gamma=Au_JC_visible_gam0, sigma=Au_JC_visible_sig0), - mp.LorentzianSusceptibility(frequency=Au_JC_visible_frq1, gamma=Au_JC_visible_gam1, sigma=Au_JC_visible_sig1)] +Au_JC_visible_susc = [ + mp.DrudeSusceptibility( + frequency=Au_JC_visible_frq0, gamma=Au_JC_visible_gam0, sigma=Au_JC_visible_sig0 + ), + mp.LorentzianSusceptibility( + frequency=Au_JC_visible_frq1, gamma=Au_JC_visible_gam1, sigma=Au_JC_visible_sig1 + ), +] Au_JC_visible = mp.Medium(epsilon=6.1599, E_susceptibilities=Au_JC_visible_susc) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # gold (Au) # fit to E.D. Palik, Handbook of Optical Constants, Academic Press (1985) -Au_visible_frq0 = 1/(0.0473629248511456*um_scale) -Au_visible_gam0 = 1/(0.255476199605166*um_scale) +Au_visible_frq0 = 1 / (0.0473629248511456 * um_scale) +Au_visible_gam0 = 1 / (0.255476199605166 * um_scale) Au_visible_sig0 = 1 -Au_visible_frq1 = 1/(0.800619321082804*um_scale) -Au_visible_gam1 = 1/(0.381870287531951*um_scale) +Au_visible_frq1 = 1 / (0.800619321082804 * um_scale) +Au_visible_gam1 = 1 / (0.381870287531951 * um_scale) Au_visible_sig1 = -169.060953137985 -Au_visible_susc = [mp.DrudeSusceptibility(frequency=Au_visible_frq0, gamma=Au_visible_gam0, sigma=Au_visible_sig0), - mp.LorentzianSusceptibility(frequency=Au_visible_frq1, gamma=Au_visible_gam1, sigma=Au_visible_sig1)] - -Au_visible = mp.Medium(epsilon=0.6888, E_susceptibilities=Au_visible_susc, valid_freq_range=metal_visible_range) - -#------------------------------------------------------------------ +Au_visible_susc = [ + mp.DrudeSusceptibility( + frequency=Au_visible_frq0, gamma=Au_visible_gam0, sigma=Au_visible_sig0 + ), + mp.LorentzianSusceptibility( + frequency=Au_visible_frq1, gamma=Au_visible_gam1, sigma=Au_visible_sig1 + ), +] + +Au_visible = mp.Medium( + epsilon=0.6888, + E_susceptibilities=Au_visible_susc, + valid_freq_range=metal_visible_range, +) + +# ------------------------------------------------------------------ ## WARNING: unstable; field divergence may occur # silver (Au) # fit to E.D. Palik, Handbook of Optical Constants, Academic Press (1985) -Ag_visible_frq0 = 1/(0.142050162130618*um_scale) -Ag_visible_gam0 = 1/(18.0357292925015*um_scale) +Ag_visible_frq0 = 1 / (0.142050162130618 * um_scale) +Ag_visible_gam0 = 1 / (18.0357292925015 * um_scale) Ag_visible_sig0 = 1 -Ag_visible_frq1 = 1/(0.115692151792108*um_scale) -Ag_visible_gam1 = 1/(0.257794324096575*um_scale) +Ag_visible_frq1 = 1 / (0.115692151792108 * um_scale) +Ag_visible_gam1 = 1 / (0.257794324096575 * um_scale) Ag_visible_sig1 = 3.74465275944019 -Ag_visible_susc = [mp.DrudeSusceptibility(frequency=Ag_visible_frq0, gamma=Ag_visible_gam0, sigma=Ag_visible_sig0), - mp.LorentzianSusceptibility(frequency=Ag_visible_frq1, gamma=Ag_visible_gam1, sigma=Ag_visible_sig1)] - -Ag_visible = mp.Medium(epsilon=0.0067526, E_susceptibilities=Ag_visible_susc, valid_freq_range=metal_visible_range) - -#------------------------------------------------------------------ +Ag_visible_susc = [ + mp.DrudeSusceptibility( + frequency=Ag_visible_frq0, gamma=Ag_visible_gam0, sigma=Ag_visible_sig0 + ), + mp.LorentzianSusceptibility( + frequency=Ag_visible_frq1, gamma=Ag_visible_gam1, sigma=Ag_visible_sig1 + ), +] + +Ag_visible = mp.Medium( + epsilon=0.0067526, + E_susceptibilities=Ag_visible_susc, + valid_freq_range=metal_visible_range, +) + +# ------------------------------------------------------------------ ## WARNING: unstable; field divergence may occur # aluminum (Al) # fit to E.D. Palik, Handbook of Optical Constants, Academic Press (1985) -Al_visible_frq0 = 1/(0.0625841659042985*um_scale) -Al_visible_gam0 = 1/(0.606007002962666*um_scale) +Al_visible_frq0 = 1 / (0.0625841659042985 * um_scale) +Al_visible_gam0 = 1 / (0.606007002962666 * um_scale) Al_visible_sig0 = 1 -Al_visible_frq1 = 1/(0.528191199577075*um_scale) -Al_visible_gam1 = 1/(0.291862527666814*um_scale) +Al_visible_frq1 = 1 / (0.528191199577075 * um_scale) +Al_visible_gam1 = 1 / (0.291862527666814 * um_scale) Al_visible_sig1 = -44.4456675577921 -Al_visible_susc = [mp.DrudeSusceptibility(frequency=Al_visible_frq0, gamma=Al_visible_gam0, sigma=Al_visible_sig0), - mp.LorentzianSusceptibility(frequency=Al_visible_frq1, gamma=Al_visible_gam1, sigma=Al_visible_sig1)] - -Al_visible = mp.Medium(epsilon=0.13313, E_susceptibilities=Al_visible_susc, valid_freq_range=metal_visible_range) - -#------------------------------------------------------------------ +Al_visible_susc = [ + mp.DrudeSusceptibility( + frequency=Al_visible_frq0, gamma=Al_visible_gam0, sigma=Al_visible_sig0 + ), + mp.LorentzianSusceptibility( + frequency=Al_visible_frq1, gamma=Al_visible_gam1, sigma=Al_visible_sig1 + ), +] + +Al_visible = mp.Medium( + epsilon=0.13313, + E_susceptibilities=Al_visible_susc, + valid_freq_range=metal_visible_range, +) + +# ------------------------------------------------------------------ # chroimium (Cr) # fit to E.D. Palik, Handbook of Optical Constants, Academic Press (1985) -Cr_visible_frq0 = 1/(0.118410119507342*um_scale) -Cr_visible_gam0 = 1/(0.628596264869804*um_scale) +Cr_visible_frq0 = 1 / (0.118410119507342 * um_scale) +Cr_visible_gam0 = 1 / (0.628596264869804 * um_scale) Cr_visible_sig0 = 1 -Cr_visible_frq1 = 1/(0.565709598452496*um_scale) -Cr_visible_gam1 = 1/(0.731117670900812*um_scale) +Cr_visible_frq1 = 1 / (0.565709598452496 * um_scale) +Cr_visible_gam1 = 1 / (0.731117670900812 * um_scale) Cr_visible_sig1 = 13.2912419951294 -Cr_visible_susc = [mp.DrudeSusceptibility(frequency=Cr_visible_frq0, gamma=Cr_visible_gam0, sigma=Cr_visible_sig0), - mp.LorentzianSusceptibility(frequency=Cr_visible_frq1, gamma=Cr_visible_gam1, sigma=Cr_visible_sig1)] - -Cr_visible = mp.Medium(epsilon=2.7767, E_susceptibilities=Cr_visible_susc, valid_freq_range=metal_visible_range) - -#------------------------------------------------------------------ +Cr_visible_susc = [ + mp.DrudeSusceptibility( + frequency=Cr_visible_frq0, gamma=Cr_visible_gam0, sigma=Cr_visible_sig0 + ), + mp.LorentzianSusceptibility( + frequency=Cr_visible_frq1, gamma=Cr_visible_gam1, sigma=Cr_visible_sig1 + ), +] + +Cr_visible = mp.Medium( + epsilon=2.7767, + E_susceptibilities=Cr_visible_susc, + valid_freq_range=metal_visible_range, +) + +# ------------------------------------------------------------------ ## WARNING: unstable; field divergence may occur # titanium (Ti) # fit to E.D. Palik, Handbook of Optical Constants, Academic Press (1985) -Ti_visible_frq0 = 1/(0.101331651921602*um_scale) -Ti_visible_gam0 = 1/(0.365743382258719*um_scale) +Ti_visible_frq0 = 1 / (0.101331651921602 * um_scale) +Ti_visible_gam0 = 1 / (0.365743382258719 * um_scale) Ti_visible_sig0 = 1 -Ti_visible_frq1 = 1/(4.56839173979216e-09*um_scale) -Ti_visible_gam1 = 1/(5.86441957443603e-10*um_scale) +Ti_visible_frq1 = 1 / (4.56839173979216e-09 * um_scale) +Ti_visible_gam1 = 1 / (5.86441957443603e-10 * um_scale) Ti_visible_sig1 = 54742662.1963414 -Ti_visible_susc = [mp.DrudeSusceptibility(frequency=Ti_visible_frq0, gamma=Ti_visible_gam0, sigma=Ti_visible_sig0), - mp.LorentzianSusceptibility(frequency=Ti_visible_frq1, gamma=Ti_visible_gam1, sigma=Ti_visible_sig1)] - -Ti_visible = mp.Medium(epsilon=-5.4742e7, E_susceptibilities=Ti_visible_susc, valid_freq_range=metal_visible_range) - -#------------------------------------------------------------------ +Ti_visible_susc = [ + mp.DrudeSusceptibility( + frequency=Ti_visible_frq0, gamma=Ti_visible_gam0, sigma=Ti_visible_sig0 + ), + mp.LorentzianSusceptibility( + frequency=Ti_visible_frq1, gamma=Ti_visible_gam1, sigma=Ti_visible_sig1 + ), +] + +Ti_visible = mp.Medium( + epsilon=-5.4742e7, + E_susceptibilities=Ti_visible_susc, + valid_freq_range=metal_visible_range, +) + +# ------------------------------------------------------------------ # aluminum (Al) from Horiba Technical Note 09: Drude Dispersion Model # ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Drude_Dispersion_Model.pdf # wavelength range: 0.19 - 0.83 μm -Al_drude_range = mp.FreqRange(min=um_scale/0.83, max=um_scale/0.19) +Al_drude_range = mp.FreqRange(min=um_scale / 0.83, max=um_scale / 0.19) -Al_drude_frq = 1/(0.0789607648707171*um_scale) -Al_drude_gam = 1/(1.78138208333333*um_scale) +Al_drude_frq = 1 / (0.0789607648707171 * um_scale) +Al_drude_gam = 1 / (1.78138208333333 * um_scale) Al_drude_sig = 1 -Al_drude_susc = [mp.DrudeSusceptibility(frequency=Al_drude_frq, gamma=Al_drude_gam, sigma=Al_drude_sig)] +Al_drude_susc = [ + mp.DrudeSusceptibility( + frequency=Al_drude_frq, gamma=Al_drude_gam, sigma=Al_drude_sig + ) +] -Al_drude = mp.Medium(epsilon=1.0, E_susceptibilities=Al_drude_susc, valid_freq_range=Al_drude_range) +Al_drude = mp.Medium( + epsilon=1.0, E_susceptibilities=Al_drude_susc, valid_freq_range=Al_drude_range +) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # cobalt (Co) from Horiba Technical Note 09: Drude Dispersion Model # ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Drude_Dispersion_Model.pdf # wavelength range: 0.26 - 1.65 μm -Co_range = mp.FreqRange(min=um_scale/1.65, max=um_scale/0.26) +Co_range = mp.FreqRange(min=um_scale / 1.65, max=um_scale / 0.26) -Co_frq = 1/(0.0789607648707171*um_scale) -Co_gam = 1/(0.213802712536644*um_scale) +Co_frq = 1 / (0.0789607648707171 * um_scale) +Co_gam = 1 / (0.213802712536644 * um_scale) Co_sig = 1 Co_susc = [mp.DrudeSusceptibility(frequency=Co_frq, gamma=Co_gam, sigma=Co_sig)] Co = mp.Medium(epsilon=3.694, E_susceptibilities=Co_susc, valid_freq_range=Co_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ ## WARNING: unstable; field divergence may occur # molybdenum (Mo) from Horiba Technical Note 09: Drude Dispersion Model # ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Drude_Dispersion_Model.pdf # wavelength range: 0.25 - 0.83 μm -Mo_range = mp.FreqRange(min=um_scale/0.83, max=um_scale/0.25) +Mo_range = mp.FreqRange(min=um_scale / 0.83, max=um_scale / 0.25) -Mo_frq = 1/(0.0620790071099539*um_scale) -Mo_gam = 1/(0.148359690080172*um_scale) +Mo_frq = 1 / (0.0620790071099539 * um_scale) +Mo_gam = 1 / (0.148359690080172 * um_scale) Mo_sig = 1 Mo_susc = [mp.DrudeSusceptibility(frequency=Mo_frq, gamma=Mo_gam, sigma=Mo_sig)] Mo = mp.Medium(epsilon=-1.366, E_susceptibilities=Mo_susc, valid_freq_range=Mo_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # nickel chrome (NiCr) from Horiba Technical Note 09: Drude Dispersion Model # ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Drude_Dispersion_Model.pdf # wavelength range: 0.25 - 0.83 μm -NiCr_range = mp.FreqRange(min=um_scale/0.83, max=um_scale/0.25) +NiCr_range = mp.FreqRange(min=um_scale / 0.83, max=um_scale / 0.25) -NiCr_frq = 1/(0.0868845080588648*um_scale) -NiCr_gam = 1/(0.308418390547264*um_scale) +NiCr_frq = 1 / (0.0868845080588648 * um_scale) +NiCr_gam = 1 / (0.308418390547264 * um_scale) NiCr_sig = 1 NiCr_susc = [mp.DrudeSusceptibility(frequency=NiCr_frq, gamma=NiCr_gam, sigma=NiCr_sig)] NiCr = mp.Medium(epsilon=1.0, E_susceptibilities=NiCr_susc, valid_freq_range=NiCr_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # nickel iron (NiFe) from Horiba Technical Note 09: Drude Dispersion Model # ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Drude_Dispersion_Model.pdf # wavelength range: 0.25 - 0.83 μm -NiFe_range = mp.FreqRange(min=um_scale/0.83, max=um_scale/0.25) +NiFe_range = mp.FreqRange(min=um_scale / 0.83, max=um_scale / 0.25) -NiFe_frq = 1/(0.0838297450980392*um_scale) -NiFe_gam = 1/(0.259381156903766*um_scale) +NiFe_frq = 1 / (0.0838297450980392 * um_scale) +NiFe_gam = 1 / (0.259381156903766 * um_scale) NiFe_sig = 1 NiFe_susc = [mp.DrudeSusceptibility(frequency=NiFe_frq, gamma=NiFe_gam, sigma=NiFe_sig)] NiFe = mp.Medium(epsilon=1.0, E_susceptibilities=NiFe_susc, valid_freq_range=NiFe_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # titanium (Ti) from Horiba Technical Note 09: Drude Dispersion Model # ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Drude_Dispersion_Model.pdf # wavelength range: 0.21 - 1.24 μm -Ti_drude_range = mp.FreqRange(min=um_scale/1.24, max=um_scale/0.21) +Ti_drude_range = mp.FreqRange(min=um_scale / 1.24, max=um_scale / 0.21) -Ti_drude_frq = 1/(0.113746966055046*um_scale) -Ti_drude_gam = 1/(0.490056098814229*um_scale) +Ti_drude_frq = 1 / (0.113746966055046 * um_scale) +Ti_drude_gam = 1 / (0.490056098814229 * um_scale) Ti_drude_sig = 1 -Ti_drude_susc = [mp.DrudeSusceptibility(frequency=Ti_drude_frq, gamma=Ti_drude_gam, sigma=Ti_drude_sig)] +Ti_drude_susc = [ + mp.DrudeSusceptibility( + frequency=Ti_drude_frq, gamma=Ti_drude_gam, sigma=Ti_drude_sig + ) +] -Ti_drude = mp.Medium(epsilon=1.0, E_susceptibilities=Ti_drude_susc, valid_freq_range=Ti_drude_range) +Ti_drude = mp.Medium( + epsilon=1.0, E_susceptibilities=Ti_drude_susc, valid_freq_range=Ti_drude_range +) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # silicon nitride (SiN), non-stoichiometric, from Horiba Technical Note 08: Lorentz Dispersion Model # ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Lorentz_Dispersion_Model.pdf # wavelength range: 0.21 - 2.07 μm -SiN_range = mp.FreqRange(min=um_scale/2.07, max=um_scale/0.21) +SiN_range = mp.FreqRange(min=um_scale / 2.07, max=um_scale / 0.21) -SiN_frq1 = 1/(0.190891752117013*um_scale) -SiN_gam1 = 1/(3.11518072864322*um_scale) +SiN_frq1 = 1 / (0.190891752117013 * um_scale) +SiN_gam1 = 1 / (3.11518072864322 * um_scale) SiN_sig1 = 1.2650 -SiN_susc = [mp.LorentzianSusceptibility(frequency=SiN_frq1, gamma=SiN_gam1, sigma=SiN_sig1)] +SiN_susc = [ + mp.LorentzianSusceptibility(frequency=SiN_frq1, gamma=SiN_gam1, sigma=SiN_sig1) +] SiN = mp.Medium(epsilon=2.320, E_susceptibilities=SiN_susc, valid_freq_range=SiN_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # silicon nitride (Si3N4), stoichiometric, from Horiba Technical Note 08: Lorentz Dispersion Model # ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Lorentz_Dispersion_Model.pdf # wavelength range: 0.23 - 0.83 μm -Si3N4_range = mp.FreqRange(min=um_scale/0.83, max=um_scale/0.23) +Si3N4_range = mp.FreqRange(min=um_scale / 0.83, max=um_scale / 0.23) -Si3N4_frq1 = 1/(0.389153148148148*um_scale) -Si3N4_gam1 = 1/(0.693811936205932*um_scale) +Si3N4_frq1 = 1 / (0.389153148148148 * um_scale) +Si3N4_gam1 = 1 / (0.693811936205932 * um_scale) Si3N4_sig1 = 4.377 -Si3N4_susc = [mp.LorentzianSusceptibility(frequency=Si3N4_frq1, gamma=Si3N4_gam1, sigma=Si3N4_sig1)] +Si3N4_susc = [ + mp.LorentzianSusceptibility( + frequency=Si3N4_frq1, gamma=Si3N4_gam1, sigma=Si3N4_sig1 + ) +] -Si3N4 = mp.Medium(epsilon=1.0, E_susceptibilities=Si3N4_susc, valid_freq_range=Si3N4_range) +Si3N4 = mp.Medium( + epsilon=1.0, E_susceptibilities=Si3N4_susc, valid_freq_range=Si3N4_range +) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # silicon dioxide (SiO2) from Horiba Technical Note 08: Lorentz Dispersion Model # ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Lorentz_Dispersion_Model.pdf # wavelength range: 0.25 - 1.77 μm -SiO2_range = mp.FreqRange(min=um_scale/1.77, max=um_scale/0.25) +SiO2_range = mp.FreqRange(min=um_scale / 1.77, max=um_scale / 0.25) -SiO2_frq1 = 1/(0.103320160833333*um_scale) -SiO2_gam1 = 1/(12.3984193000000*um_scale) +SiO2_frq1 = 1 / (0.103320160833333 * um_scale) +SiO2_gam1 = 1 / (12.3984193000000 * um_scale) SiO2_sig1 = 1.12 -SiO2_susc = [mp.LorentzianSusceptibility(frequency=SiO2_frq1, gamma=SiO2_gam1, sigma=SiO2_sig1)] +SiO2_susc = [ + mp.LorentzianSusceptibility(frequency=SiO2_frq1, gamma=SiO2_gam1, sigma=SiO2_sig1) +] SiO2 = mp.Medium(epsilon=1.0, E_susceptibilities=SiO2_susc, valid_freq_range=SiO2_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # indium phosphide (InP) from Handbook of Optics, 2nd edition, Vol. 2, McGraw-Hill (1994) # ref: https://refractiveindex.info/?shelf=main&book=InP&page=Pettit # wavelength range: 0.95 - 10 μm -InP_range = mp.FreqRange(min=um_scale/10, max=um_scale/0.95) +InP_range = mp.FreqRange(min=um_scale / 10, max=um_scale / 0.95) -InP_frq1 = 1/(0.6263*um_scale) +InP_frq1 = 1 / (0.6263 * um_scale) InP_gam1 = 0 InP_sig1 = 2.316 -InP_frq2 = 1/(32.935*um_scale) +InP_frq2 = 1 / (32.935 * um_scale) InP_gam2 = 0 InP_sig2 = 2.765 -InP_susc = [mp.LorentzianSusceptibility(frequency=InP_frq1, gamma=InP_gam1, sigma=InP_sig1), - mp.LorentzianSusceptibility(frequency=InP_frq2, gamma=InP_gam2, sigma=InP_sig2)] +InP_susc = [ + mp.LorentzianSusceptibility(frequency=InP_frq1, gamma=InP_gam1, sigma=InP_sig1), + mp.LorentzianSusceptibility(frequency=InP_frq2, gamma=InP_gam2, sigma=InP_sig2), +] InP = mp.Medium(epsilon=7.255, E_susceptibilities=InP_susc, valid_freq_range=InP_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # germanium (Ge) from N. P. Barnes and M. S. Piltch, J. Optical Society America, Vol. 69, pp. 178-180 (1979) # ref: https://refractiveindex.info/?shelf=main&book=Ge&page=Icenogle # wavelength range: 2.5 - 12 μm -Ge_range = mp.FreqRange(min=um_scale/12, max=um_scale/2.5) +Ge_range = mp.FreqRange(min=um_scale / 12, max=um_scale / 2.5) -Ge_frq1 = 1/(0.6641159*um_scale) +Ge_frq1 = 1 / (0.6641159 * um_scale) Ge_gam1 = 0 Ge_sig1 = 6.7288 -Ge_frq2 = 1/(62.210127*um_scale) +Ge_frq2 = 1 / (62.210127 * um_scale) Ge_gam2 = 0 Ge_sig2 = 0.21307 -Ge_susc = [mp.LorentzianSusceptibility(frequency=Ge_frq1, gamma=Ge_gam1, sigma=Ge_sig1), - mp.LorentzianSusceptibility(frequency=Ge_frq2, gamma=Ge_gam2, sigma=Ge_sig2)] +Ge_susc = [ + mp.LorentzianSusceptibility(frequency=Ge_frq1, gamma=Ge_gam1, sigma=Ge_sig1), + mp.LorentzianSusceptibility(frequency=Ge_frq2, gamma=Ge_gam2, sigma=Ge_sig2), +] Ge = mp.Medium(epsilon=9.28156, E_susceptibilities=Ge_susc, valid_freq_range=Ge_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # silicon (Si) from C. D. Salzberg and J. J. Villa, , J. Optical Society America, Vol. 47, pp. 244-246 (1957) # ref: https://refractiveindex.info/?shelf=main&book=Si&page=Salzberg # wavelength range: 1.36 - 11 μm -Si_range = mp.FreqRange(min=um_scale/11, max=um_scale/1.36) +Si_range = mp.FreqRange(min=um_scale / 11, max=um_scale / 1.36) -Si_frq1 = 1/(0.301516485*um_scale) +Si_frq1 = 1 / (0.301516485 * um_scale) Si_gam1 = 0 Si_sig1 = 10.6684293 -Si_frq2 = 1/(1.13475115*um_scale) +Si_frq2 = 1 / (1.13475115 * um_scale) Si_gam2 = 0 Si_sig2 = 0.0030434748 -Si_frq3 = 1/(1104*um_scale) +Si_frq3 = 1 / (1104 * um_scale) Si_gam3 = 0 Si_sig3 = 1.54133408 -Si_susc = [mp.LorentzianSusceptibility(frequency=Si_frq1, gamma=Si_gam1, sigma=Si_sig1), - mp.LorentzianSusceptibility(frequency=Si_frq2, gamma=Si_gam2, sigma=Si_sig2), - mp.LorentzianSusceptibility(frequency=Si_frq3, gamma=Si_gam3, sigma=Si_sig3)] +Si_susc = [ + mp.LorentzianSusceptibility(frequency=Si_frq1, gamma=Si_gam1, sigma=Si_sig1), + mp.LorentzianSusceptibility(frequency=Si_frq2, gamma=Si_gam2, sigma=Si_sig2), + mp.LorentzianSusceptibility(frequency=Si_frq3, gamma=Si_gam3, sigma=Si_sig3), +] Si = mp.Medium(epsilon=1.0, E_susceptibilities=Si_susc, valid_freq_range=Si_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # poly(methyl methacrylate) (PMMA) from N. Sultanova et al., Acta Physica Polonica A, Vol. 116, pp. 585-7 (2009) # ref: https://refractiveindex.info/?shelf=organic&book=poly%28methyl_methacrylate%29&page=Sultanova # wavelength range: 0.437 - 1.052 μm -PMMA_range = mp.FreqRange(min=um_scale/1.052, max=um_scale/0.437) +PMMA_range = mp.FreqRange(min=um_scale / 1.052, max=um_scale / 0.437) -PMMA_frq1 = 1/(0.106362587407415*um_scale) +PMMA_frq1 = 1 / (0.106362587407415 * um_scale) PMMA_gam1 = 0 PMMA_sig1 = 1.1819 -PMMA_susc = [mp.LorentzianSusceptibility(frequency=PMMA_frq1, gamma=PMMA_gam1, sigma=PMMA_sig1)] +PMMA_susc = [ + mp.LorentzianSusceptibility(frequency=PMMA_frq1, gamma=PMMA_gam1, sigma=PMMA_sig1) +] PMMA = mp.Medium(epsilon=1.0, E_susceptibilities=PMMA_susc, valid_freq_range=PMMA_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # polycarbonate (PC) from N. Sultanova et al., Acta Physica Polonica A, Vol. 116, pp. 585-7 (2009) # ref: https://refractiveindex.info/?shelf=organic&book=polycarbonate&page=Sultanova # wavelength range: 0.437 - 1.052 μm -PC_range = mp.FreqRange(min=um_scale/1.052, max=um_scale/0.437) +PC_range = mp.FreqRange(min=um_scale / 1.052, max=um_scale / 0.437) -PC_frq1 = 1/(0.145958898324152*um_scale) +PC_frq1 = 1 / (0.145958898324152 * um_scale) PC_gam1 = 0 PC_sig1 = 1.4182 @@ -953,14 +1118,14 @@ PC = mp.Medium(epsilon=1.0, E_susceptibilities=PC_susc, valid_freq_range=PC_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # polystyrene (PS) from N. Sultanova et al., Acta Physica Polonica A, Vol. 116, pp. 585-7 (2009) # ref: https://refractiveindex.info/?shelf=organic&book=polystyren&page=Sultanova # wavelength range: 0.437 - 1.052 μm -PS_range = mp.FreqRange(min=um_scale/1.052, max=um_scale/0.437) +PS_range = mp.FreqRange(min=um_scale / 1.052, max=um_scale / 0.437) -PS_frq1 = 1/(0.142182980697410*um_scale) +PS_frq1 = 1 / (0.142182980697410 * um_scale) PS_gam1 = 0 PS_sig1 = 1.4435 @@ -968,22 +1133,24 @@ PS = mp.Medium(epsilon=1.0, E_susceptibilities=PS_susc, valid_freq_range=PS_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # cellulose (CLS) from N. Sultanova et al., Acta Physica Polonica A, Vol. 116, pp. 585-7 (2009) # ref: https://refractiveindex.info/?shelf=organic&book=cellulose&page=Sultanova # wavelength range: 0.437 - 1.052 μm -CLS_range = mp.FreqRange(min=um_scale/1.052, max=um_scale/0.437) +CLS_range = mp.FreqRange(min=um_scale / 1.052, max=um_scale / 0.437) -CLS_frq1 = 1/(0.105294824184287*um_scale) +CLS_frq1 = 1 / (0.105294824184287 * um_scale) CLS_gam1 = 0 CLS_sig1 = 1.124 -CLS_susc = [mp.LorentzianSusceptibility(frequency=CLS_frq1, gamma=CLS_gam1, sigma=CLS_sig1)] +CLS_susc = [ + mp.LorentzianSusceptibility(frequency=CLS_frq1, gamma=CLS_gam1, sigma=CLS_sig1) +] CLS = mp.Medium(epsilon=1.0, E_susceptibilities=CLS_susc, valid_freq_range=CLS_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # barium borate (BaB2O4), beta phase, from G. Tamosauskas et al., Optical Materials Express, Vol. 8, pp. 1410-18 (2018) # ref: https://refractiveindex.info/?shelf=main&book=BaB2O4&page=Tamosauskas-o # ref: https://refractiveindex.info/?shelf=main&book=BaB2O4&page=Tamosauskas-e @@ -991,39 +1158,71 @@ ## NOTE: ordinary (o) axes in X and Y, extraordinary (e) axis in Z -BaB2O4_range = mp.FreqRange(min=um_scale/5.2, max=um_scale/0.188) +BaB2O4_range = mp.FreqRange(min=um_scale / 5.2, max=um_scale / 0.188) -BaB2O4_frq1 = 1/(0.06265780079128216*um_scale) +BaB2O4_frq1 = 1 / (0.06265780079128216 * um_scale) BaB2O4_gam1 = 0 BaB2O4_sig1 = 0.90291 -BaB2O4_frq2 = 1/(0.13706202975295528*um_scale) +BaB2O4_frq2 = 1 / (0.13706202975295528 * um_scale) BaB2O4_gam2 = 0 BaB2O4_sig2 = 0.83155 -BaB2O4_frq3 = 1/(7.746612162745725*um_scale) +BaB2O4_frq3 = 1 / (7.746612162745725 * um_scale) BaB2O4_gam3 = 0 BaB2O4_sig3 = 0.76536 -BaB2O4_susc_o = [mp.LorentzianSusceptibility(frequency=BaB2O4_frq1, gamma=BaB2O4_gam1, sigma_diag=BaB2O4_sig1*mp.Vector3(1,1,0)), - mp.LorentzianSusceptibility(frequency=BaB2O4_frq2, gamma=BaB2O4_gam2, sigma_diag=BaB2O4_sig2*mp.Vector3(1,1,0)), - mp.LorentzianSusceptibility(frequency=BaB2O4_frq3, gamma=BaB2O4_gam3, sigma_diag=BaB2O4_sig3*mp.Vector3(1,1,0))] - -BaB2O4_frq1 = 1/(0.0845103543951864*um_scale) +BaB2O4_susc_o = [ + mp.LorentzianSusceptibility( + frequency=BaB2O4_frq1, + gamma=BaB2O4_gam1, + sigma_diag=BaB2O4_sig1 * mp.Vector3(1, 1, 0), + ), + mp.LorentzianSusceptibility( + frequency=BaB2O4_frq2, + gamma=BaB2O4_gam2, + sigma_diag=BaB2O4_sig2 * mp.Vector3(1, 1, 0), + ), + mp.LorentzianSusceptibility( + frequency=BaB2O4_frq3, + gamma=BaB2O4_gam3, + sigma_diag=BaB2O4_sig3 * mp.Vector3(1, 1, 0), + ), +] + +BaB2O4_frq1 = 1 / (0.0845103543951864 * um_scale) BaB2O4_gam1 = 0 BaB2O4_sig1 = 1.151075 -BaB2O4_frq2 = 1/(0.15029970059850417*um_scale) +BaB2O4_frq2 = 1 / (0.15029970059850417 * um_scale) BaB2O4_gam2 = 0 BaB2O4_sig2 = 0.21803 -BaB2O4_frq3 = 1/(16.217274740226856*um_scale) +BaB2O4_frq3 = 1 / (16.217274740226856 * um_scale) BaB2O4_gam3 = 0 BaB2O4_sig3 = 0.656 -BaB2O4_susc_e = [mp.LorentzianSusceptibility(frequency=BaB2O4_frq1, gamma=BaB2O4_gam1, sigma_diag=BaB2O4_sig1*mp.Vector3(0,0,1)), - mp.LorentzianSusceptibility(frequency=BaB2O4_frq2, gamma=BaB2O4_gam2, sigma_diag=BaB2O4_sig2*mp.Vector3(0,0,1)), - mp.LorentzianSusceptibility(frequency=BaB2O4_frq3, gamma=BaB2O4_gam3, sigma_diag=BaB2O4_sig3*mp.Vector3(0,0,1))] - -BaB2O4 = mp.Medium(epsilon=1.0, E_susceptibilities=BaB2O4_susc_o+BaB2O4_susc_e, valid_freq_range=BaB2O4_range) - -#------------------------------------------------------------------ +BaB2O4_susc_e = [ + mp.LorentzianSusceptibility( + frequency=BaB2O4_frq1, + gamma=BaB2O4_gam1, + sigma_diag=BaB2O4_sig1 * mp.Vector3(0, 0, 1), + ), + mp.LorentzianSusceptibility( + frequency=BaB2O4_frq2, + gamma=BaB2O4_gam2, + sigma_diag=BaB2O4_sig2 * mp.Vector3(0, 0, 1), + ), + mp.LorentzianSusceptibility( + frequency=BaB2O4_frq3, + gamma=BaB2O4_gam3, + sigma_diag=BaB2O4_sig3 * mp.Vector3(0, 0, 1), + ), +] + +BaB2O4 = mp.Medium( + epsilon=1.0, + E_susceptibilities=BaB2O4_susc_o + BaB2O4_susc_e, + valid_freq_range=BaB2O4_range, +) + +# ------------------------------------------------------------------ # lithium niobate (LiNbO3) from D.E. Zelmon et al., J. Optical Society of America B, Vol. 14, pp. 3319-22 (1997) # ref: https://refractiveindex.info/?shelf=main&book=LiNbO3&page=Zelmon-o # ref: https://refractiveindex.info/?shelf=main&book=LiNbO3&page=Zelmon-e @@ -1031,39 +1230,71 @@ ## NOTE: ordinary (o) axes in X and Y, extraordinary (e) axis in Z -LiNbO3_range = mp.FreqRange(min=um_scale/5.0, max=um_scale/0.4) +LiNbO3_range = mp.FreqRange(min=um_scale / 5.0, max=um_scale / 0.4) -LiNbO3_frq1 = 1/(0.13281566172707193*um_scale) +LiNbO3_frq1 = 1 / (0.13281566172707193 * um_scale) LiNbO3_gam1 = 0 LiNbO3_sig1 = 2.6734 -LiNbO3_frq2 = 1/(0.24318717071424636*um_scale) +LiNbO3_frq2 = 1 / (0.24318717071424636 * um_scale) LiNbO3_gam2 = 0 LiNbO3_sig2 = 1.2290 -LiNbO3_frq3 = 1/(21.78531615561271*um_scale) +LiNbO3_frq3 = 1 / (21.78531615561271 * um_scale) LiNbO3_gam3 = 0 LiNbO3_sig3 = 12.614 -LiNbO3_susc_o = [mp.LorentzianSusceptibility(frequency=LiNbO3_frq1, gamma=LiNbO3_gam1, sigma_diag=LiNbO3_sig1*mp.Vector3(1,1,0)), - mp.LorentzianSusceptibility(frequency=LiNbO3_frq2, gamma=LiNbO3_gam2, sigma_diag=LiNbO3_sig2*mp.Vector3(1,1,0)), - mp.LorentzianSusceptibility(frequency=LiNbO3_frq3, gamma=LiNbO3_gam3, sigma_diag=LiNbO3_sig3*mp.Vector3(1,1,0))] - -LiNbO3_frq1 = 1/(0.14307340773183533*um_scale) +LiNbO3_susc_o = [ + mp.LorentzianSusceptibility( + frequency=LiNbO3_frq1, + gamma=LiNbO3_gam1, + sigma_diag=LiNbO3_sig1 * mp.Vector3(1, 1, 0), + ), + mp.LorentzianSusceptibility( + frequency=LiNbO3_frq2, + gamma=LiNbO3_gam2, + sigma_diag=LiNbO3_sig2 * mp.Vector3(1, 1, 0), + ), + mp.LorentzianSusceptibility( + frequency=LiNbO3_frq3, + gamma=LiNbO3_gam3, + sigma_diag=LiNbO3_sig3 * mp.Vector3(1, 1, 0), + ), +] + +LiNbO3_frq1 = 1 / (0.14307340773183533 * um_scale) LiNbO3_gam1 = 0 LiNbO3_sig1 = 2.9804 -LiNbO3_frq2 = 1/(0.2580697580112788*um_scale) +LiNbO3_frq2 = 1 / (0.2580697580112788 * um_scale) LiNbO3_gam2 = 0 LiNbO3_sig2 = 0.5981 -LiNbO3_frq3 = 1/(20.39803912144498*um_scale) +LiNbO3_frq3 = 1 / (20.39803912144498 * um_scale) LiNbO3_gam3 = 0 LiNbO3_sig3 = 8.9543 -LiNbO3_susc_e = [mp.LorentzianSusceptibility(frequency=LiNbO3_frq1, gamma=LiNbO3_gam1, sigma_diag=LiNbO3_sig1*mp.Vector3(0,0,1)), - mp.LorentzianSusceptibility(frequency=LiNbO3_frq2, gamma=LiNbO3_gam2, sigma_diag=LiNbO3_sig2*mp.Vector3(0,0,1)), - mp.LorentzianSusceptibility(frequency=LiNbO3_frq3, gamma=LiNbO3_gam3, sigma_diag=LiNbO3_sig3*mp.Vector3(0,0,1))] - -LiNbO3 = mp.Medium(epsilon=1.0, E_susceptibilities=LiNbO3_susc_o+LiNbO3_susc_e, valid_freq_range=LiNbO3_range) - -#------------------------------------------------------------------ +LiNbO3_susc_e = [ + mp.LorentzianSusceptibility( + frequency=LiNbO3_frq1, + gamma=LiNbO3_gam1, + sigma_diag=LiNbO3_sig1 * mp.Vector3(0, 0, 1), + ), + mp.LorentzianSusceptibility( + frequency=LiNbO3_frq2, + gamma=LiNbO3_gam2, + sigma_diag=LiNbO3_sig2 * mp.Vector3(0, 0, 1), + ), + mp.LorentzianSusceptibility( + frequency=LiNbO3_frq3, + gamma=LiNbO3_gam3, + sigma_diag=LiNbO3_sig3 * mp.Vector3(0, 0, 1), + ), +] + +LiNbO3 = mp.Medium( + epsilon=1.0, + E_susceptibilities=LiNbO3_susc_o + LiNbO3_susc_e, + valid_freq_range=LiNbO3_range, +) + +# ------------------------------------------------------------------ # calcium tungstate (CaWO4) from W.L. Bond, J. Applied Physics, Vol. 36, pp. 1674-77 (1965) # ref: https://refractiveindex.info/?shelf=main&book=CaWO4&page=Bond-o # ref: https://refractiveindex.info/?shelf=main&book=CaWO4&page=Bond-e @@ -1071,31 +1302,55 @@ ## NOTE: ordinary (o) axes in X and Y, extraordinary (e) axis in Z -CaWO4_range = mp.FreqRange(min=um_scale/4.0, max=um_scale/0.45) +CaWO4_range = mp.FreqRange(min=um_scale / 4.0, max=um_scale / 0.45) -CaWO4_frq1 = 1/(0.1347*um_scale) +CaWO4_frq1 = 1 / (0.1347 * um_scale) CaWO4_gam1 = 0 CaWO4_sig1 = 2.5493 -CaWO4_frq2 = 1/(10.815*um_scale) +CaWO4_frq2 = 1 / (10.815 * um_scale) CaWO4_gam2 = 0 CaWO4_sig2 = 0.9200 -CaWO4_susc_o = [mp.LorentzianSusceptibility(frequency=CaWO4_frq1, gamma=CaWO4_gam1, sigma_diag=CaWO4_sig1*mp.Vector3(1,1,0)), - mp.LorentzianSusceptibility(frequency=CaWO4_frq2, gamma=CaWO4_gam2, sigma_diag=CaWO4_sig2*mp.Vector3(1,1,0))] - -CaWO4_frq1 = 1/(0.1379*um_scale) +CaWO4_susc_o = [ + mp.LorentzianSusceptibility( + frequency=CaWO4_frq1, + gamma=CaWO4_gam1, + sigma_diag=CaWO4_sig1 * mp.Vector3(1, 1, 0), + ), + mp.LorentzianSusceptibility( + frequency=CaWO4_frq2, + gamma=CaWO4_gam2, + sigma_diag=CaWO4_sig2 * mp.Vector3(1, 1, 0), + ), +] + +CaWO4_frq1 = 1 / (0.1379 * um_scale) CaWO4_gam1 = 0 CaWO4_sig1 = 2.6041 -CaWO4_frq2 = 1/(21.371*um_scale) +CaWO4_frq2 = 1 / (21.371 * um_scale) CaWO4_gam2 = 0 CaWO4_sig2 = 4.1237 -CaWO4_susc_e = [mp.LorentzianSusceptibility(frequency=CaWO4_frq1, gamma=CaWO4_gam1, sigma_diag=CaWO4_sig1*mp.Vector3(0,0,1)), - mp.LorentzianSusceptibility(frequency=CaWO4_frq2, gamma=CaWO4_gam2, sigma_diag=CaWO4_sig2*mp.Vector3(0,0,1))] - -CaWO4 = mp.Medium(epsilon=1.0, E_susceptibilities=CaWO4_susc_o+CaWO4_susc_e, valid_freq_range=CaWO4_range) - -#------------------------------------------------------------------ +CaWO4_susc_e = [ + mp.LorentzianSusceptibility( + frequency=CaWO4_frq1, + gamma=CaWO4_gam1, + sigma_diag=CaWO4_sig1 * mp.Vector3(0, 0, 1), + ), + mp.LorentzianSusceptibility( + frequency=CaWO4_frq2, + gamma=CaWO4_gam2, + sigma_diag=CaWO4_sig2 * mp.Vector3(0, 0, 1), + ), +] + +CaWO4 = mp.Medium( + epsilon=1.0, + E_susceptibilities=CaWO4_susc_o + CaWO4_susc_e, + valid_freq_range=CaWO4_range, +) + +# ------------------------------------------------------------------ # calcium carbonate (CaCO3) from G. Ghosh, Optics Communication, Vol. 163, pp. 95-102 (1999) # ref: https://refractiveindex.info/?shelf=main&book=CaCO3&page=Ghosh-o # ref: https://refractiveindex.info/?shelf=main&book=CaCO3&page=Ghosh-e @@ -1103,31 +1358,55 @@ ## NOTE: ordinary (o) axes in X and Y, extraordinary (e) axis in Z -CaCO3_range = mp.FreqRange(min=um_scale/2.172, max=um_scale/0.204) +CaCO3_range = mp.FreqRange(min=um_scale / 2.172, max=um_scale / 0.204) -CaCO3_frq1 = 1/(0.13940057496294625*um_scale) +CaCO3_frq1 = 1 / (0.13940057496294625 * um_scale) CaCO3_gam1 = 0 CaCO3_sig1 = 0.96464345 -CaCO3_frq2 = 1/(10.954451150103322*um_scale) +CaCO3_frq2 = 1 / (10.954451150103322 * um_scale) CaCO3_gam2 = 0 CaCO3_sig2 = 1.82831454 -CaCO3_susc_o = [mp.LorentzianSusceptibility(frequency=CaCO3_frq1, gamma=CaCO3_gam1, sigma_diag=CaCO3_sig1*mp.Vector3(1,1,0)), - mp.LorentzianSusceptibility(frequency=CaCO3_frq2, gamma=CaCO3_gam2, sigma_diag=CaCO3_sig2*mp.Vector3(1,1,0))] - -CaCO3_frq1 = 1/(0.1032906302623815*um_scale) +CaCO3_susc_o = [ + mp.LorentzianSusceptibility( + frequency=CaCO3_frq1, + gamma=CaCO3_gam1, + sigma_diag=CaCO3_sig1 * mp.Vector3(1, 1, 0), + ), + mp.LorentzianSusceptibility( + frequency=CaCO3_frq2, + gamma=CaCO3_gam2, + sigma_diag=CaCO3_sig2 * mp.Vector3(1, 1, 0), + ), +] + +CaCO3_frq1 = 1 / (0.1032906302623815 * um_scale) CaCO3_gam1 = 0 CaCO3_sig1 = 0.82427830 -CaCO3_frq2 = 1/(10.954451150103322*um_scale) +CaCO3_frq2 = 1 / (10.954451150103322 * um_scale) CaCO3_gam2 = 0 CaCO3_sig2 = 0.14429128 -CaCO3_susc_e = [mp.LorentzianSusceptibility(frequency=CaCO3_frq1, gamma=CaCO3_gam1, sigma_diag=CaCO3_sig1*mp.Vector3(0,0,1)), - mp.LorentzianSusceptibility(frequency=CaCO3_frq2, gamma=CaCO3_gam2, sigma_diag=CaCO3_sig2*mp.Vector3(0,0,1))] - -CaCO3 = mp.Medium(epsilon_diag=mp.Vector3(1.73358749,1.73358749,1.35859695), E_susceptibilities=CaCO3_susc_o+CaCO3_susc_e, valid_freq_range=CaCO3_range) - -#------------------------------------------------------------------ +CaCO3_susc_e = [ + mp.LorentzianSusceptibility( + frequency=CaCO3_frq1, + gamma=CaCO3_gam1, + sigma_diag=CaCO3_sig1 * mp.Vector3(0, 0, 1), + ), + mp.LorentzianSusceptibility( + frequency=CaCO3_frq2, + gamma=CaCO3_gam2, + sigma_diag=CaCO3_sig2 * mp.Vector3(0, 0, 1), + ), +] + +CaCO3 = mp.Medium( + epsilon_diag=mp.Vector3(1.73358749, 1.73358749, 1.35859695), + E_susceptibilities=CaCO3_susc_o + CaCO3_susc_e, + valid_freq_range=CaCO3_range, +) + +# ------------------------------------------------------------------ # silicon dioxide (SiO2) from G. Ghosh, Optics Communication, Vol. 163, pp. 95-102 (1999) # ref: https://refractiveindex.info/?shelf=main&book=SiO2&page=Ghosh-o # ref: https://refractiveindex.info/?shelf=main&book=SiO2&page=Ghosh-e @@ -1135,31 +1414,47 @@ ## NOTE: ordinary (o) axes in X and Y, extraordinary (e) axis in Z -SiO2_range = mp.FreqRange(min=um_scale/2.0531, max=um_scale/0.198) +SiO2_range = mp.FreqRange(min=um_scale / 2.0531, max=um_scale / 0.198) -SiO2_frq1 = 1/(0.10029257051247614*um_scale) +SiO2_frq1 = 1 / (0.10029257051247614 * um_scale) SiO2_gam1 = 0 SiO2_sig1 = 1.07044083 -SiO2_frq2 = 1/(10*um_scale) +SiO2_frq2 = 1 / (10 * um_scale) SiO2_gam2 = 0 SiO2_sig2 = 1.10202242 -SiO2_susc_o = [mp.LorentzianSusceptibility(frequency=SiO2_frq1, gamma=SiO2_gam1, sigma_diag=SiO2_sig1*mp.Vector3(1,1,0)), - mp.LorentzianSusceptibility(frequency=SiO2_frq2, gamma=SiO2_gam2, sigma_diag=SiO2_sig2*mp.Vector3(1,1,0))] +SiO2_susc_o = [ + mp.LorentzianSusceptibility( + frequency=SiO2_frq1, gamma=SiO2_gam1, sigma_diag=SiO2_sig1 * mp.Vector3(1, 1, 0) + ), + mp.LorentzianSusceptibility( + frequency=SiO2_frq2, gamma=SiO2_gam2, sigma_diag=SiO2_sig2 * mp.Vector3(1, 1, 0) + ), +] -SiO2_frq1 = 1/(0.10104546699382412*um_scale) +SiO2_frq1 = 1 / (0.10104546699382412 * um_scale) SiO2_gam1 = 0 SiO2_sig1 = 1.09509924 -SiO2_frq2 = 1/(10*um_scale) +SiO2_frq2 = 1 / (10 * um_scale) SiO2_gam2 = 0 SiO2_sig2 = 1.15662475 -SiO2_susc_e = [mp.LorentzianSusceptibility(frequency=SiO2_frq1, gamma=SiO2_gam1, sigma_diag=SiO2_sig1*mp.Vector3(0,0,1)), - mp.LorentzianSusceptibility(frequency=SiO2_frq2, gamma=SiO2_gam2, sigma_diag=SiO2_sig2*mp.Vector3(0,0,1))] - -SiO2_aniso = mp.Medium(epsilon_diag=mp.Vector3(1.28604141,1.28604141,1.28851804), E_susceptibilities=SiO2_susc_o+SiO2_susc_e, valid_freq_range=SiO2_range) - -#------------------------------------------------------------------ +SiO2_susc_e = [ + mp.LorentzianSusceptibility( + frequency=SiO2_frq1, gamma=SiO2_gam1, sigma_diag=SiO2_sig1 * mp.Vector3(0, 0, 1) + ), + mp.LorentzianSusceptibility( + frequency=SiO2_frq2, gamma=SiO2_gam2, sigma_diag=SiO2_sig2 * mp.Vector3(0, 0, 1) + ), +] + +SiO2_aniso = mp.Medium( + epsilon_diag=mp.Vector3(1.28604141, 1.28604141, 1.28851804), + E_susceptibilities=SiO2_susc_o + SiO2_susc_e, + valid_freq_range=SiO2_range, +) + +# ------------------------------------------------------------------ # gallium nitride (GaN), alpha phase (wurtzite), from A.S. Barker Jr. and M. Ilegems, Physical Review B, Vol. 7, pp. 743-50 (1973) # ref: https://refractiveindex.info/?shelf=main&book=GaN&page=Barker-o # ref: https://refractiveindex.info/?shelf=main&book=GaN&page=Barker-e @@ -1167,27 +1462,41 @@ ## NOTE: ordinary (o) axes in X and Y, extraordinary (e) axis in Z -GaN_range = mp.FreqRange(min=um_scale/10.0, max=um_scale/0.35) +GaN_range = mp.FreqRange(min=um_scale / 10.0, max=um_scale / 0.35) -GaN_frq1 = 1/(0.256*um_scale) +GaN_frq1 = 1 / (0.256 * um_scale) GaN_gam1 = 0 GaN_sig1 = 1.75 -GaN_frq2 = 1/(17.86*um_scale) +GaN_frq2 = 1 / (17.86 * um_scale) GaN_gam2 = 0 GaN_sig2 = 4.1 -GaN_susc_o = [mp.LorentzianSusceptibility(frequency=GaN_frq1, gamma=GaN_gam1, sigma_diag=GaN_sig1*mp.Vector3(1,1,0)), - mp.LorentzianSusceptibility(frequency=GaN_frq2, gamma=GaN_gam2, sigma_diag=GaN_sig2*mp.Vector3(1,1,0))] +GaN_susc_o = [ + mp.LorentzianSusceptibility( + frequency=GaN_frq1, gamma=GaN_gam1, sigma_diag=GaN_sig1 * mp.Vector3(1, 1, 0) + ), + mp.LorentzianSusceptibility( + frequency=GaN_frq2, gamma=GaN_gam2, sigma_diag=GaN_sig2 * mp.Vector3(1, 1, 0) + ), +] -GaN_frq1 = 1/(18.76*um_scale) +GaN_frq1 = 1 / (18.76 * um_scale) GaN_gam1 = 0 GaN_sig1 = 5.08 -GaN_susc_e = [mp.LorentzianSusceptibility(frequency=GaN_frq1, gamma=GaN_gam1, sigma_diag=GaN_sig1*mp.Vector3(0,0,1))] +GaN_susc_e = [ + mp.LorentzianSusceptibility( + frequency=GaN_frq1, gamma=GaN_gam1, sigma_diag=GaN_sig1 * mp.Vector3(0, 0, 1) + ) +] -GaN = mp.Medium(epsilon_diag=mp.Vector3(3.6,3.6,5.35), E_susceptibilities=GaN_susc_o+GaN_susc_e, valid_freq_range=GaN_range) +GaN = mp.Medium( + epsilon_diag=mp.Vector3(3.6, 3.6, 5.35), + E_susceptibilities=GaN_susc_o + GaN_susc_e, + valid_freq_range=GaN_range, +) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # aluminum nitride (AlN) from J. Pastrnak and L. Roskovcova, Physica Status Solidi, Vol. 14, K5-8 (1966) # ref: https://refractiveindex.info/?shelf=main&book=AlN&page=Pastrnak-o # ref: https://refractiveindex.info/?shelf=main&book=AlN&page=Pastrnak-e @@ -1195,31 +1504,47 @@ ## NOTE: ordinary (o) axes in X and Y, extraordinary (e) axis in Z -AlN_range = mp.FreqRange(min=um_scale/5.0, max=um_scale/0.22) +AlN_range = mp.FreqRange(min=um_scale / 5.0, max=um_scale / 0.22) -AlN_frq1 = 1/(0.1715*um_scale) +AlN_frq1 = 1 / (0.1715 * um_scale) AlN_gam1 = 0 AlN_sig1 = 1.3786 -AlN_frq2 = 1/(15.03*um_scale) +AlN_frq2 = 1 / (15.03 * um_scale) AlN_gam2 = 0 AlN_sig2 = 3.861 -AlN_susc_o = [mp.LorentzianSusceptibility(frequency=AlN_frq1, gamma=AlN_gam1, sigma_diag=AlN_sig1*mp.Vector3(1,1,0)), - mp.LorentzianSusceptibility(frequency=AlN_frq2, gamma=AlN_gam2, sigma_diag=AlN_sig2*mp.Vector3(1,1,0))] +AlN_susc_o = [ + mp.LorentzianSusceptibility( + frequency=AlN_frq1, gamma=AlN_gam1, sigma_diag=AlN_sig1 * mp.Vector3(1, 1, 0) + ), + mp.LorentzianSusceptibility( + frequency=AlN_frq2, gamma=AlN_gam2, sigma_diag=AlN_sig2 * mp.Vector3(1, 1, 0) + ), +] -AlN_frq1 = 1/(0.1746*um_scale) +AlN_frq1 = 1 / (0.1746 * um_scale) AlN_gam1 = 0 AlN_sig1 = 1.6173 -AlN_frq2 = 1/(15.03*um_scale) +AlN_frq2 = 1 / (15.03 * um_scale) AlN_gam2 = 0 AlN_sig2 = 4.139 -AlN_susc_e = [mp.LorentzianSusceptibility(frequency=AlN_frq1, gamma=AlN_gam1, sigma_diag=AlN_sig1*mp.Vector3(0,0,1)), - mp.LorentzianSusceptibility(frequency=AlN_frq2, gamma=AlN_gam2, sigma_diag=AlN_sig2*mp.Vector3(0,0,1))] - -AlN_aniso = mp.Medium(epsilon_diag=mp.Vector3(3.1399,3.1399,3.0729), E_susceptibilities=AlN_susc_o+AlN_susc_e, valid_freq_range=AlN_range) - -#------------------------------------------------------------------ +AlN_susc_e = [ + mp.LorentzianSusceptibility( + frequency=AlN_frq1, gamma=AlN_gam1, sigma_diag=AlN_sig1 * mp.Vector3(0, 0, 1) + ), + mp.LorentzianSusceptibility( + frequency=AlN_frq2, gamma=AlN_gam2, sigma_diag=AlN_sig2 * mp.Vector3(0, 0, 1) + ), +] + +AlN_aniso = mp.Medium( + epsilon_diag=mp.Vector3(3.1399, 3.1399, 3.0729), + E_susceptibilities=AlN_susc_o + AlN_susc_e, + valid_freq_range=AlN_range, +) + +# ------------------------------------------------------------------ # alumina/sapphire (Al2O3) from I.H. Malitson and M.J. Dodge, J. Optical Society of America, Vol. 62, pp. 1405 (1972) # ref: https://refractiveindex.info/?shelf=main&book=Al2O3&page=Malitson-o # ref: https://refractiveindex.info/?shelf=main&book=Al2O3&page=Malitson-e @@ -1227,87 +1552,127 @@ ## NOTE: ordinary (o) axes in X and Y, extraordinary (e) axis in Z -Al2O3_range = mp.FreqRange(min=um_scale/5.0, max=um_scale/0.2) +Al2O3_range = mp.FreqRange(min=um_scale / 5.0, max=um_scale / 0.2) -Al2O3_frq1 = 1/(0.0726631*um_scale) +Al2O3_frq1 = 1 / (0.0726631 * um_scale) Al2O3_gam1 = 0 Al2O3_sig1 = 1.4313493 -Al2O3_frq2 = 1/(0.1193242*um_scale) +Al2O3_frq2 = 1 / (0.1193242 * um_scale) Al2O3_gam2 = 0 Al2O3_sig2 = 0.65054713 -Al2O3_frq3 = 1/(18.02825*um_scale) +Al2O3_frq3 = 1 / (18.02825 * um_scale) Al2O3_gam3 = 0 Al2O3_sig3 = 5.3414021 -Al2O3_susc_o = [mp.LorentzianSusceptibility(frequency=Al2O3_frq1, gamma=Al2O3_gam1, sigma_diag=Al2O3_sig1*mp.Vector3(1,1,0)), - mp.LorentzianSusceptibility(frequency=Al2O3_frq2, gamma=Al2O3_gam2, sigma_diag=Al2O3_sig2*mp.Vector3(1,1,0)), - mp.LorentzianSusceptibility(frequency=Al2O3_frq3, gamma=Al2O3_gam3, sigma_diag=Al2O3_sig3*mp.Vector3(1,1,0))] - -Al2O3_frq1 = 1/(0.0740288*um_scale) +Al2O3_susc_o = [ + mp.LorentzianSusceptibility( + frequency=Al2O3_frq1, + gamma=Al2O3_gam1, + sigma_diag=Al2O3_sig1 * mp.Vector3(1, 1, 0), + ), + mp.LorentzianSusceptibility( + frequency=Al2O3_frq2, + gamma=Al2O3_gam2, + sigma_diag=Al2O3_sig2 * mp.Vector3(1, 1, 0), + ), + mp.LorentzianSusceptibility( + frequency=Al2O3_frq3, + gamma=Al2O3_gam3, + sigma_diag=Al2O3_sig3 * mp.Vector3(1, 1, 0), + ), +] + +Al2O3_frq1 = 1 / (0.0740288 * um_scale) Al2O3_gam1 = 0 Al2O3_sig1 = 1.5039759 -Al2O3_frq2 = 1/(0.1216529*um_scale) +Al2O3_frq2 = 1 / (0.1216529 * um_scale) Al2O3_gam2 = 0 Al2O3_sig2 = 0.55069141 -Al2O3_frq3 = 1/(20.072248*um_scale) +Al2O3_frq3 = 1 / (20.072248 * um_scale) Al2O3_gam3 = 0 Al2O3_sig3 = 6.5927379 -Al2O3_susc_e = [mp.LorentzianSusceptibility(frequency=Al2O3_frq1, gamma=Al2O3_gam1, sigma_diag=Al2O3_sig1*mp.Vector3(0,0,1)), - mp.LorentzianSusceptibility(frequency=Al2O3_frq2, gamma=Al2O3_gam2, sigma_diag=Al2O3_sig2*mp.Vector3(0,0,1)), - mp.LorentzianSusceptibility(frequency=Al2O3_frq3, gamma=Al2O3_gam3, sigma_diag=Al2O3_sig3*mp.Vector3(0,0,1))] - -Al2O3_aniso = mp.Medium(epsilon=1, E_susceptibilities=Al2O3_susc_o+Al2O3_susc_e, valid_freq_range=Al2O3_range) - -#------------------------------------------------------------------ +Al2O3_susc_e = [ + mp.LorentzianSusceptibility( + frequency=Al2O3_frq1, + gamma=Al2O3_gam1, + sigma_diag=Al2O3_sig1 * mp.Vector3(0, 0, 1), + ), + mp.LorentzianSusceptibility( + frequency=Al2O3_frq2, + gamma=Al2O3_gam2, + sigma_diag=Al2O3_sig2 * mp.Vector3(0, 0, 1), + ), + mp.LorentzianSusceptibility( + frequency=Al2O3_frq3, + gamma=Al2O3_gam3, + sigma_diag=Al2O3_sig3 * mp.Vector3(0, 0, 1), + ), +] + +Al2O3_aniso = mp.Medium( + epsilon=1, + E_susceptibilities=Al2O3_susc_o + Al2O3_susc_e, + valid_freq_range=Al2O3_range, +) + +# ------------------------------------------------------------------ # yttrium oxide (Y2O3) from Y. Nigara, Japanese J. of Applied Physics, Vol. 7, pp. 404-8 (1968) # ref: https://refractiveindex.info/?shelf=main&book=Y2O3&page=Nigara # wavelength range: 0.25 - 9.6 μm -Y2O3_range = mp.FreqRange(min=um_scale/9.6, max=um_scale/0.25) +Y2O3_range = mp.FreqRange(min=um_scale / 9.6, max=um_scale / 0.25) -Y2O3_frq1 = 1/(0.1387*um_scale) +Y2O3_frq1 = 1 / (0.1387 * um_scale) Y2O3_gam1 = 0 Y2O3_sig1 = 2.578 -Y2O3_frq2 = 1/(22.936*um_scale) +Y2O3_frq2 = 1 / (22.936 * um_scale) Y2O3_gam2 = 0 Y2O3_sig2 = 3.935 -Y2O3_susc = [mp.LorentzianSusceptibility(frequency=Y2O3_frq1, gamma=Y2O3_gam1, sigma=Y2O3_sig1), - mp.LorentzianSusceptibility(frequency=Y2O3_frq2, gamma=Y2O3_gam2, sigma=Y2O3_sig2)] +Y2O3_susc = [ + mp.LorentzianSusceptibility(frequency=Y2O3_frq1, gamma=Y2O3_gam1, sigma=Y2O3_sig1), + mp.LorentzianSusceptibility(frequency=Y2O3_frq2, gamma=Y2O3_gam2, sigma=Y2O3_sig2), +] Y2O3 = mp.Medium(epsilon=1.0, E_susceptibilities=Y2O3_susc, valid_freq_range=Y2O3_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # undoped yttrium aluminum garnet (YAG) from D.E. Zelmon et al., Applied Optics, Vol. 37, 4933-5 (1998) # ref: https://refractiveindex.info/?shelf=main&book=Y3Al5O12&page=Zelmon # wavelength range: 0.4 - 5.0 μm -YAG_range = mp.FreqRange(min=um_scale/5.0, max=um_scale/0.4) +YAG_range = mp.FreqRange(min=um_scale / 5.0, max=um_scale / 0.4) -YAG_frq1 = 1/(0.1088577052853862*um_scale) +YAG_frq1 = 1 / (0.1088577052853862 * um_scale) YAG_gam1 = 0 YAG_sig1 = 2.28200 -YAG_frq2 = 1/(16.814695953242804*um_scale) +YAG_frq2 = 1 / (16.814695953242804 * um_scale) YAG_gam2 = 0 YAG_sig2 = 3.27644 -YAG_susc = [mp.LorentzianSusceptibility(frequency=YAG_frq1, gamma=YAG_gam1, sigma=YAG_sig1), - mp.LorentzianSusceptibility(frequency=YAG_frq2, gamma=YAG_gam2, sigma=YAG_sig2)] +YAG_susc = [ + mp.LorentzianSusceptibility(frequency=YAG_frq1, gamma=YAG_gam1, sigma=YAG_sig1), + mp.LorentzianSusceptibility(frequency=YAG_frq2, gamma=YAG_gam2, sigma=YAG_sig2), +] YAG = mp.Medium(epsilon=1.0, E_susceptibilities=YAG_susc, valid_freq_range=YAG_range) -#------------------------------------------------------------------ +# ------------------------------------------------------------------ # cadmium telluride (CdTe) from D.T.F. Marple, J. Applied Physics, Vol. 35, pp. 539-42 (1964) # ref: https://refractiveindex.info/?shelf=main&book=CdTe&page=Marple # wavelength range: 0.86 - 2.5 μm -CdTe_range = mp.FreqRange(min=um_scale/2.5, max=um_scale/0.86) +CdTe_range = mp.FreqRange(min=um_scale / 2.5, max=um_scale / 0.86) -CdTe_frq1 = 1/(0.6049793384901669*um_scale) +CdTe_frq1 = 1 / (0.6049793384901669 * um_scale) CdTe_gam1 = 0 CdTe_sig1 = 1.53 -CdTe_susc = [mp.LorentzianSusceptibility(frequency=CdTe_frq1, gamma=CdTe_gam1, sigma=CdTe_sig1)] +CdTe_susc = [ + mp.LorentzianSusceptibility(frequency=CdTe_frq1, gamma=CdTe_gam1, sigma=CdTe_sig1) +] -CdTe = mp.Medium(epsilon=5.68, E_susceptibilities=CdTe_susc, valid_freq_range=CdTe_range) +CdTe = mp.Medium( + epsilon=5.68, E_susceptibilities=CdTe_susc, valid_freq_range=CdTe_range +) diff --git a/python/meep-python.hpp b/python/meep-python.hpp index 0e6c6e278..ab8b952af 100644 --- a/python/meep-python.hpp +++ b/python/meep-python.hpp @@ -1,7 +1,7 @@ namespace meep { #ifndef SWIG_PYTHON_THREAD_SCOPED_BLOCK -#define SWIG_PYTHON_THREAD_SCOPED_BLOCK SWIG_PYTHON_THREAD_BEGIN_BLOCK +#define SWIG_PYTHON_THREAD_SCOPED_BLOCK SWIG_PYTHON_THREAD_BEGIN_BLOCK #endif // like custom_src_time, but using Python function object, with proper reference counting diff --git a/python/meep.i b/python/meep.i index c629e67a8..66a4703cf 100644 --- a/python/meep.i +++ b/python/meep.i @@ -843,12 +843,12 @@ meep::volume_list *make_volume_list(const meep::volume &v, int c, //-------------------------------------------------- %inline %{ -void _get_gradient(PyObject *grad, double scalegrad, +void _get_gradient(PyObject *grad, double scalegrad, meep::dft_fields *fields_a_0, meep::dft_fields *fields_a_1, meep::dft_fields *fields_a_2, meep::dft_fields *fields_f_0, meep::dft_fields *fields_f_1, meep::dft_fields *fields_f_2, meep::grid_volume *grid_volume, meep::volume *where, PyObject *frequencies, meep_geom::geom_epsilon *geps, double fd_step) { - + // clean the gradient array PyArrayObject *pao_grad = (PyArrayObject *)grad; if (!PyArray_Check(pao_grad)) meep::abort("grad parameter must be numpy array."); @@ -873,7 +873,7 @@ void _get_gradient(PyObject *grad, double scalegrad, // calculate the gradient meep_geom::material_grids_addgradient(grad_c,ng,nf,adjoint_fields,forward_fields,frequencies_c,scalegrad,*grid_volume,*where,geps,fd_step); - + } %} diff --git a/python/mpb_data.py b/python/mpb_data.py index 87ffadd92..608a5f0ee 100644 --- a/python/mpb_data.py +++ b/python/mpb_data.py @@ -1,28 +1,31 @@ -# -*- coding: utf-8 -*- import math + import numpy as np + import meep as mp -from . import map_data -from . import MPBArray +from . import MPBArray, map_data -class MPBData(object): + +class MPBData: TWOPI = 6.2831853071795864769252867665590057683943388 - def __init__(self, - lattice=None, - kpoint=None, - rectify=False, - x=0, - y=0, - z=0, - periods=0, - resolution=0, - phase_angle=0, - pick_nearest=False, - ve=None, - verbose=False): + def __init__( + self, + lattice=None, + kpoint=None, + rectify=False, + x=0, + y=0, + z=0, + periods=0, + resolution=0, + phase_angle=0, + pick_nearest=False, + ve=None, + verbose=False, + ): self.lattice = lattice self.kpoint = kpoint @@ -31,11 +34,7 @@ def __init__(self, if periods: self.multiply_size = [periods, periods, periods] else: - self.multiply_size = [ - x if x else 1, - y if y else 1, - z if z else 1 - ] + self.multiply_size = [x or 1, y or 1, z or 1] self.resolution = resolution self.phase_angle = phase_angle @@ -52,8 +51,10 @@ def __init__(self, self.verbose = verbose self.scaleby = complex(1, 0) - self.phase = complex(math.cos(self.TWOPI * self.phase_angle / 360.0), - math.sin(self.TWOPI * self.phase_angle / 360.0)) + self.phase = complex( + math.cos(self.TWOPI * self.phase_angle / 360.0), + math.sin(self.TWOPI * self.phase_angle / 360.0), + ) self.scaleby *= self.phase def handle_dataset(self, in_arr): @@ -61,7 +62,7 @@ def handle_dataset(self, in_arr): out_dims = [1, 1, 1] rank = len(in_arr.shape) num_ones = 3 - rank - in_dims = [x for x in in_arr.shape] + [1] * num_ones + in_dims = list(in_arr.shape) + [1] * num_ones if np.iscomplexobj(in_arr): in_arr_re = np.real(in_arr) @@ -91,7 +92,7 @@ def handle_dataset(self, in_arr): N *= out_dims[i] if self.verbose: - print("Output data {}x{}x{}".format(out_dims[0], out_dims[1], out_dims[2])) + print(f"Output data {out_dims[0]}x{out_dims[1]}x{out_dims[2]}") out_arr_re = np.zeros(int(N)) @@ -101,16 +102,24 @@ def handle_dataset(self, in_arr): out_arr_im = np.array([]) flat_in_arr_re = in_arr_re.ravel() - flat_in_arr_im = in_arr_im.ravel() if isinstance(in_arr_im, np.ndarray) else np.array([]) - - if self.kpoint: - kvector = [self.kpoint.x, self.kpoint.y, self.kpoint.z] - else: - kvector = [] + flat_in_arr_im = ( + in_arr_im.ravel() if isinstance(in_arr_im, np.ndarray) else np.array([]) + ) - map_data(flat_in_arr_re, flat_in_arr_im, np.array(in_dims, dtype=np.intc), - out_arr_re, out_arr_im, np.array(out_dims, dtype=np.intc), self.coord_map, - kvector, self.pick_nearest, self.verbose, False) + kvector = [self.kpoint.x, self.kpoint.y, self.kpoint.z] if self.kpoint else [] + map_data( + flat_in_arr_re, + flat_in_arr_im, + np.array(in_dims, dtype=np.intc), + out_arr_re, + out_arr_im, + np.array(out_dims, dtype=np.intc), + self.coord_map, + kvector, + self.pick_nearest, + self.verbose, + False, + ) if np.iscomplexobj(in_arr): # multiply * scaleby for complex data @@ -131,13 +140,13 @@ def handle_cvector_dataset(self, in_arr, multiply_bloch_phase): d_in = [[in_x_re, in_x_im], [in_y_re, in_y_im], [in_z_re, in_z_im]] in_dims = [in_arr.shape[0], in_arr.shape[1], 1] - rank = 2 - if self.verbose: print("Found complex vector dataset...") if self.verbose: fmt = "Input data is rank {}, size {}x{}x{}." + rank = 2 + print(fmt.format(rank, in_dims[0], in_dims[1], in_dims[2])) # rotate vector field according to cart_map @@ -145,9 +154,15 @@ def handle_cvector_dataset(self, in_arr, multiply_bloch_phase): fmt1 = "Rotating vectors by matrix [ {:.10g}, {:.10g}, {:.10g}" fmt2 = " {:.10g}, {:.10g}, {:.10g}" fmt3 = " {:.10g}, {:.10g}, {:.10g} ]" - print(fmt1.format(self.cart_map.c1.x, self.cart_map.c2.x, self.cart_map.c3.x)) - print(fmt2.format(self.cart_map.c1.y, self.cart_map.c2.y, self.cart_map.c3.y)) - print(fmt3.format(self.cart_map.c1.z, self.cart_map.c2.z, self.cart_map.c3.z)) + print( + fmt1.format(self.cart_map.c1.x, self.cart_map.c2.x, self.cart_map.c3.x) + ) + print( + fmt2.format(self.cart_map.c1.y, self.cart_map.c2.y, self.cart_map.c3.y) + ) + print( + fmt3.format(self.cart_map.c1.z, self.cart_map.c2.z, self.cart_map.c3.z) + ) N = in_dims[0] * in_dims[1] for ri in range(2): @@ -179,19 +194,25 @@ def handle_cvector_dataset(self, in_arr, multiply_bloch_phase): fmt = "Output data {}x{}x{}." print(fmt.format(out_dims[0], out_dims[1], out_dims[2])) - if self.kpoint: - kvector = [self.kpoint.x, self.kpoint.y, self.kpoint.z] - else: - kvector = [] - + kvector = [self.kpoint.x, self.kpoint.y, self.kpoint.z] if self.kpoint else [] converted = [] for dim in range(3): out_arr_re = np.zeros(int(N)) out_arr_im = np.zeros(int(N)) - map_data(d_in[dim][0].ravel(), d_in[dim][1].ravel(), np.array(in_dims, dtype=np.intc), - out_arr_re, out_arr_im, np.array(out_dims, dtype=np.intc), self.coord_map, - kvector, self.pick_nearest, self.verbose, multiply_bloch_phase) + map_data( + d_in[dim][0].ravel(), + d_in[dim][1].ravel(), + np.array(in_dims, dtype=np.intc), + out_arr_re, + out_arr_im, + np.array(out_dims, dtype=np.intc), + self.coord_map, + kvector, + self.pick_nearest, + self.verbose, + multiply_bloch_phase, + ) # multiply * scaleby complex_out = np.vectorize(complex)(out_arr_re, out_arr_im) @@ -208,15 +229,13 @@ def handle_cvector_dataset(self, in_arr, multiply_bloch_phase): def init_output_lattice(self): cart_map = mp.Matrix( - mp.Vector3(1, 0, 0), - mp.Vector3(0, 1, 0), - mp.Vector3(0, 0, 1) + mp.Vector3(1, 0, 0), mp.Vector3(0, 1, 0), mp.Vector3(0, 0, 1) ) Rin = mp.Matrix( mp.Vector3(*self.lattice[0]), mp.Vector3(*self.lattice[1]), - mp.Vector3(*self.lattice[2]) + mp.Vector3(*self.lattice[2]), ) if self.verbose: @@ -225,9 +244,19 @@ def init_output_lattice(self): fmt = "Read Bloch wavevector ({:.6g}, {:.6g}, {:.6g})" print(fmt.format(self.kpoint.x, self.kpoint.y, self.kpoint.z)) fmt = "Input lattice = ({:.6g}, {:.6g}, {:.6g}), ({:.6g}, {:.6g}, {:.6g}), ({:.6g}, {:.6g}, {:.6g})" - print(fmt.format(Rin.c1.x, Rin.c1.y, Rin.c1.z, - Rin.c2.x, Rin.c2.y, Rin.c2.z, - Rin.c3.x, Rin.c3.y, Rin.c3.z)) + print( + fmt.format( + Rin.c1.x, + Rin.c1.y, + Rin.c1.z, + Rin.c2.x, + Rin.c2.y, + Rin.c2.z, + Rin.c3.x, + Rin.c3.y, + Rin.c3.z, + ) + ) Rout = mp.Matrix(Rin.c1, Rin.c2, Rin.c3) @@ -240,11 +269,7 @@ def init_output_lattice(self): # that our first vector (in the direction of ve) smoothly # interpolates between the original lattice vectors. - if self.have_ve: - ve = self.ve.unit() - else: - ve = Rout.c1.unit() - + ve = self.ve.unit() if self.have_ve else Rout.c1.unit() # First, compute c1 in the direction of ve by smoothly # interpolating the old c1/c2/c3 (formula is slightly tricky) V = Rout.c1.cross(Rout.c2).dot(Rout.c3) @@ -255,8 +280,9 @@ def init_output_lattice(self): # Now, orthogonalize c2 and c3 Rout.c2 = Rout.c2 - ve.scale(ve.dot(Rout.c2)) Rout.c3 = Rout.c3 - ve.scale(ve.dot(Rout.c3)) - Rout.c3 = Rout.c3 - Rout.c2.scale(Rout.c2.dot(Rout.c3) / - Rout.c2.dot(Rout.c2)) + Rout.c3 = Rout.c3 - Rout.c2.scale( + Rout.c2.dot(Rout.c3) / Rout.c2.dot(Rout.c2) + ) cart_map.c1 = Rout.c1.unit() cart_map.c2 = Rout.c2.unit() @@ -269,9 +295,19 @@ def init_output_lattice(self): if self.verbose: fmt = "Output lattice = ({:.6g}, {:.6g}, {:.6g}), ({:.6g}, {:.6g}, {:.6g}), ({:.6g}, {:.6g}, {:.6g})" - print(fmt.format(Rout.c1.x, Rout.c1.y, Rout.c1.z, - Rout.c2.x, Rout.c2.y, Rout.c2.z, - Rout.c3.x, Rout.c3.y, Rout.c3.z)) + print( + fmt.format( + Rout.c1.x, + Rout.c1.y, + Rout.c1.z, + Rout.c2.x, + Rout.c2.y, + Rout.c2.z, + Rout.c3.x, + Rout.c3.y, + Rout.c3.z, + ) + ) self.coord_map = Rin.inverse() * Rout self.Rout = Rout @@ -283,11 +319,13 @@ def convert(self, arr, kpoint=None): self.kpoint = arr.kpoint if self.lattice is None: - err = ("Couldn't find 'lattice.' You must do one of the following:\n" + - " 1. Pass the ModeSolver lattice to the MPBData constructor\n" + - " i.e., MPBData(lattice=ms.get_lattice())\n" + - " 2. Create an MPBArray to pass to MPBData.convert()\n" + - " i.e., mpb_arr = MPBArray(arr, ms.get_lattice(), ... ); mpb_data.convert(mpb_arr))") + err = ( + "Couldn't find 'lattice.' You must do one of the following:\n" + + " 1. Pass the ModeSolver lattice to the MPBData constructor\n" + + " i.e., MPBData(lattice=ms.get_lattice())\n" + + " 2. Create an MPBArray to pass to MPBData.convert()\n" + + " i.e., mpb_arr = MPBArray(arr, ms.get_lattice(), ... ); mpb_data.convert(mpb_arr))" + ) raise ValueError(err) if kpoint: diff --git a/python/simulation.py b/python/simulation.py index a3ba603d6..0a4453c0a 100644 --- a/python/simulation.py +++ b/python/simulation.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from typing import Callable, List, Tuple, Union, Optional - import functools import math import numbers @@ -10,21 +7,27 @@ import subprocess import sys import warnings -from collections import namedtuple -from collections import OrderedDict +from collections import OrderedDict, namedtuple +from typing import Callable, List, Optional, Tuple, Union try: from collections.abc import Sequence except ImportError: - from collections import Sequence + from collections.abc import Sequence +import meep.visualization as vis import numpy as np +from meep.geom import GeometricObject, Medium, Vector3, init_do_averaging +from meep.source import ( + EigenModeSource, + GaussianBeamSource, + IndexedSource, + Source, + check_positive, +) +from meep.verbosity_mgr import Verbosity import meep as mp -from meep.geom import Vector3, init_do_averaging, GeometricObject, Medium -from meep.source import Source, EigenModeSource, GaussianBeamSource, IndexedSource, check_positive -import meep.visualization as vis -from meep.verbosity_mgr import Verbosity try: basestring @@ -32,13 +35,14 @@ basestring = str try: - from ipywidgets import FloatProgress from IPython.display import display + from ipywidgets import FloatProgress + do_progress = True except ImportError: do_progress = False -verbosity = Verbosity(mp.cvar, 'meep', 1) +verbosity = Verbosity(mp.cvar, "meep", 1) mp.setup() @@ -48,27 +52,40 @@ mp.set_ctl_printf_callback(mp.py_master_printf_wrap) mp.set_mpb_printf_callback(mp.py_master_printf_wrap) -EigCoeffsResult = namedtuple('EigCoeffsResult', ['alpha', 'vgrp', 'kpoints', 'kdom', 'cscale']) -FluxData = namedtuple('FluxData', ['E', 'H']) -ForceData = namedtuple('ForceData', ['offdiag1', 'offdiag2', 'diag']) -NearToFarData = namedtuple('NearToFarData', ['F']) +EigCoeffsResult = namedtuple( + "EigCoeffsResult", ["alpha", "vgrp", "kpoints", "kdom", "cscale"] +) +FluxData = namedtuple("FluxData", ["E", "H"]) +ForceData = namedtuple("ForceData", ["offdiag1", "offdiag2", "diag"]) +NearToFarData = namedtuple("NearToFarData", ["F"]) + def fix_dft_args(args, i): - if len(args) > i+2 and isinstance(args[i],(int,float)) and isinstance(args[i+1],(int,float)) and isinstance(args[i+2],int): + if ( + len(args) > i + 2 + and isinstance(args[i], (int, float)) + and isinstance(args[i + 1], (int, float)) + and isinstance(args[i + 2], int) + ): fcen = args[i] - df = args[i+1] - nfreq = args[i+2] - freq = [fcen] if nfreq == 1 else np.linspace(fcen-0.5*df,fcen+0.5*df,nfreq) - return args[:i] + (freq,) + args[i+3:] + df = args[i + 1] + nfreq = args[i + 2] + freq = ( + [fcen] + if nfreq == 1 + else np.linspace(fcen - 0.5 * df, fcen + 0.5 * df, nfreq) + ) + return args[:i] + (freq,) + args[i + 3 :] elif not isinstance(args[i], (np.ndarray, list)): - raise TypeError("add_dft functions only accept fcen,df,nfreq (3 numbers) or freq (array/list)") + raise TypeError( + "add_dft functions only accept fcen,df,nfreq (3 numbers) or freq (array/list)" + ) else: return args + def get_num_args(func): - if isinstance(func, Harminv): - return 2 - return func.__code__.co_argcount + return 2 if isinstance(func, Harminv) else func.__code__.co_argcount def vec(*args): @@ -95,16 +112,16 @@ def py_v3_to_vec(dims, iterable, is_cylindrical=False): elif dims == 2: if is_cylindrical: return mp.veccyl(v3.x, v3.z) - else: - v = mp.vec(v3.x, v3.y) - v.set_direction(mp.Z, v3.z) # for special_kz handling - return v + v = mp.vec(v3.x, v3.y) + v.set_direction(mp.Z, v3.z) # for special_kz handling + return v elif dims == 3: return mp.vec(v3.x, v3.y, v3.z) else: - raise ValueError("Invalid dimensions in Volume: {}".format(dims)) + raise ValueError(f"Invalid dimensions in Volume: {dims}") + -def bands_to_diffractedplanewave(where,bands): +def bands_to_diffractedplanewave(where, bands): if bands.axis is None: if where.in_direction(mp.X) != 0: axis = np.array([1, 0, 0], dtype=np.float64) @@ -113,8 +130,10 @@ def bands_to_diffractedplanewave(where,bands): elif where.in_direction(mp.Z) != 0: axis = np.array([0, 0, 1], dtype=np.float64) else: - raise ValueError("axis parameter of DiffractedPlanewave must be a non-zero Vector3") - elif isinstance(bands.axis,mp.Vector3): + raise ValueError( + "axis parameter of DiffractedPlanewave must be a non-zero Vector3" + ) + elif isinstance(bands.axis, mp.Vector3): axis = np.array([bands.axis.x, bands.axis.y, bands.axis.z], dtype=np.float64) else: raise TypeError("axis parameter of DiffractedPlanewave must be a Vector3") @@ -122,23 +141,21 @@ def bands_to_diffractedplanewave(where,bands): np.array(bands.g, dtype=np.intc), axis, bands.s * 1.0, - bands.p * 1.0 + bands.p * 1.0, ] return mp.diffractedplanewave(*diffractedplanewave_args) -class DiffractedPlanewave(object): + +class DiffractedPlanewave: """ For mode decomposition or eigenmode source, specify a diffracted planewave in homogeneous media. Should be passed as the `bands` argument of `get_eigenmode_coefficients`, `band_num` of `get_eigenmode`, or `eig_band` of `EigenModeSource`. """ - def __init__(self, - g=None, - axis=None, - s=None, - p=None): + + def __init__(self, g=None, axis=None, s=None, p=None): """ Construct a `DiffractedPlanewave`. - + **`g` [ list of 3 `integer`s ]** — The diffraction order $(m_x,m_y,m_z)$ corresponding to the wavevector $(k_x+2\\pi m_x/\\Lambda_x,k_y+2\\pi m_y/\\Lambda_y,k_z+2\\pi m_z/\\Lambda_z)$. The diffraction order $m_{x,y,z}$ should be non-zero only in the $d$-1 periodic directions of a $d$ dimensional cell of size $(\Lambda_x,\Lambda_y,\Lambda_z)$ (e.g., a plane in 3d) in which the mode monitor or source extends the entire length of the cell. + + **`g` [ list of 3 `integer`s ]** — The diffraction order $(m_x,m_y,m_z)$ corresponding to the wavevector $(k_x+2\\pi m_x/\\Lambda_x,k_y+2\\pi m_y/\\Lambda_y,k_z+2\\pi m_z/\\Lambda_z)$. The diffraction order $m_{x,y,z}$ should be non-zero only in the $d$-1 periodic directions of a $d$ dimensional cell of size $(\\Lambda_x,\\Lambda_y,\\Lambda_z)$ (e.g., a plane in 3d) in which the mode monitor or source extends the entire length of the cell. + **`axis` [ `Vector3` ]** — The plane of incidence for each planewave (used to define the $\\mathcal{S}$ and $\\mathcal{P}$ polarizations below) is defined to be the plane that contains the `axis` vector and the planewave's wavevector. If `None`, `axis` defaults to the first direction that lies in the plane of the monitor or source (e.g., $y$ direction for a $yz$ plane in 3d, either $x$ or $y$ in 2d). @@ -167,10 +184,12 @@ def s(self): def p(self): return self._p + DefaultPMLProfile = lambda u: u * u Vector3Type = Union[Vector3, Tuple[float, ...]] -class PML(object): + +class PML: """ This class is used for specifying the PML absorbing boundary layers around the cell, if any, via the `boundary_layers` input variable. See also [Perfectly Matched @@ -180,12 +199,16 @@ class PML(object): sets up one or more PML layers around the boundaries according to the following properties. """ - def __init__(self, thickness, - direction=mp.ALL, - side=mp.ALL, - R_asymptotic=1e-15, - mean_stretch=1.0, - pml_profile=DefaultPMLProfile): + + def __init__( + self, + thickness, + direction=mp.ALL, + side=mp.ALL, + R_asymptotic=1e-15, + mean_stretch=1.0, + pml_profile=DefaultPMLProfile, + ): """ + **`thickness` [`number`]** — The spatial thickness of the PML layer which extends from the boundary towards the *inside* of the cell. The thinner it is, @@ -236,7 +259,9 @@ def __init__(self, thickness, elif direction == mp.ALL: self.swigobj = mp.pml(thickness, side, R_asymptotic, mean_stretch) else: - self.swigobj = mp.pml(thickness, direction, side, R_asymptotic, mean_stretch) + self.swigobj = mp.pml( + thickness, direction, side, R_asymptotic, mean_stretch + ) @property def R_asymptotic(self): @@ -244,7 +269,7 @@ def R_asymptotic(self): @R_asymptotic.setter def R_asymptotic(self, val): - self._R_asymptotic = check_positive('PML.R_asymptotic', val) + self._R_asymptotic = check_positive("PML.R_asymptotic", val) @property def mean_stretch(self): @@ -255,7 +280,7 @@ def mean_stretch(self, val): if val >= 1: self._mean_stretch = val else: - raise ValueError("PML.mean_stretch must be >= 1. Got {}".format(val)) + raise ValueError(f"PML.mean_stretch must be >= 1. Got {val}") class Absorber(PML): @@ -287,8 +312,7 @@ class Absorber(PML): """ - -class Symmetry(object): +class Symmetry: """ This class is used for the `symmetries` input variable to specify symmetries which must preserve both the structure *and* the sources. Any number of symmetries can be @@ -309,6 +333,7 @@ class Symmetry(object): **`Rotate4`** — A 90° (fourfold) rotational symmetry (a.k.a. $C_4$). `direction` is the axis of the rotation. """ + def __init__(self, direction, phase=1): """ Construct a `Symmetry`. @@ -349,11 +374,10 @@ class Mirror(Symmetry): class Identity(Symmetry): - """ - """ + """ """ -class Volume(object): +class Volume: """ Many Meep functions require you to specify a volume in space, corresponding to the C++ type `meep::volume`. This class creates such a volume object, given the `center` and @@ -365,7 +389,14 @@ class Volume(object): `size` will automatically be computed from this list. """ - def __init__(self, center=Vector3(), size=Vector3(), dims=2, is_cylindrical=False, vertices=[]): + def __init__( + self, + center=Vector3(), + size=Vector3(), + dims=2, + is_cylindrical=False, + vertices=[], + ): """ Construct a Volume. """ @@ -374,16 +405,16 @@ def __init__(self, center=Vector3(), size=Vector3(), dims=2, is_cylindrical=Fals self.size = Vector3(*size) else: vertices = np.array([np.array(i) for i in vertices]) - self.center = Vector3(*np.mean(vertices,axis=0)) - x_list = np.unique(vertices[:,0]) - y_list = np.unique(vertices[:,1]) - z_list = np.unique(vertices[:,2]) + self.center = Vector3(*np.mean(vertices, axis=0)) + x_list = np.unique(vertices[:, 0]) + y_list = np.unique(vertices[:, 1]) + z_list = np.unique(vertices[:, 2]) x_size = 0 if x_list.size == 1 else np.abs(np.diff(x_list)[0]) y_size = 0 if y_list.size == 1 else np.abs(np.diff(y_list)[0]) z_size = 0 if z_list.size == 1 else np.abs(np.diff(z_list)[0]) - self.size = Vector3(x_size,y_size,z_size) + self.size = Vector3(x_size, y_size, z_size) self.dims = dims @@ -396,49 +427,65 @@ def __init__(self, center=Vector3(), size=Vector3(), dims=2, is_cylindrical=Fals self.swigobj = mp.volume(vec1, vec2) def get_vertices(self): - xmin = self.center.x - self.size.x/2 - xmax = self.center.x + self.size.x/2 - ymin = self.center.y - self.size.y/2 - ymax = self.center.y + self.size.y/2 - zmin = self.center.z - self.size.z/2 - zmax = self.center.z + self.size.z/2 + xmin = self.center.x - self.size.x / 2 + xmax = self.center.x + self.size.x / 2 + ymin = self.center.y - self.size.y / 2 + ymax = self.center.y + self.size.y / 2 + zmin = self.center.z - self.size.z / 2 + zmax = self.center.z + self.size.z / 2 # Iterate over and remove duplicates for collapsed dimensions (i.e. min=max)) - return [Vector3(x,y,z) for x in list(set([xmin,xmax])) for y in list(set([ymin,ymax])) for z in list(set([zmin,zmax]))] - + return [ + Vector3(x, y, z) + for x in list({xmin, xmax}) + for y in list({ymin, ymax}) + for z in list({zmin, zmax}) + ] def get_edges(self): vertices = self.get_vertices() edges = [] # Useful for importing weird geometries and the sizes are slightly off - def nearly_equal(a,b,sig_fig=10): - return a==b or (abs(a-b) < 10**(-sig_fig)) + def nearly_equal(a, b, sig_fig=10): + return a == b or (abs(a - b) < 10 ** (-sig_fig)) for iter1 in range(len(vertices)): - for iter2 in range(iter1+1,len(vertices)): - if ((iter1 != iter2) and - nearly_equal((vertices[iter1]-vertices[iter2]).norm(),self.size.x) or - nearly_equal((vertices[iter1]-vertices[iter2]).norm(),self.size.y) or - nearly_equal((vertices[iter1]-vertices[iter2]).norm(),self.size.z)): - edges.append([vertices[iter1],vertices[iter2]]) + for iter2 in range(iter1 + 1, len(vertices)): + if ( + (iter1 != iter2) + and nearly_equal( + (vertices[iter1] - vertices[iter2]).norm(), self.size.x + ) + or nearly_equal( + (vertices[iter1] - vertices[iter2]).norm(), self.size.y + ) + or nearly_equal( + (vertices[iter1] - vertices[iter2]).norm(), self.size.z + ) + ): + edges.append([vertices[iter1], vertices[iter2]]) return edges - def pt_in_volume(self,pt): - xmin = self.center.x - self.size.x/2 - xmax = self.center.x + self.size.x/2 - ymin = self.center.y - self.size.y/2 - ymax = self.center.y + self.size.y/2 - zmin = self.center.z - self.size.z/2 - zmax = self.center.z + self.size.z/2 - - if (pt.x >= xmin and pt.x <= xmax and pt.y >= ymin and pt.y <= ymax and pt.z >= zmin and pt.z <= zmax): - return True - else: - return False + def pt_in_volume(self, pt): + xmin = self.center.x - self.size.x / 2 + xmax = self.center.x + self.size.x / 2 + ymin = self.center.y - self.size.y / 2 + ymax = self.center.y + self.size.y / 2 + zmin = self.center.z - self.size.z / 2 + zmax = self.center.z + self.size.z / 2 + + return ( + pt.x >= xmin + and pt.x <= xmax + and pt.y >= ymin + and pt.y <= ymax + and pt.z >= zmin + and pt.z <= zmax + ) -class FluxRegion(object): +class FluxRegion: """ A `FluxRegion` object is used with [`add_flux`](#flux-spectra) to specify a region in which Meep should accumulate the appropriate Fourier-transformed fields in order to @@ -451,7 +498,15 @@ class FluxRegion(object): example, if you want to compute the outward flux through a box, so that the sides of the box add instead of subtract. """ - def __init__(self, center=None, size=Vector3(), direction=mp.AUTOMATIC, weight=1.0, volume=None): + + def __init__( + self, + center=None, + size=Vector3(), + direction=mp.AUTOMATIC, + weight=1.0, + volume=None, + ): """ Construct a `FluxRegion` object. @@ -533,8 +588,7 @@ class EnergyRegion(FluxRegion): """ -class FieldsRegion(object): - +class FieldsRegion: def __init__(self, where=None, center=None, size=None): if where: self.center = where.center @@ -546,7 +600,7 @@ def __init__(self, where=None, center=None, size=None): self.where = where -class DftObj(object): +class DftObj: """Wrapper around DFT objects that allows delayed initialization of the structure. When splitting the structure into chunks for parallel simulations, we want to know all @@ -569,6 +623,7 @@ class DftObj(object): `Simulation._evaluate_dft_objects` is called, then we initialize the C++ object through swigobj_attr and return the property they requested. """ + def __init__(self, func, args): """Construct a `DftObj`.""" self.func = func @@ -582,106 +637,105 @@ def swigobj_attr(self, attr): @property def save_hdf5(self): - return self.swigobj_attr('save_hdf5') + return self.swigobj_attr("save_hdf5") @property def load_hdf5(self): - return self.swigobj_attr('load_hdf5') + return self.swigobj_attr("load_hdf5") @property def scale_dfts(self): - return self.swigobj_attr('scale_dfts') + return self.swigobj_attr("scale_dfts") @property def remove(self): - return self.swigobj_attr('remove') + return self.swigobj_attr("remove") @property def freq(self): - return self.swigobj_attr('freq') + return self.swigobj_attr("freq") @property def where(self): - return self.swigobj_attr('where') + return self.swigobj_attr("where") class DftFlux(DftObj): - """ - """ + """ """ def __init__(self, func, args): """Construct a `DftFlux`.""" - super(DftFlux, self).__init__(func, args) + super().__init__(func, args) self.nfreqs = len(args[0]) self.regions = args[1] self.num_components = 4 @property def flux(self): - return self.swigobj_attr('flux') + return self.swigobj_attr("flux") @property def E(self): - return self.swigobj_attr('E') + return self.swigobj_attr("E") @property def H(self): - return self.swigobj_attr('H') + return self.swigobj_attr("H") @property def cE(self): - return self.swigobj_attr('cE') + return self.swigobj_attr("cE") @property def cH(self): - return self.swigobj_attr('cH') + return self.swigobj_attr("cH") @property def normal_direction(self): - return self.swigobj_attr('normal_direction') + return self.swigobj_attr("normal_direction") @property def freq(self): - return self.swigobj_attr('freq') + return self.swigobj_attr("freq") + class DftForce(DftObj): - """ - """ + """ """ def __init__(self, func, args): """Construct a `DftForce`.""" - super(DftForce, self).__init__(func, args) + super().__init__(func, args) self.nfreqs = len(args[0]) self.regions = args[1] self.num_components = 6 @property def force(self): - return self.swigobj_attr('force') + return self.swigobj_attr("force") @property def offdiag1(self): - return self.swigobj_attr('offdiag1') + return self.swigobj_attr("offdiag1") @property def offdiag2(self): - return self.swigobj_attr('offdiag2') + return self.swigobj_attr("offdiag2") @property def diag(self): - return self.swigobj_attr('diag') + return self.swigobj_attr("diag") @property def freq(self): - return self.swigobj_attr('freq') + return self.swigobj_attr("freq") + class DftNear2Far(DftObj): - """ - """ + """ """ def __init__(self, func, args): """Construct a `DftNear2Far`.""" - super(DftNear2Far, self).__init__(func, args) + super().__init__(func, args) self.nfreqs = len(args[0]) self.nperiods = args[1] self.regions = args[2] @@ -689,23 +743,23 @@ def __init__(self, func, args): @property def farfield(self): - return self.swigobj_attr('farfield') + return self.swigobj_attr("farfield") @property def save_farfields(self): - return self.swigobj_attr('save_farfields') + return self.swigobj_attr("save_farfields") @property def F(self): - return self.swigobj_attr('F') + return self.swigobj_attr("F") @property def eps(self): - return self.swigobj_attr('eps') + return self.swigobj_attr("eps") @property def mu(self): - return self.swigobj_attr('mu') + return self.swigobj_attr("mu") def flux(self, direction, where, resolution): """ @@ -715,60 +769,59 @@ def flux(self, direction, where, resolution): FDTD solution) and return its Poynting flux in `direction` as a list. The dataset is a 1d array of `nfreq` dimensions. """ - return self.swigobj_attr('flux')(direction, where.swigobj, resolution) + return self.swigobj_attr("flux")(direction, where.swigobj, resolution) @property def freq(self): - return self.swigobj_attr('freq') + return self.swigobj_attr("freq") + class DftEnergy(DftObj): - """ - """ + """ """ def __init__(self, func, args): """Construct a `DftEnergy`.""" - super(DftEnergy, self).__init__(func, args) + super().__init__(func, args) self.nfreqs = len(args[0]) self.regions = args[1] self.num_components = 12 @property def electric(self): - return self.swigobj_attr('electric') + return self.swigobj_attr("electric") @property def magnetic(self): - return self.swigobj_attr('magnetic') + return self.swigobj_attr("magnetic") @property def total(self): - return self.swigobj_attr('total') + return self.swigobj_attr("total") @property def freq(self): - return self.swigobj_attr('freq') + return self.swigobj_attr("freq") + class DftFields(DftObj): - """ - """ + """ """ def __init__(self, func, args): """Construct a `DftFields`.""" - super(DftFields, self).__init__(func, args) + super().__init__(func, args) self.nfreqs = len(args[4]) self.regions = [FieldsRegion(where=args[1], center=args[2], size=args[3])] self.num_components = len(args[0]) @property def chunks(self): - return self.swigobj_attr('chunks') - + return self.swigobj_attr("chunks") -Mode = namedtuple('Mode', ['freq', 'decay', 'Q', 'amp', 'err']) +Mode = namedtuple("Mode", ["freq", "decay", "Q", "amp", "err"]) -class EigenmodeData(object): +class EigenmodeData: def __init__(self, band_num, freq, group_velocity, k, swigobj, kdom): """Construct an `EigenmodeData`.""" self.band_num = band_num @@ -783,7 +836,7 @@ def amplitude(self, point, component): return mp.eigenmode_amplitude(self.swigobj, swig_point, component) -class Harminv(object): +class Harminv: """ Harminv is implemented as a class with a [`__call__`](#Harminv.__call__) method, which allows it to be used as a step function that collects field data from a given @@ -830,6 +883,7 @@ class Harminv(object): # do something with h.modes ``` """ + def __init__(self, c, pt, fcen, df, mxbands=None): """ Construct a Harminv object. @@ -865,7 +919,6 @@ def __call__(self, sim, todo): self.step_func(sim, todo) def _collect_harminv(self): - def _collect1(c, pt): self.t0 = 0 @@ -873,13 +926,17 @@ def _collect2(sim): self.data_dt = sim.meep_time() - self.t0 self.t0 = sim.meep_time() self.data.append(sim.get_field_point(c, pt)) + return _collect2 + return _collect1 def _check_freqs(self, sim): - source_freqs = [(s.src.frequency, 0 if s.src.width == 0 else 1 / s.src.width) - for s in sim.sources - if hasattr(s.src, 'frequency')] + source_freqs = [ + (s.src.frequency, 0 if s.src.width == 0 else 1 / s.src.width) + for s in sim.sources + if hasattr(s.src, "frequency") + ] harminv_max = self.fcen + 0.5 * self.df harminv_min = self.fcen - 0.5 * self.df @@ -895,32 +952,40 @@ def _check_freqs(self, sim): warnings.warn(warn_fmt.format(harminv_min, sf_min), RuntimeWarning) def _analyze_harminv(self, sim, maxbands): - harminv_cols = ['frequency', 'imag. freq.', 'Q', '|amp|', 'amplitude', 'error'] - display_run_data(sim, 'harminv', harminv_cols) + harminv_cols = ["frequency", "imag. freq.", "Q", "|amp|", "amplitude", "error"] + display_run_data(sim, "harminv", harminv_cols) self._check_freqs(sim) dt = self.data_dt if self.data_dt is not None else sim.fields.dt - bands = mp.py_do_harminv(self.data, dt, self.fcen - self.df / 2, self.fcen + self.df / 2, maxbands, - self.spectral_density, self.Q_thresh, self.rel_err_thresh, self.err_thresh, - self.rel_amp_thresh, self.amp_thresh) + bands = mp.py_do_harminv( + self.data, + dt, + self.fcen - self.df / 2, + self.fcen + self.df / 2, + maxbands, + self.spectral_density, + self.Q_thresh, + self.rel_err_thresh, + self.err_thresh, + self.rel_amp_thresh, + self.amp_thresh, + ) modes = [] for freq, amp, err in bands: - Q = freq.real / (-2 * freq.imag) if freq.imag != 0 else float('inf') + Q = freq.real / (-2 * freq.imag) if freq.imag != 0 else float("inf") modes.append(Mode(freq.real, freq.imag, Q, amp, err)) - display_run_data(sim, 'harminv', [freq.real, freq.imag, Q, abs(amp), amp, err]) + display_run_data( + sim, "harminv", [freq.real, freq.imag, Q, abs(amp), amp, err] + ) return modes def _harminv(self): - def _harm(sim): - if self.mxbands is None or self.mxbands == 0: - mb = 100 - else: - mb = self.mxbands + mb = 100 if self.mxbands is None or self.mxbands == 0 else self.mxbands self.modes = self._analyze_harminv(sim, mb) f1 = self._collect_harminv() @@ -928,46 +993,49 @@ def _harm(sim): return _combine_step_funcs(at_end(_harm), f1(self.c, self.pt)) -class Simulation(object): +class Simulation: """ The `Simulation` [class](#classes) contains all the attributes that you can set to control various parameters of the Meep computation. """ - def __init__(self, - cell_size: Optional[Vector3Type] = None, - resolution: float = None, - geometry: Optional[List[GeometricObject]] = None, - sources: Optional[List[Source]] = None, - eps_averaging: bool = True, - dimensions: int = 3, - boundary_layers: Optional[List[PML]] = None, - symmetries: Optional[List[Symmetry]] = None, - force_complex_fields: bool = False, - default_material: Medium = mp.Medium(), - m: float = 0, - k_point: Union[Vector3Type, bool] = False, - kz_2d: str = "complex", - extra_materials: Optional[List[Medium]] = None, - material_function: Optional[Callable[[Vector3Type], Medium]] = None, - epsilon_func: Optional[Callable[[Vector3Type], float]] = None, - epsilon_input_file: str = '', - progress_interval: float = 4, - subpixel_tol: float = 1e-4, - subpixel_maxeval: int = 100000, - loop_tile_base_db: int = 0, - loop_tile_base_eh: int = 0, - ensure_periodicity: bool = True, - num_chunks: int = 0, - Courant: float = 0.5, - accurate_fields_near_cylorigin: bool = False, - filename_prefix: Optional[str] = None, - output_volume: Optional[Volume] = None, - output_single_precision: bool = False, - geometry_center: Vector3Type = Vector3(), - force_all_components: bool = False, - split_chunks_evenly: bool = True, - chunk_layout = None, - collect_stats: bool = False): + + def __init__( + self, + cell_size: Optional[Vector3Type] = None, + resolution: float = None, + geometry: Optional[List[GeometricObject]] = None, + sources: Optional[List[Source]] = None, + eps_averaging: bool = True, + dimensions: int = 3, + boundary_layers: Optional[List[PML]] = None, + symmetries: Optional[List[Symmetry]] = None, + force_complex_fields: bool = False, + default_material: Medium = mp.Medium(), + m: float = 0, + k_point: Union[Vector3Type, bool] = False, + kz_2d: str = "complex", + extra_materials: Optional[List[Medium]] = None, + material_function: Optional[Callable[[Vector3Type], Medium]] = None, + epsilon_func: Optional[Callable[[Vector3Type], float]] = None, + epsilon_input_file: str = "", + progress_interval: float = 4, + subpixel_tol: float = 1e-4, + subpixel_maxeval: int = 100000, + loop_tile_base_db: int = 0, + loop_tile_base_eh: int = 0, + ensure_periodicity: bool = True, + num_chunks: int = 0, + Courant: float = 0.5, + accurate_fields_near_cylorigin: bool = False, + filename_prefix: Optional[str] = None, + output_volume: Optional[Volume] = None, + output_single_precision: bool = False, + geometry_center: Vector3Type = Vector3(), + force_all_components: bool = False, + split_chunks_evenly: bool = True, + chunk_layout=None, + collect_stats: bool = False, + ): """ All `Simulation` attributes are described in further detail below. In brackets after each variable is the type of value that it should hold. The classes, complex @@ -1215,7 +1283,11 @@ def __init__(self, self.extra_materials = extra_materials if extra_materials else [] self.default_material = default_material self.epsilon_input_file = epsilon_input_file - self.num_chunks = chunk_layout.numchunks() if isinstance(chunk_layout,mp.BinaryPartition) else num_chunks + self.num_chunks = ( + chunk_layout.numchunks() + if isinstance(chunk_layout, mp.BinaryPartition) + else num_chunks + ) self._num_chunks_original = self.num_chunks self.Courant = Courant self.global_d_conductivity = 0 @@ -1234,7 +1306,7 @@ def __init__(self, self.output_append_h5 = None self.output_single_precision = output_single_precision self.output_volume = output_volume - self.last_eps_filename = '' + self.last_eps_filename = "" self.output_h5_hook = lambda fname: False self.interactive = False self.is_cylindrical = False @@ -1248,7 +1320,7 @@ def __init__(self, self._chunk_layout_original = self.chunk_layout self.collect_stats = collect_stats self.fragment_stats = None - self._output_stats = os.environ.get('MEEP_STATS', None) + self._output_stats = os.environ.get("MEEP_STATS", None) self.load_single_parallel_file = True self.load_structure_file = None @@ -1265,14 +1337,23 @@ def __init__(self, elif kz_2d == "3d": self.special_kz = False else: - raise ValueError("Invalid kz_2d option: {} not in [complex, real/imag, 3d]".format(kz_2d)) + raise ValueError( + "Invalid kz_2d option: {} not in [complex, real/imag, 3d]".format( + kz_2d + ) + ) # To prevent the user from having to specify `dims` and `is_cylindrical` # to Volumes they create, the library will adjust them appropriately based # on the settings in the Simulation instance. This method must be called on # any user-defined Volume before passing it to meep via its `swigobj`. def _fit_volume_to_simulation(self, vol): - return Volume(vol.center, vol.size, dims=self.dimensions, is_cylindrical=self.is_cylindrical) + return Volume( + vol.center, + vol.size, + dims=self.dimensions, + is_cylindrical=self.is_cylindrical, + ) # Every function that takes a user volume can be specified either by a volume # (a Python Volume or a SWIG-wrapped meep::volume), or a center and a size @@ -1285,8 +1366,12 @@ def _volume_from_kwargs(self, vol=None, center=None, size=None): # A SWIG-wrapped meep::volume return vol elif size is not None and center is not None: - return Volume(center=Vector3(*center), size=Vector3(*size), dims=self.dimensions, - is_cylindrical=self.is_cylindrical).swigobj + return Volume( + center=Vector3(*center), + size=Vector3(*size), + dims=self.dimensions, + is_cylindrical=self.is_cylindrical, + ).swigobj else: raise ValueError("Need either a Volume, or a size and center") @@ -1306,8 +1391,8 @@ def use_2d(self, k): return self.dimensions def _get_valid_material_frequencies(self): - fmin = float('-inf') - fmax = float('inf') + fmin = float("-inf") + fmax = float("inf") all_materials = [go.material for go in self.geometry] + self.extra_materials all_materials.append(self.default_material) @@ -1324,18 +1409,22 @@ def _get_valid_material_frequencies(self): def _check_material_frequencies(self): min_freq, max_freq = self._get_valid_material_frequencies() - source_freqs = [(s.src.frequency, 0 if s.src.width == 0 else 1 / s.src.width) - for s in self.sources - if hasattr(s.src, 'frequency')] + source_freqs = [ + (s.src.frequency, 0 if s.src.width == 0 else 1 / s.src.width) + for s in self.sources + if hasattr(s.src, "frequency") + ] dft_freqs = [] for dftf in self.dft_objects: dft_freqs.append(dftf.freq[0]) dft_freqs.append(dftf.freq[-1]) - warn_src = ('Note: your sources include frequencies outside the range of validity of the ' + - 'material models. This is fine as long as you eventually only look at outputs ' + - '(fluxes, resonant modes, etc.) at valid frequencies.') + warn_src = ( + "Note: your sources include frequencies outside the range of validity of the " + + "material models. This is fine as long as you eventually only look at outputs " + + "(fluxes, resonant modes, etc.) at valid frequencies." + ) warn_dft_fmt = "DFT frequency {} is out of material's range of {}-{}" @@ -1345,7 +1434,9 @@ def _check_material_frequencies(self): for dftf in dft_freqs: if dftf > max_freq or dftf < min_freq: - warnings.warn(warn_dft_fmt.format(dftf, min_freq, max_freq), RuntimeWarning) + warnings.warn( + warn_dft_fmt.format(dftf, min_freq, max_freq), RuntimeWarning + ) def _create_grid_volume(self, k): dims = self._infer_dimensions(k) @@ -1356,16 +1447,20 @@ def _create_grid_volume(self, k): self.dimensions = 2 gv = mp.vol2d(self.cell_size.x, self.cell_size.y, self.resolution) elif dims == 3: - gv = mp.vol3d(self.cell_size.x, self.cell_size.y, self.cell_size.z, self.resolution) + gv = mp.vol3d( + self.cell_size.x, self.cell_size.y, self.cell_size.z, self.resolution + ) elif dims == mp.CYLINDRICAL: gv = mp.volcyl(self.cell_size.x, self.cell_size.z, self.resolution) self.dimensions = 2 self.is_cylindrical = True else: - raise ValueError("Unsupported dimentionality: {}".format(dims)) + raise ValueError(f"Unsupported dimentionality: {dims}") gv.center_origin() - gv.shift_origin(py_v3_to_vec(self.dimensions, self.geometry_center, self.is_cylindrical)) + gv.shift_origin( + py_v3_to_vec(self.dimensions, self.geometry_center, self.is_cylindrical) + ) return gv def _create_symmetries(self, gv): @@ -1390,10 +1485,15 @@ def _create_symmetries(self, gv): return sym def _get_dft_volumes(self): - volumes = [self._volume_from_kwargs(vol=r.where if hasattr(r, 'where') else None, - center=r.center, size=r.size) - for dft in self.dft_objects - for r in dft.regions] + volumes = [ + self._volume_from_kwargs( + vol=r.where if hasattr(r, "where") else None, + center=r.center, + size=r.size, + ) + for dft in self.dft_objects + for r in dft.regions + ] return volumes @@ -1412,32 +1512,32 @@ def _boundaries_to_vols_1d(self, boundaries): def _boundaries_to_vols_2d_3d(self, boundaries, cyl=False): side_thickness = OrderedDict() - side_thickness['top'] = 0 - side_thickness['bottom'] = 0 - side_thickness['left'] = 0 - side_thickness['right'] = 0 - side_thickness['near'] = 0 - side_thickness['far'] = 0 + side_thickness["top"] = 0 + side_thickness["bottom"] = 0 + side_thickness["left"] = 0 + side_thickness["right"] = 0 + side_thickness["near"] = 0 + side_thickness["far"] = 0 for bl in boundaries: d = bl.direction s = bl.side if d == mp.X or d == mp.ALL: if s == mp.High or s == mp.ALL: - side_thickness['right'] = bl.thickness + side_thickness["right"] = bl.thickness if s == mp.Low or s == mp.ALL: - side_thickness['left'] = bl.thickness + side_thickness["left"] = bl.thickness if d == mp.Y or d == mp.ALL: if s == mp.High or s == mp.ALL: - side_thickness['top'] = bl.thickness + side_thickness["top"] = bl.thickness if s == mp.Low or s == mp.ALL: - side_thickness['bottom'] = bl.thickness + side_thickness["bottom"] = bl.thickness if self.dimensions == 3: if d == mp.Z or d == mp.ALL: if s == mp.High or s == mp.ALL: - side_thickness['far'] = bl.thickness + side_thickness["far"] = bl.thickness if s == mp.Low or s == mp.ALL: - side_thickness['near'] = bl.thickness + side_thickness["near"] = bl.thickness xmax = self.cell_size.x / 2 ymax = self.cell_size.z / 2 if cyl else self.cell_size.y / 2 @@ -1445,30 +1545,38 @@ def _boundaries_to_vols_2d_3d(self, boundaries, cyl=False): ytot = self.cell_size.z if cyl else self.cell_size.y def get_overlap_0(side, d): - if side == 'top' or side == 'bottom': - ydir = 1 if side == 'top' else -1 - xsz = self.cell_size.x - (side_thickness['left'] + side_thickness['right']) + if side == "top" or side == "bottom": + ydir = 1 if side == "top" else -1 + xsz = self.cell_size.x - ( + side_thickness["left"] + side_thickness["right"] + ) ysz = d - zsz = self.cell_size.z - (side_thickness['near'] + side_thickness['far']) - xcen = xmax - side_thickness['right'] - (xsz / 2) - ycen = ydir*ymax + (-ydir*0.5*d) - zcen = zmax - side_thickness['far'] - (zsz / 2) - elif side == 'left' or side == 'right': - xdir = 1 if side == 'right' else -1 + zsz = self.cell_size.z - ( + side_thickness["near"] + side_thickness["far"] + ) + xcen = xmax - side_thickness["right"] - (xsz / 2) + ycen = ydir * ymax + (-ydir * 0.5 * d) + zcen = zmax - side_thickness["far"] - (zsz / 2) + elif side == "left" or side == "right": + xdir = 1 if side == "right" else -1 xsz = d - ysz = ytot - (side_thickness['top'] + side_thickness['bottom']) - zsz = self.cell_size.z - (side_thickness['near'] + side_thickness['far']) - xcen = xdir*xmax + (-xdir*0.5*d) - ycen = ymax - side_thickness['top'] - (ysz / 2) - zcen = zmax - side_thickness['far'] - (zsz / 2) - elif side == 'near' or side == 'far': - zdir = 1 if side == 'far' else -1 - xsz = self.cell_size.x - (side_thickness['left'] + side_thickness['right']) - ysz = ytot - (side_thickness['top'] + side_thickness['bottom']) + ysz = ytot - (side_thickness["top"] + side_thickness["bottom"]) + zsz = self.cell_size.z - ( + side_thickness["near"] + side_thickness["far"] + ) + xcen = xdir * xmax + (-xdir * 0.5 * d) + ycen = ymax - side_thickness["top"] - (ysz / 2) + zcen = zmax - side_thickness["far"] - (zsz / 2) + elif side == "near" or side == "far": + zdir = 1 if side == "far" else -1 + xsz = self.cell_size.x - ( + side_thickness["left"] + side_thickness["right"] + ) + ysz = ytot - (side_thickness["top"] + side_thickness["bottom"]) zsz = d - xcen = xmax - side_thickness['right'] - (xsz / 2) - ycen = ymax - side_thickness['top'] - (ysz / 2) - zcen = zdir*zmax + (-zdir*0.5*d) + xcen = xmax - side_thickness["right"] - (xsz / 2) + ycen = ymax - side_thickness["top"] - (ysz / 2) + zcen = zdir * zmax + (-zdir * 0.5 * d) if cyl: cen = mp.Vector3(xcen, 0, ycen) @@ -1483,31 +1591,37 @@ def get_overlap_1(side1, side2, d): if side_thickness[side2] == 0: return [] - if side1 == 'top' or side1 == 'bottom': - ydir = 1 if side1 == 'top' else -1 + if side1 == "top" or side1 == "bottom": + ydir = 1 if side1 == "top" else -1 ysz = d - ycen = ydir*ymax + (-ydir*0.5*d) - if side2 == 'left' or side2 == 'right': - xdir = 1 if side2 == 'right' else -1 + ycen = ydir * ymax + (-ydir * 0.5 * d) + if side2 == "left" or side2 == "right": + xdir = 1 if side2 == "right" else -1 xsz = side_thickness[side2] - zsz = self.cell_size.z - (side_thickness['near'] + side_thickness['far']) - xcen = xdir*xmax + (-xdir*0.5*side_thickness[side2]) - zcen = zmax - side_thickness['far'] - (zsz / 2) - elif side2 == 'near' or side2 == 'far': - zdir = 1 if side2 == 'far' else -1 - xsz = self.cell_size.x - (side_thickness['left'] + side_thickness['right']) + zsz = self.cell_size.z - ( + side_thickness["near"] + side_thickness["far"] + ) + xcen = xdir * xmax + (-xdir * 0.5 * side_thickness[side2]) + zcen = zmax - side_thickness["far"] - (zsz / 2) + elif side2 == "near" or side2 == "far": + zdir = 1 if side2 == "far" else -1 + xsz = self.cell_size.x - ( + side_thickness["left"] + side_thickness["right"] + ) zsz = side_thickness[side2] - xcen = xmax - side_thickness['right'] - (xsz / 2) - zcen = zdir*zmax + (-zdir*0.5*side_thickness[side2]) - elif side1 == 'near' or side1 == 'far': - xdir = 1 if side2 == 'right' else -1 - zdir = 1 if side1 == 'far' else -1 + xcen = xmax - side_thickness["right"] - (xsz / 2) + zcen = zdir * zmax + (-zdir * 0.5 * side_thickness[side2]) + elif side1 == "near" or side1 == "far": + xdir = 1 if side2 == "right" else -1 + zdir = 1 if side1 == "far" else -1 xsz = side_thickness[side2] - ysz = self.cell_size.y - (side_thickness['top'] + side_thickness['bottom']) + ysz = self.cell_size.y - ( + side_thickness["top"] + side_thickness["bottom"] + ) zsz = d - xcen = xdir*xmax + (-xdir*0.5*side_thickness[side2]) - ycen = ymax - side_thickness['top'] - (ysz / 2) - zcen = zdir*zmax + (-zdir*0.5*d) + xcen = xdir * xmax + (-xdir * 0.5 * side_thickness[side2]) + ycen = ymax - side_thickness["top"] - (ysz / 2) + zcen = zdir * zmax + (-zdir * 0.5 * d) if cyl: cen = mp.Vector3(xcen, 0, ycen) @@ -1520,15 +1634,15 @@ def get_overlap_1(side1, side2, d): def get_overlap_2(side1, side2, side3, d): if side_thickness[side2] == 0 or side_thickness[side3] == 0: return [] - xdir = 1 if side2 == 'right' else -1 - ydir = 1 if side1 == 'top' else -1 - zdir = 1 if side3 == 'far' else -1 + xdir = 1 if side2 == "right" else -1 + ydir = 1 if side1 == "top" else -1 + zdir = 1 if side3 == "far" else -1 xsz = side_thickness[side2] ysz = d zsz = side_thickness[side3] - xcen = xdir*xmax + (-xdir*0.5*xsz) - ycen = ydir*ymax + (-ydir*0.5*d) - zcen = zdir*zmax + (-zdir*0.5*zsz) + xcen = xdir * xmax + (-xdir * 0.5 * xsz) + ycen = ydir * ymax + (-ydir * 0.5 * d) + zcen = zdir * zmax + (-zdir * 0.5 * zsz) cen = mp.Vector3(xcen, ycen, zcen) sz = mp.Vector3(xsz, ysz, zsz) @@ -1543,19 +1657,19 @@ def get_overlap_2(side1, side2, side3, d): continue v1.append(get_overlap_0(side, thickness)) - if side == 'top' or side == 'bottom': - v2.append(get_overlap_1(side, 'left', thickness)) - v2.append(get_overlap_1(side, 'right', thickness)) + if side == "top" or side == "bottom": + v2.append(get_overlap_1(side, "left", thickness)) + v2.append(get_overlap_1(side, "right", thickness)) if self.dimensions == 3: - v2.append(get_overlap_1(side, 'near', thickness)) - v2.append(get_overlap_1(side, 'far', thickness)) - v3.append(get_overlap_2(side, 'left', 'near', thickness)) - v3.append(get_overlap_2(side, 'right', 'near', thickness)) - v3.append(get_overlap_2(side, 'left', 'far', thickness)) - v3.append(get_overlap_2(side, 'right', 'far', thickness)) - if side == 'near' or side == 'far': - v2.append(get_overlap_1(side, 'left', thickness)) - v2.append(get_overlap_1(side, 'right', thickness)) + v2.append(get_overlap_1(side, "near", thickness)) + v2.append(get_overlap_1(side, "far", thickness)) + v3.append(get_overlap_2(side, "left", "near", thickness)) + v3.append(get_overlap_2(side, "right", "near", thickness)) + v3.append(get_overlap_2(side, "left", "far", thickness)) + v3.append(get_overlap_2(side, "right", "far", thickness)) + if side == "near" or side == "far": + v2.append(get_overlap_1(side, "left", thickness)) + v2.append(get_overlap_1(side, "right", thickness)) return [v for v in v1 if v], [v for v in v2 if v], [v for v in v3 if v] @@ -1573,21 +1687,29 @@ def _boundary_layers_to_vol_list(self, boundaries): if self.dimensions == 1: vols1 = self._boundaries_to_vols_1d(boundaries) else: - vols1, vols2, vols3 = self._boundaries_to_vols_2d_3d(boundaries, self.is_cylindrical) + vols1, vols2, vols3 = self._boundaries_to_vols_2d_3d( + boundaries, self.is_cylindrical + ) return vols1, vols2, vols3 def _make_fragment_lists(self, gv): - def convert_volumes(dft_obj): volumes = [] for r in dft_obj.regions: - volumes.append(self._volume_from_kwargs(vol=r.where if hasattr(r, 'where') else None, - center=r.center, size=r.size)) + volumes.append( + self._volume_from_kwargs( + vol=r.where if hasattr(r, "where") else None, + center=r.center, + size=r.size, + ) + ) return volumes - dft_data_list = [mp.dft_data(o.nfreqs, o.num_components, convert_volumes(o)) - for o in self.dft_objects] + dft_data_list = [ + mp.dft_data(o.nfreqs, o.num_components, convert_volumes(o)) + for o in self.dft_objects + ] pmls = [] absorbers = [] @@ -1598,14 +1720,24 @@ def convert_volumes(dft_obj): absorbers.append(bl) pml_vols1, pml_vols2, pml_vols3 = self._boundary_layers_to_vol_list(pmls) - absorber_vols1, absorber_vols2, absorber_vols3 = self._boundary_layers_to_vol_list(absorbers) + ( + absorber_vols1, + absorber_vols2, + absorber_vols3, + ) = self._boundary_layers_to_vol_list(absorbers) absorber_vols = absorber_vols1 + absorber_vols2 + absorber_vols3 return (dft_data_list, pml_vols1, pml_vols2, pml_vols3, absorber_vols) def _compute_fragment_stats(self, gv): - dft_data_list, pml_vols1, pml_vols2, pml_vols3, absorber_vols = self._make_fragment_lists(gv) + ( + dft_data_list, + pml_vols1, + pml_vols2, + pml_vols3, + absorber_vols, + ) = self._make_fragment_lists(gv) stats = mp.compute_fragment_stats( self.geometry, @@ -1622,7 +1754,7 @@ def _compute_fragment_stats(self, gv): self.subpixel_tol, self.subpixel_maxeval, self.ensure_periodicity, - self.eps_averaging + self.eps_averaging, ) mirror_symmetries = [sym for sym in self.symmetries if isinstance(sym, Mirror)] @@ -1641,8 +1773,8 @@ def _compute_fragment_stats(self, gv): def _init_structure(self, k=False): if verbosity.meep > 0: - print('-' * 11) - print('Initializing structure...') + print("-" * 11) + print("Initializing structure...") gv = self._create_grid_volume(k) sym = self._create_symmetries(gv) @@ -1663,19 +1795,27 @@ def _init_structure(self, k=False): if self.collect_stats and isinstance(self.default_material, mp.Medium): self.fragment_stats = self._compute_fragment_stats(gv) - if self._output_stats and isinstance(self.default_material, mp.Medium) and verbosity.meep > 0: + if ( + self._output_stats + and isinstance(self.default_material, mp.Medium) + and verbosity.meep > 0 + ): stats = self._compute_fragment_stats(gv) - print("FRAGMENT:, aniso_eps:, {}".format(stats.num_anisotropic_eps_pixels)) - print("FRAGMENT:, aniso_mu:, {}".format(stats.num_anisotropic_mu_pixels)) - print("FRAGMENT:, nonlinear:, {}".format(stats.num_nonlinear_pixels)) - print("FRAGMENT:, susceptibility:, {}".format(stats.num_susceptibility_pixels)) - print("FRAGMENT:, conductivity:, {}".format(stats.num_nonzero_conductivity_pixels)) - print("FRAGMENT:, pml_1d:, {}".format(stats.num_1d_pml_pixels)) - print("FRAGMENT:, pml_2d:, {}".format(stats.num_2d_pml_pixels)) - print("FRAGMENT:, pml_3d:, {}".format(stats.num_3d_pml_pixels)) - print("FRAGMENT:, dft:, {}".format(stats.num_dft_pixels)) - print("FRAGMENT:, total_pixels:, {}".format(stats.num_pixels_in_box)) - print("FRAGMENT:, procs:, {}".format(mp.count_processors())) + print(f"FRAGMENT:, aniso_eps:, {stats.num_anisotropic_eps_pixels}") + print(f"FRAGMENT:, aniso_mu:, {stats.num_anisotropic_mu_pixels}") + print(f"FRAGMENT:, nonlinear:, {stats.num_nonlinear_pixels}") + print(f"FRAGMENT:, susceptibility:, {stats.num_susceptibility_pixels}") + print( + "FRAGMENT:, conductivity:, {}".format( + stats.num_nonzero_conductivity_pixels + ) + ) + print(f"FRAGMENT:, pml_1d:, {stats.num_1d_pml_pixels}") + print(f"FRAGMENT:, pml_2d:, {stats.num_2d_pml_pixels}") + print(f"FRAGMENT:, pml_3d:, {stats.num_3d_pml_pixels}") + print(f"FRAGMENT:, dft:, {stats.num_dft_pixels}") + print(f"FRAGMENT:, total_pixels:, {stats.num_pixels_in_box}") + print(f"FRAGMENT:, procs:, {mp.count_processors()}") fragment_vols = self._make_fragment_lists(gv) self.dft_data_list = fragment_vols[0] @@ -1706,10 +1846,15 @@ def _init_structure(self, k=False): absorbers, self.extra_materials, self.split_chunks_evenly, - False if self.chunk_layout and not isinstance(self.chunk_layout,mp.BinaryPartition) else True, + False + if self.chunk_layout + and not isinstance(self.chunk_layout, mp.BinaryPartition) + else True, None, True if self._output_stats is not None else False, - self.chunk_layout if self.chunk_layout and isinstance(self.chunk_layout,mp.BinaryPartition) else None + self.chunk_layout + if self.chunk_layout and isinstance(self.chunk_layout, mp.BinaryPartition) + else None, ) self.geps = mp._set_materials( self.structure, @@ -1728,13 +1873,13 @@ def _init_structure(self, k=False): True, None, False, - None + None, ) if self._output_stats is not None: sys.exit(0) - if self.chunk_layout and not isinstance(self.chunk_layout,mp.BinaryPartition): + if self.chunk_layout and not isinstance(self.chunk_layout, mp.BinaryPartition): self.load_chunk_layout(br, self.chunk_layout) self.set_materials() @@ -1746,7 +1891,8 @@ def _init_structure(self, k=False): if self.load_structure_file: self.load_structure( - self.load_structure_file, self.load_single_parallel_file) + self.load_structure_file, self.load_single_parallel_file + ) def _is_outer_boundary(self, vol, direction, side): @@ -1761,11 +1907,15 @@ def _is_outer_boundary(self, vol, direction, side): # TODO: Support shifted origins def isclose(a, b, rel_tol=1e-09, abs_tol=0.0): - return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol) + return abs(a - b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol) - if side == mp.Low and isclose(vol.get_min_corner().in_direction(direction), -half_cell_size): + if side == mp.Low and isclose( + vol.get_min_corner().in_direction(direction), -half_cell_size + ): return True - if side == mp.High and isclose(vol.get_max_corner().in_direction(direction), half_cell_size): + if side == mp.High and isclose( + vol.get_max_corner().in_direction(direction), half_cell_size + ): return True return False @@ -1810,8 +1960,10 @@ def get_num_pixels(vol, direction, side, target_direction, mult_direction=None): def _get_chunk_communication_areas(self): if self.dimensions == 1 or self.is_cylindrical: - warnings.warn("Can currently only get chunk communication area from 2d or 3d simulations", - RuntimeWarning) + warnings.warn( + "Can currently only get chunk communication area from 2d or 3d simulations", + RuntimeWarning, + ) return if self.structure is None: @@ -1887,7 +2039,7 @@ def set_materials(self, geometry=None, default_material=None): True, self.structure, False, - None + None, ) self.geps = mp._set_materials( self.structure, @@ -1906,7 +2058,7 @@ def set_materials(self, geometry=None, default_material=None): True, None, False, - None + None, ) def dump_structure(self, fname, single_parallel_file=True): @@ -1914,20 +2066,32 @@ def dump_structure(self, fname, single_parallel_file=True): Dumps the structure to the file `fname`. """ if self.structure is None: - raise ValueError("Structure must be initialized before calling dump_structure") + raise ValueError( + "Structure must be initialized before calling dump_structure" + ) self.structure.dump(fname, single_parallel_file) if verbosity.meep > 0: - print("Dumped structure to file: %s (%s)" % (fname, str(single_parallel_file))) + print( + "Dumped structure to file: {} ({})".format( + fname, str(single_parallel_file) + ) + ) def load_structure(self, fname, single_parallel_file=True): """ Loads a structure from the file `fname`. """ if self.structure is None: - raise ValueError("Structure must be initialized before loading structure from file '%s'" % fname) + raise ValueError( + "Structure must be initialized before loading structure from file '%s'" + % fname + ) self.structure.load(fname, single_parallel_file) if verbosity.meep > 0: - print("Loaded structure from file: %s (%s)" % (fname, str(single_parallel_file))) + print( + "Loaded structure from file: %s (%s)" + % (fname, str(single_parallel_file)) + ) def dump_fields(self, fname, single_parallel_file=True): """ @@ -1937,30 +2101,46 @@ def dump_fields(self, fname, single_parallel_file=True): raise ValueError("Fields must be initialized before calling dump_fields") self.fields.dump(fname, single_parallel_file) if verbosity.meep > 0: - print("Dumped fields to file: %s (%s)" % (fname, str(single_parallel_file))) + print( + "Dumped fields to file: {} ({})".format( + fname, str(single_parallel_file) + ) + ) def load_fields(self, fname, single_parallel_file=True): """ Loads a fields from the file `fname`. """ if self.fields is None: - raise ValueError("Fields must be initialized before loading fields from file '%s'" % fname) + raise ValueError( + "Fields must be initialized before loading fields from file '%s'" + % fname + ) self._evaluate_dft_objects() self.fields.load(fname, single_parallel_file) if verbosity.meep > 0: - print("Loaded fields from file: %s (%s)" % (fname, str(single_parallel_file))) + print( + "Loaded fields from file: {} ({})".format( + fname, str(single_parallel_file) + ) + ) def dump_chunk_layout(self, fname): """ Dumps the chunk layout to file `fname`. """ if self.structure is None: - raise ValueError("Structure must be initialized before calling dump_chunk_layout") + raise ValueError( + "Structure must be initialized before calling dump_chunk_layout" + ) self.structure.dump_chunk_layout(fname) def load_chunk_layout(self, br, source): if self.structure is None: - raise ValueError("Structure must be initialized before loading chunk layout from file '%s'" % fname) + raise ValueError( + "Structure must be initialized before loading chunk layout from file '%s'" + % fname + ) if isinstance(source, Simulation): vols = source.structure.get_chunk_volumes() @@ -1979,10 +2159,12 @@ def get_load_dump_dirname(self, dirname, single_parallel_file): else: # When doing a sharded dump (each process to its own file), use # the process rank to get a unique name. - dump_dirname = os.path.join(dirname, 'rank%02d' % mp.my_rank()) + dump_dirname = os.path.join(dirname, "rank%02d" % mp.my_rank()) return dump_dirname - def dump(self, dirname, dump_structure=True, dump_fields=True, single_parallel_file=True): + def dump( + self, dirname, dump_structure=True, dump_fields=True, single_parallel_file=True + ): """ Dumps simulation state. """ @@ -1990,14 +2172,16 @@ def dump(self, dirname, dump_structure=True, dump_fields=True, single_parallel_f os.makedirs(dump_dirname, exist_ok=True) if dump_structure: - structure_dump_filename = os.path.join(dump_dirname, 'structure.h5') + structure_dump_filename = os.path.join(dump_dirname, "structure.h5") self.dump_structure(structure_dump_filename, single_parallel_file) if dump_fields: - fields_dump_filename = os.path.join(dump_dirname, 'fields.h5') + fields_dump_filename = os.path.join(dump_dirname, "fields.h5") self.dump_fields(fields_dump_filename, single_parallel_file) - def load(self, dirname, load_structure=True, load_fields=True, single_parallel_file=True): + def load( + self, dirname, load_structure=True, load_fields=True, single_parallel_file=True + ): """ Loads simulation state. @@ -2008,36 +2192,42 @@ def load(self, dirname, load_structure=True, load_fields=True, single_parallel_f self.load_single_parallel_file = single_parallel_file if load_structure: - load_structure_file = os.path.join(dump_dirname, 'structure.h5') - # If structure is already initialized, load it straight away. - # Otherwise, do a delayed load. - if self.structure: - self.load_structure(load_structure_file, self.load_single_parallel_file) - else: - self.load_structure_file = load_structure_file + load_structure_file = os.path.join(dump_dirname, "structure.h5") + # If structure is already initialized, load it straight away. + # Otherwise, do a delayed load. + if self.structure: + self.load_structure(load_structure_file, self.load_single_parallel_file) + else: + self.load_structure_file = load_structure_file if load_fields: - load_fields_file = os.path.join(dump_dirname, 'fields.h5') - if self.fields: - self.load_fields(load_fields_file, self.load_single_parallel_file) - else: - self.load_fields_file = load_fields_file + load_fields_file = os.path.join(dump_dirname, "fields.h5") + if self.fields: + self.load_fields(load_fields_file, self.load_single_parallel_file) + else: + self.load_fields_file = load_fields_file def init_sim(self): if self._is_initialized: return - materials = [g.material for g in self.geometry if isinstance(g.material, mp.Medium)] + materials = [ + g.material for g in self.geometry if isinstance(g.material, mp.Medium) + ] if isinstance(self.default_material, mp.Medium): materials.append(self.default_material) for med in materials: - if ((med.epsilon_diag.x < 1 and med.epsilon_diag.x > -mp.inf) or - (med.epsilon_diag.y < 1 and med.epsilon_diag.y > -mp.inf) or - (med.epsilon_diag.z < 1 and med.epsilon_diag.z > -mp.inf)): - - eps_warning = ("Epsilon < 1 may require adjusting the Courant parameter. " + - "See the 'Numerical Stability' entry under the 'Materials' " + - "section of the documentation") + if ( + (med.epsilon_diag.x < 1 and med.epsilon_diag.x > -mp.inf) + or (med.epsilon_diag.y < 1 and med.epsilon_diag.y > -mp.inf) + or (med.epsilon_diag.z < 1 and med.epsilon_diag.z > -mp.inf) + ): + + eps_warning = ( + "Epsilon < 1 may require adjusting the Courant parameter. " + + "See the 'Numerical Stability' entry under the 'Materials' " + + "section of the documentation" + ) warnings.warn(eps_warning, RuntimeWarning) if self.structure is None: @@ -2048,7 +2238,8 @@ def init_sim(self): self.m if self.is_cylindrical else 0, self.k_point.z if self.special_kz and self.k_point else 0, not self.accurate_fields_near_cylorigin, - self.loop_tile_base_db, self.loop_tile_base_eh + self.loop_tile_base_db, + self.loop_tile_base_eh, ) if self.force_all_components and self.dimensions != 1: @@ -2061,7 +2252,11 @@ def init_sim(self): print("Meep: using complex fields.") if self.k_point: - v = Vector3(self.k_point.x, self.k_point.y) if self.special_kz else self.k_point + v = ( + Vector3(self.k_point.x, self.k_point.y) + if self.special_kz + else self.k_point + ) self.fields.use_bloch(py_v3_to_vec(self.dimensions, v, self.is_cylindrical)) self.add_sources() @@ -2072,8 +2267,7 @@ def init_sim(self): self._is_initialized = True if self.load_fields_file: - self.load_fields( - self.load_fields_file, self.load_single_parallel_file) + self.load_fields(self.load_fields_file, self.load_single_parallel_file) def using_real_fields(self): cond1 = self.is_cylindrical and self.m != 0 @@ -2098,11 +2292,12 @@ def require_dimensions(self): mp.set_dimensions(self._infer_dimensions(self.k_point)) def has_mu(self): - def _has_mu(medium): if not isinstance(medium, mp.Medium): return False - return medium.mu_diag != mp.Vector3(1, 1, 1) or medium.mu_offdiag != mp.Vector3(0j, 0j, 0j) + return medium.mu_diag != mp.Vector3( + 1, 1, 1 + ) or medium.mu_offdiag != mp.Vector3(0j, 0j, 0j) for go in self.geometry: if _has_mu(go.material): @@ -2120,13 +2315,29 @@ def get_estimated_memory_usage(self): self.init_sim() if self.fragment_stats is None: - self.fragment_stats = self._compute_fragment_stats(self.structure.user_volume) + self.fragment_stats = self._compute_fragment_stats( + self.structure.user_volume + ) - is_complex = (self.k_point and self.k_point != mp.Vector3(0, 0, 0)) or self.force_complex_fields + is_complex = ( + self.k_point and self.k_point != mp.Vector3(0, 0, 0) + ) or self.force_complex_fields realnums_per_grid_point = 1 if self.dimensions == 1 else 3 - E_realnums = self.fragment_stats.num_pixels_in_box * (2 if is_complex else 1) * realnums_per_grid_point - H_realnums = self.fragment_stats.num_pixels_in_box * (2 if is_complex else 1) * realnums_per_grid_point - D_realnums = self.fragment_stats.num_pixels_in_box * (2 if is_complex else 1) * realnums_per_grid_point + E_realnums = ( + self.fragment_stats.num_pixels_in_box + * (2 if is_complex else 1) + * realnums_per_grid_point + ) + H_realnums = ( + self.fragment_stats.num_pixels_in_box + * (2 if is_complex else 1) + * realnums_per_grid_point + ) + D_realnums = ( + self.fragment_stats.num_pixels_in_box + * (2 if is_complex else 1) + * realnums_per_grid_point + ) chi1inv_realnums = self.fragment_stats.num_pixels_in_box * 9 Mu_realnums = 0 @@ -2134,10 +2345,18 @@ def get_estimated_memory_usage(self): Mu_realnums = chi1inv_realnums + H_realnums dft_realnums = self.fragment_stats.num_dft_pixels * 2 - dispersive_realnums = self.fragment_stats.num_susceptibility_pixels * 6 * (2 if is_complex else 1) + dispersive_realnums = ( + self.fragment_stats.num_susceptibility_pixels * 6 * (2 if is_complex else 1) + ) - total_realnums = (E_realnums + H_realnums + D_realnums + Mu_realnums + - dft_realnums + dispersive_realnums) + total_realnums = ( + E_realnums + + H_realnums + + D_realnums + + Mu_realnums + + dft_realnums + + dispersive_realnums + ) total_bytes = total_realnums * mp.get_realnum_size() @@ -2214,7 +2433,7 @@ def get_epsilon_point(self, pt, frequency=0): frequency-independent part of $\\varepsilon$ (the $\\omega\\to\\infty$ limit). """ v3 = py_v3_to_vec(self.dimensions, pt, self.is_cylindrical) - return self.fields.get_eps(v3,frequency) + return self.fields.get_eps(v3, frequency) def get_mu_point(self, pt, frequency=0): """ @@ -2224,7 +2443,7 @@ def get_mu_point(self, pt, frequency=0): frequency-independent part of $\\mu$ (the $\\omega\\to\\infty$ limit). """ v3 = py_v3_to_vec(self.dimensions, pt, self.is_cylindrical) - return self.fields.get_mu(v3,frequency) + return self.fields.get_mu(v3, frequency) def get_epsilon_grid(self, xtics=None, ytics=None, ztics=None, frequency=0): """ @@ -2238,19 +2457,27 @@ def get_epsilon_grid(self, xtics=None, ytics=None, ztics=None, frequency=0): sampling the material geometry to any arbitrary resolution. The return value is a NumPy array with shape equivalent to `numpy.meshgrid(xtics,ytics,ztics)`. Empty dimensions are collapsed. """ - grid_vals = np.squeeze(np.empty((len(xtics), len(ytics), len(ztics)), dtype=np.complex128)) + grid_vals = np.squeeze( + np.empty((len(xtics), len(ytics), len(ztics)), dtype=np.complex128) + ) gv = self._create_grid_volume(False) - mp._get_epsilon_grid(self.geometry, - self.extra_materials, - self.default_material, - self.ensure_periodicity and not not self.k_point, - gv, - self.cell_size, self.geometry_center, - len(xtics), xtics, - len(ytics), ytics, - len(ztics), ztics, - grid_vals, - frequency) + mp._get_epsilon_grid( + self.geometry, + self.extra_materials, + self.default_material, + self.ensure_periodicity and not not self.k_point, + gv, + self.cell_size, + self.geometry_center, + len(xtics), + xtics, + len(ytics), + ytics, + len(ztics), + ztics, + grid_vals, + frequency, + ) return grid_vals def get_filename_prefix(self): @@ -2269,14 +2496,16 @@ def get_filename_prefix(self): elif self.filename_prefix is None: _, filename = os.path.split(sys.argv[0]) - if filename == 'ipykernel_launcher.py' or filename == '__main__.py': - return '' + if filename == "ipykernel_launcher.py" or filename == "__main__.py": + return "" else: - return re.sub(r'\.py$', '', filename) + return re.sub(r"\.py$", "", filename) else: - raise TypeError("Expected a string for filename_prefix, or None for the default.") + raise TypeError( + "Expected a string for filename_prefix, or None for the default." + ) - def use_output_directory(self, dname=''): + def use_output_directory(self, dname=""): """ Output all files into a subdirectory, which is created if necessary. If the optional argument `dname` is specified, that is the name of the directory. If `dname` @@ -2286,17 +2515,17 @@ def use_output_directory(self, dname=''): name is set to `filename_prefix` + "-out" and `filename_prefix` is then reset to `None`. """ if not dname: - dname = self.get_filename_prefix() + '-out' + dname = self.get_filename_prefix() + "-out" - closure = {'trashed': False} + closure = {"trashed": False} def hook(): if verbosity.meep > 0: - print("Meep: using output directory '{}'".format(dname)) + print(f"Meep: using output directory '{dname}'") self.fields.set_output_directory(dname) - if not closure['trashed']: + if not closure["trashed"]: mp.trash_output_directory(dname) - closure['trashed'] = True + closure["trashed"] = True self.init_sim_hooks.append(hook) @@ -2326,34 +2555,46 @@ def stop_cond(sim): cond[i] = stop_cond step_funcs = list(step_funcs) - step_funcs.append(display_progress(t0, t0 + stop_time, self.progress_interval)) + step_funcs.append( + display_progress(t0, t0 + stop_time, self.progress_interval) + ) if do_progress: - self.progress = FloatProgress(value=t0, min=t0, max=t0 + stop_time, description="0% done ") + self.progress = FloatProgress( + value=t0, min=t0, max=t0 + stop_time, description="0% done " + ) display(self.progress) else: - assert callable(cond[i]), "Stopping condition {} is not an integer or a function".format(cond[i]) + assert callable( + cond[i] + ), "Stopping condition {} is not an integer or a function".format( + cond[i] + ) while not any([x(self) for x in cond]): for func in step_funcs: - _eval_step_func(self, func, 'step') + _eval_step_func(self, func, "step") self.fields.step() # Translating the recursive scheme version of run-until into an iterative version # (because python isn't tail-call-optimized) means we need one extra iteration to # be the same as scheme. for func in step_funcs: - _eval_step_func(self, func, 'step') + _eval_step_func(self, func, "step") for func in step_funcs: - _eval_step_func(self, func, 'finish') + _eval_step_func(self, func, "finish") if do_progress and self.progress: self.progress.value = t0 + stop_time self.progress.description = "100% done " if verbosity.meep > 0: - print("run {} finished at t = {} ({} timesteps)".format(self.run_index, self.meep_time(), self.fields.t)) + print( + "run {} finished at t = {} ({} timesteps)".format( + self.run_index, self.meep_time(), self.fields.t + ) + ) self.run_index += 1 def _run_sources_until(self, cond, step_funcs): @@ -2369,8 +2610,10 @@ def _run_sources_until(self, cond, step_funcs): if isinstance(cond[i], numbers.Number): new_conds.append((ts - self.round_time()) + cond[i]) else: + def f(sim): return cond[i](sim) and sim.round_time() >= ts + new_conds.append(f) self._run_until(new_conds, step_funcs) @@ -2392,12 +2635,20 @@ def run_k_point(self, t, k): components = [s.component for s in self.sources] pts = [s.center for s in self.sources] - src_freqs_min = min([s.src.frequency - 1 / s.src.width / 2 if isinstance(s.src, mp.GaussianSource) else mp.inf - for s in self.sources]) + src_freqs_min = min( + s.src.frequency - 1 / s.src.width / 2 + if isinstance(s.src, mp.GaussianSource) + else mp.inf + for s in self.sources + ) fmin = max(0, src_freqs_min) - fmax = max([s.src.frequency + 1 / s.src.width / 2 if isinstance(s.src, mp.GaussianSource) else 0 - for s in self.sources]) + fmax = max( + s.src.frequency + 1 / s.src.width / 2 + if isinstance(s.src, mp.GaussianSource) + else 0 + for s in self.sources + ) if not components or fmin > fmax: raise ValueError("Running with k_points requires a 'GaussianSource' source") @@ -2434,10 +2685,10 @@ def run_k_points(self, t, k_points): freqs = [complex(m.freq, m.decay) for m in harminv.modes] if verbosity.meep > 0: - print("freqs:, {}, {}, {}, {}, ".format(k_index, k.x, k.y, k.z), end='') - print(', '.join([str(f.real) for f in freqs])) - print("freqs-im:, {}, {}, {}, {}, ".format(k_index, k.x, k.y, k.z), end='') - print(', '.join([str(f.imag) for f in freqs])) + print(f"freqs:, {k_index}, {k.x}, {k.y}, {k.z}, ", end="") + print(", ".join([str(f.real) for f in freqs])) + print(f"freqs-im:, {k_index}, {k.x}, {k.y}, {k.z}, ", end="") + print(", ".join([str(f.imag) for f in freqs])) all_freqs.append(freqs) @@ -2447,7 +2698,9 @@ def set_epsilon(self, eps): if self.fields is None: self.init_sim() - self.structure.set_epsilon(eps, self.eps_averaging, self.subpixel_tol, self.subpixel_maxeval) + self.structure.set_epsilon( + eps, self.eps_averaging, self.subpixel_tol, self.subpixel_maxeval + ) def add_source(self, src): if self.fields is None: @@ -2455,11 +2708,21 @@ def add_source(self, src): if isinstance(src, IndexedSource): self.fields.register_src_time(src.src.swigobj) - self.fields.add_srcdata(src.srcdata, src.src.swigobj, src.num_pts, src.amp_arr, src.needs_boundary_fix) + self.fields.add_srcdata( + src.srcdata, + src.src.swigobj, + src.num_pts, + src.amp_arr, + src.needs_boundary_fix, + ) return - where = Volume(src.center, src.size, dims=self.dimensions, - is_cylindrical=self.is_cylindrical).swigobj + where = Volume( + src.center, + src.size, + dims=self.dimensions, + is_cylindrical=self.is_cylindrical, + ).swigobj if isinstance(src, EigenModeSource): if src.direction < 0: @@ -2467,8 +2730,12 @@ def add_source(self, src): else: direction = src.direction - eig_vol = Volume(src.eig_lattice_center, src.eig_lattice_size, self.dimensions, - is_cylindrical=self.is_cylindrical).swigobj + eig_vol = Volume( + src.eig_lattice_center, + src.eig_lattice_size, + self.dimensions, + is_cylindrical=self.is_cylindrical, + ).swigobj if isinstance(src.eig_band, DiffractedPlanewave): eig_band = 1 @@ -2483,46 +2750,66 @@ def add_source(self, src): where, eig_vol, eig_band, - py_v3_to_vec(self.dimensions, src.eig_kpoint, is_cylindrical=self.is_cylindrical), + py_v3_to_vec( + self.dimensions, src.eig_kpoint, is_cylindrical=self.is_cylindrical + ), src.eig_match_freq, src.eig_parity, src.eig_resolution, src.eig_tolerance, - src.amplitude + src.amplitude, ] - add_eig_src = functools.partial(self.fields.add_eigenmode_source, *add_eig_src_args) + add_eig_src = functools.partial( + self.fields.add_eigenmode_source, *add_eig_src_args + ) if isinstance(src.eig_band, DiffractedPlanewave): add_eig_src(src.amp_func, diffractedplanewave) else: add_eig_src(src.amp_func) - elif isinstance (src, GaussianBeamSource): + elif isinstance(src, GaussianBeamSource): gaussianbeam_args = [ - py_v3_to_vec(self.dimensions, src.beam_x0, is_cylindrical=self.is_cylindrical), - py_v3_to_vec(self.dimensions, src.beam_kdir, is_cylindrical=self.is_cylindrical), + py_v3_to_vec( + self.dimensions, src.beam_x0, is_cylindrical=self.is_cylindrical + ), + py_v3_to_vec( + self.dimensions, src.beam_kdir, is_cylindrical=self.is_cylindrical + ), src.beam_w0, src.src.swigobj.frequency().real, - self.fields.get_eps(py_v3_to_vec(self.dimensions, src.center, self.is_cylindrical)).real, - self.fields.get_mu(py_v3_to_vec(self.dimensions, src.center, self.is_cylindrical)).real, - np.array([src.beam_E0.x, src.beam_E0.y, src.beam_E0.z], dtype=np.complex128) + self.fields.get_eps( + py_v3_to_vec(self.dimensions, src.center, self.is_cylindrical) + ).real, + self.fields.get_mu( + py_v3_to_vec(self.dimensions, src.center, self.is_cylindrical) + ).real, + np.array( + [src.beam_E0.x, src.beam_E0.y, src.beam_E0.z], dtype=np.complex128 + ), ] gaussianbeam = mp.gaussianbeam(*gaussianbeam_args) add_vol_src_args = [src.src.swigobj, where, gaussianbeam] - add_vol_src = functools.partial(self.fields.add_volume_source, *add_vol_src_args) + add_vol_src = functools.partial( + self.fields.add_volume_source, *add_vol_src_args + ) add_vol_src() else: add_vol_src_args = [src.component, src.src.swigobj, where] - add_vol_src = functools.partial(self.fields.add_volume_source, *add_vol_src_args) + add_vol_src = functools.partial( + self.fields.add_volume_source, *add_vol_src_args + ) if src.amp_func_file: - fname_dset = src.amp_func_file.rsplit(':', 1) + fname_dset = src.amp_func_file.rsplit(":", 1) if len(fname_dset) != 2: - err_msg = "Expected a string of the form 'h5filename:dataset'. Got '{}'" + err_msg = ( + "Expected a string of the form 'h5filename:dataset'. Got '{}'" + ) raise ValueError(err_msg.format(src.amp_func_file)) fname, dset = fname_dset - if not fname.endswith('.h5'): - fname += '.h5' + if not fname.endswith(".h5"): + fname += ".h5" add_vol_src(fname, dset, src.amplitude * 1.0) elif src.amp_func: @@ -2534,17 +2821,16 @@ def add_source(self, src): def add_sources(self): if self.fields is None: - self.init_sim() # in case only some processes have IndexedSources + self.init_sim() # in case only some processes have IndexedSources for s in self.sources: self.add_source(s) - self.fields.require_source_components() # needed by IndexedSource objects + self.fields.require_source_components() # needed by IndexedSource objects def _evaluate_dft_objects(self): for dft in self.dft_objects: if dft.swigobj is None: dft.swigobj = dft.func(*dft.args) - def add_dft_fields(self, *args, **kwargs): """ `add_dft_fields(cs, fcen, df, nfreq, freq, where=None, center=None, size=None, yee_grid=False, decimation_factor=0, persist=False)` ##sig @@ -2569,32 +2855,51 @@ def add_dft_fields(self, *args, **kwargs): components = args[0] args = fix_dft_args(args, 1) freq = args[1] - where = kwargs.get('where', None) - center = kwargs.get('center', None) - size = kwargs.get('size', None) - yee_grid = kwargs.get('yee_grid', False) - decimation_factor = kwargs.get('decimation_factor', 0) - persist = kwargs.get('persist', False) + where = kwargs.get("where", None) + center = kwargs.get("center", None) + size = kwargs.get("size", None) + yee_grid = kwargs.get("yee_grid", False) + decimation_factor = kwargs.get("decimation_factor", 0) + persist = kwargs.get("persist", False) center_v3 = Vector3(*center) if center is not None else None size_v3 = Vector3(*size) if size is not None else None use_centered_grid = not yee_grid - dftf = DftFields(self._add_dft_fields, [ - components, where, center_v3, size_v3, freq, use_centered_grid, - decimation_factor,persist - ]) + dftf = DftFields( + self._add_dft_fields, + [ + components, + where, + center_v3, + size_v3, + freq, + use_centered_grid, + decimation_factor, + persist, + ], + ) self.dft_objects.append(dftf) return dftf - def _add_dft_fields(self, components, where, center, size, freq, - use_centered_grid, decimation_factor, persist): + def _add_dft_fields( + self, + components, + where, + center, + size, + freq, + use_centered_grid, + decimation_factor, + persist, + ): if self.fields is None: self.init_sim() try: where = self._volume_from_kwargs(where, center, size) except ValueError: where = self.fields.total_volume() - return self.fields.add_dft_fields(components, where, freq, - use_centered_grid, decimation_factor, persist) + return self.fields.add_dft_fields( + components, where, freq, use_centered_grid, decimation_factor, persist + ) def output_dft(self, dft_fields, fname): """ @@ -2606,9 +2911,11 @@ def output_dft(self, dft_fields, fname): self.init_sim() if not self.dft_objects: - raise RuntimeError('DFT monitor dft_fields must be initialized before calling output_dft') + raise RuntimeError( + "DFT monitor dft_fields must be initialized before calling output_dft" + ) - if hasattr(dft_fields, 'swigobj'): + if hasattr(dft_fields, "swigobj"): dft_fields_swigobj = dft_fields.swigobj else: dft_fields_swigobj = dft_fields @@ -2642,17 +2949,20 @@ def add_near2far(self, *args, **kwargs): args = fix_dft_args(args, 0) freq = args[0] near2fars = args[1:] - nperiods = kwargs.get('nperiods', 1) - decimation_factor = kwargs.get('decimation_factor', 0) - n2f = DftNear2Far(self._add_near2far, [freq, nperiods, near2fars, decimation_factor]) + nperiods = kwargs.get("nperiods", 1) + decimation_factor = kwargs.get("decimation_factor", 0) + n2f = DftNear2Far( + self._add_near2far, [freq, nperiods, near2fars, decimation_factor] + ) self.dft_objects.append(n2f) return n2f def _add_near2far(self, freq, nperiods, near2fars, decimation_factor): if self.fields is None: self.init_sim() - return self._add_fluxish_stuff(self.fields.add_dft_near2far, freq, near2fars, - decimation_factor, nperiods) + return self._add_fluxish_stuff( + self.fields.add_dft_near2far, freq, near2fars, decimation_factor, nperiods + ) def add_energy(self, *args, **kwargs): """ @@ -2675,7 +2985,7 @@ def add_energy(self, *args, **kwargs): args = fix_dft_args(args, 0) freq = args[0] energys = args[1:] - decimation_factor = kwargs.get('decimation_factor', 0) + decimation_factor = kwargs.get("decimation_factor", 0) en = DftEnergy(self._add_energy, [freq, energys, decimation_factor]) self.dft_objects.append(en) return en @@ -2683,14 +2993,19 @@ def add_energy(self, *args, **kwargs): def _add_energy(self, freq, energys, decimation_factor): if self.fields is None: self.init_sim() - return self._add_fluxish_stuff(self.fields.add_dft_energy, freq, energys, - decimation_factor) + return self._add_fluxish_stuff( + self.fields.add_dft_energy, freq, energys, decimation_factor + ) def _display_energy(self, name, func, energys): if energys: freqs = get_energy_freqs(energys[0]) if verbosity.meep > 0: - display_csv(self, "{}-energy".format(name), zip(freqs, *[func(f) for f in energys])) + display_csv( + self, + f"{name}-energy", + zip(freqs, *[func(f) for f in energys]), + ) def display_electric_energy(self, *energys): """ @@ -2700,7 +3015,7 @@ def display_electric_energy(self, *energys): All of the energy should be for the same `fcen`/`df`/`nfreq` or `freq`. The first column are the frequencies, and subsequent columns are the energy density spectra. """ - self._display_energy('electric', get_electric_energy, energys) + self._display_energy("electric", get_electric_energy, energys) def display_magnetic_energy(self, *energys): """ @@ -2710,7 +3025,7 @@ def display_magnetic_energy(self, *energys): All of the energy should be for the same `fcen`/`df`/`nfreq` or `freq`. The first column are the frequencies, and subsequent columns are the energy density spectra. """ - self._display_energy('magnetic', get_magnetic_energy, energys) + self._display_energy("magnetic", get_magnetic_energy, energys) def display_total_energy(self, *energys): """ @@ -2720,7 +3035,7 @@ def display_total_energy(self, *energys): be for the same `fcen`/`df`/`nfreq` or `freq`. The first column are the frequencies, and subsequent columns are the energy density spectra. """ - self._display_energy('total', get_total_energy, energys) + self._display_energy("total", get_total_energy, energys) def load_energy(self, fname, energy): """ @@ -2733,7 +3048,7 @@ def load_energy(self, fname, energy): """ if self.fields is None: self.init_sim() - energy.load_hdf5(self.fields, fname, '', self.get_filename_prefix()) + energy.load_hdf5(self.fields, fname, "", self.get_filename_prefix()) def save_energy(self, fname, energy): """ @@ -2743,7 +3058,7 @@ def save_energy(self, fname, energy): """ if self.fields is None: self.init_sim() - energy.save_hdf5(self.fields, fname, '', self.get_filename_prefix()) + energy.save_hdf5(self.fields, fname, "", self.get_filename_prefix()) def load_minus_energy(self, fname, energy): """ @@ -2764,7 +3079,10 @@ def get_farfield(self, near2far, x): $(E_r^1,E_\\phi^1,E_z^1,H_r^1,H_\\phi^1,H_z^1,E_r^2,E_\\phi^2,E_z^2,H_r^2,H_\\phi^2,H_z^2,...)$ in cylindrical coordinates for the frequencies 1,2,...,`nfreq`. """ - return mp._get_farfield(near2far.swigobj, py_v3_to_vec(self.dimensions, x, is_cylindrical=self.is_cylindrical)) + return mp._get_farfield( + near2far.swigobj, + py_v3_to_vec(self.dimensions, x, is_cylindrical=self.is_cylindrical), + ) def get_farfields(self, near2far, resolution, where=None, center=None, size=None): """ @@ -2791,15 +3109,17 @@ def get_farfields(self, near2far, resolution, where=None, center=None, size=None res_hy = complexarray(result[8], result[9]) res_hz = complexarray(result[10], result[11]) return { - 'Ex': res_ex, - 'Ey': res_ey, - 'Ez': res_ez, - 'Hx': res_hx, - 'Hy': res_hy, - 'Hz': res_hz, + "Ex": res_ex, + "Ey": res_ey, + "Ez": res_ez, + "Hx": res_hx, + "Hy": res_hy, + "Hz": res_hz, } - def output_farfields(self, near2far, fname, resolution, where=None, center=None, size=None): + def output_farfields( + self, near2far, fname, resolution, where=None, center=None, size=None + ): """ Given an HDF5 file name `fname` (does *not* include the `.h5` suffix), a `Volume` given by `where` (may be 0d, 1d, 2d, or 3d), and a `resolution` (in grid points / @@ -2830,7 +3150,7 @@ def load_near2far(self, fname, near2far): """ if self.fields is None: self.init_sim() - near2far.load_hdf5(self.fields, fname, '', self.get_filename_prefix()) + near2far.load_hdf5(self.fields, fname, "", self.get_filename_prefix()) def save_near2far(self, fname, near2far): """ @@ -2840,7 +3160,7 @@ def save_near2far(self, fname, near2far): """ if self.fields is None: self.init_sim() - near2far.save_hdf5(self.fields, fname, '', self.get_filename_prefix()) + near2far.save_hdf5(self.fields, fname, "", self.get_filename_prefix()) def load_minus_near2far(self, fname, near2far): """ @@ -2900,7 +3220,7 @@ def add_force(self, *args, **kwargs): args = fix_dft_args(args, 0) freq = args[0] forces = args[1:] - decimation_factor = kwargs.get('decimation_factor', 0) + decimation_factor = kwargs.get("decimation_factor", 0) force = DftForce(self._add_force, [freq, forces, decimation_factor]) self.dft_objects.append(force) return force @@ -2908,8 +3228,9 @@ def add_force(self, *args, **kwargs): def _add_force(self, freq, forces, decimation_factor): if self.fields is None: self.init_sim() - return self._add_fluxish_stuff(self.fields.add_dft_force, freq, forces, - decimation_factor) + return self._add_fluxish_stuff( + self.fields.add_dft_force, freq, forces, decimation_factor + ) def display_forces(self, *forces): """ @@ -2921,7 +3242,9 @@ def display_forces(self, *forces): """ force_freqs = get_force_freqs(forces[0]) if verbosity.meep > 0: - display_csv(self, 'force', zip(force_freqs, *[get_forces(f) for f in forces])) + display_csv( + self, "force", zip(force_freqs, *[get_forces(f) for f in forces]) + ) def load_force(self, fname, force): """ @@ -2934,7 +3257,7 @@ def load_force(self, fname, force): """ if self.fields is None: self.init_sim() - force.load_hdf5(self.fields, fname, '', self.get_filename_prefix()) + force.load_hdf5(self.fields, fname, "", self.get_filename_prefix()) def save_force(self, fname, force): """ @@ -2944,7 +3267,7 @@ def save_force(self, fname, force): """ if self.fields is None: self.init_sim() - force.save_hdf5(self.fields, fname, '', self.get_filename_prefix()) + force.save_hdf5(self.fields, fname, "", self.get_filename_prefix()) def load_minus_force(self, fname, force): """ @@ -2962,9 +3285,11 @@ def get_force_data(self, force): only useful for passing to `load_force_data` below and should be considered opaque. """ - return ForceData(offdiag1=self.get_dft_data(force.offdiag1), - offdiag2=self.get_dft_data(force.offdiag2), - diag=self.get_dft_data(force.diag)) + return ForceData( + offdiag1=self.get_dft_data(force.offdiag1), + offdiag2=self.get_dft_data(force.offdiag2), + diag=self.get_dft_data(force.diag), + ) def load_force_data(self, force, fdata): """ @@ -3010,7 +3335,7 @@ def add_flux(self, *args, **kwargs): args = fix_dft_args(args, 0) freq = args[0] fluxes = args[1:] - decimation_factor = kwargs.get('decimation_factor', 0) + decimation_factor = kwargs.get("decimation_factor", 0) flux = DftFlux(self._add_flux, [freq, fluxes, decimation_factor]) self.dft_objects.append(flux) return flux @@ -3018,8 +3343,9 @@ def add_flux(self, *args, **kwargs): def _add_flux(self, freq, fluxes, decimation_factor): if self.fields is None: self.init_sim() - return self._add_fluxish_stuff(self.fields.add_dft_flux, - freq, fluxes, decimation_factor) + return self._add_fluxish_stuff( + self.fields.add_dft_flux, freq, fluxes, decimation_factor + ) def add_mode_monitor(self, *args, **kwargs): """ @@ -3030,9 +3356,11 @@ def add_mode_monitor(self, *args, **kwargs): args = fix_dft_args(args, 0) freq = args[0] fluxes = args[1:] - decimation_factor = kwargs.get('decimation_factor', 0) + decimation_factor = kwargs.get("decimation_factor", 0) yee_grid = kwargs.get("yee_grid", False) - flux = DftFlux(self._add_mode_monitor, [freq, fluxes, yee_grid, decimation_factor]) + flux = DftFlux( + self._add_mode_monitor, [freq, fluxes, yee_grid, decimation_factor] + ) self.dft_objects.append(flux) return flux @@ -3041,15 +3369,26 @@ def _add_mode_monitor(self, freq, fluxes, yee_grid, decimation_factor): self.init_sim() if len(fluxes) != 1: - raise ValueError("add_mode_monitor expected just one ModeRegion. Got {}".format(len(fluxes))) + raise ValueError( + "add_mode_monitor expected just one ModeRegion. Got {}".format( + len(fluxes) + ) + ) region = fluxes[0] centered_grid = not yee_grid - v = mp.Volume(region.center, region.size, dims=self.dimensions, is_cylindrical=self.is_cylindrical) + v = mp.Volume( + region.center, + region.size, + dims=self.dimensions, + is_cylindrical=self.is_cylindrical, + ) d0 = region.direction d = self.fields.normal_direction(v.swigobj) if d0 < 0 else d0 - return self.fields.add_mode_monitor(d, v.swigobj, freq, centered_grid, decimation_factor) + return self.fields.add_mode_monitor( + d, v.swigobj, freq, centered_grid, decimation_factor + ) def display_fluxes(self, *fluxes): """ @@ -3060,7 +3399,11 @@ def display_fluxes(self, *fluxes): subsequent columns are the flux spectra. """ if verbosity.meep > 0: - display_csv(self, 'flux', zip(get_flux_freqs(fluxes[0]), *[get_fluxes(f) for f in fluxes])) + display_csv( + self, + "flux", + zip(get_flux_freqs(fluxes[0]), *[get_fluxes(f) for f in fluxes]), + ) def load_flux(self, fname, flux): """ @@ -3074,7 +3417,7 @@ def load_flux(self, fname, flux): if self.fields is None: self.init_sim() - flux.load_hdf5(self.fields, fname, '', self.get_filename_prefix()) + flux.load_hdf5(self.fields, fname, "", self.get_filename_prefix()) load_mode = load_flux @@ -3087,7 +3430,7 @@ def save_flux(self, fname, flux): if self.fields is None: self.init_sim() - flux.save_hdf5(self.fields, fname, '', self.get_filename_prefix()) + flux.save_hdf5(self.fields, fname, "", self.get_filename_prefix()) save_mode = save_flux @@ -3148,7 +3491,7 @@ def flux_in_box(self, d, box=None, center=None, size=None): construct the appropriate volume for you. """ if self.fields is None: - raise RuntimeError('Fields must be initialized before using flux_in_box') + raise RuntimeError("Fields must be initialized before using flux_in_box") box = self._volume_from_kwargs(box, center, size) @@ -3167,7 +3510,9 @@ def electric_energy_in_box(self, box=None, center=None, size=None): volume. """ if self.fields is None: - raise RuntimeError('Fields must be initialized before using electric_energy_in_box') + raise RuntimeError( + "Fields must be initialized before using electric_energy_in_box" + ) box = self._volume_from_kwargs(box, center, size) @@ -3186,7 +3531,9 @@ def magnetic_energy_in_box(self, box=None, center=None, size=None): volume. """ if self.fields is None: - raise RuntimeError('Fields must be initialized before using magnetic_energy_in_box') + raise RuntimeError( + "Fields must be initialized before using magnetic_energy_in_box" + ) box = self._volume_from_kwargs(box, center, size) @@ -3205,7 +3552,9 @@ def field_energy_in_box(self, box=None, center=None, size=None): volume. """ if self.fields is None: - raise RuntimeError('Fields must be initialized before using field_energy_in_box') + raise RuntimeError( + "Fields must be initialized before using field_energy_in_box" + ) box = self._volume_from_kwargs(box, center, size) @@ -3237,7 +3586,9 @@ def modal_volume_in_box(self, box=None, center=None, size=None): via the functions: """ if self.fields is None: - raise RuntimeError('Fields must be initialized before using modal_volume_in_box') + raise RuntimeError( + "Fields must be initialized before using modal_volume_in_box" + ) try: box = self._volume_from_kwargs(box, center, size) @@ -3248,35 +3599,50 @@ def modal_volume_in_box(self, box=None, center=None, size=None): def solve_cw(self, tol=1e-8, maxiters=10000, L=2): if self.fields is None: - raise RuntimeError('Fields must be initialized before using solve_cw') + raise RuntimeError("Fields must be initialized before using solve_cw") self._evaluate_dft_objects() return self.fields.solve_cw(tol, maxiters, L) - def solve_eigfreq(self, tol=1e-7, maxiters=100, - guessfreq=None, cwtol=None, cwmaxiters=10000, L=10): + def solve_eigfreq( + self, tol=1e-7, maxiters=100, guessfreq=None, cwtol=None, cwmaxiters=10000, L=10 + ): if self.fields is None: - raise RuntimeError('Fields must be initialized before using solve_cw') + raise RuntimeError("Fields must be initialized before using solve_cw") if cwtol is None: - cwtol = tol * 1e-3 # solve CW problems much more accurately than eigenvalue tolerance + cwtol = ( + tol * 1e-3 + ) # solve CW problems much more accurately than eigenvalue tolerance self._evaluate_dft_objects() eigfreq = np.array(0, dtype=np.complex128) if guessfreq is None: self.fields.solve_cw(cwtol, cwmaxiters, L, eigfreq, tol, maxiters) else: - self.fields.solve_cw(cwtol, cwmaxiters, guessfreq, L, eigfreq, tol, maxiters) + self.fields.solve_cw( + cwtol, cwmaxiters, guessfreq, L, eigfreq, tol, maxiters + ) return eigfreq.item() - def _add_fluxish_stuff(self, add_dft_stuff, freq, stufflist, decimation_factor, *args): + def _add_fluxish_stuff( + self, add_dft_stuff, freq, stufflist, decimation_factor, *args + ): vol_list = None for s in stufflist: - v = Volume(center=s.center, size=s.size, dims=self.dimensions, - is_cylindrical=self.is_cylindrical) + v = Volume( + center=s.center, + size=s.size, + dims=self.dimensions, + is_cylindrical=self.is_cylindrical, + ) d0 = s.direction d = self.fields.normal_direction(v.swigobj) if d0 < 0 else d0 c = mp.direction_component(mp.Sx, d) - v2 = Volume(center=s.center, size=s.size, dims=self.dimensions, - is_cylindrical=self.is_cylindrical).swigobj + v2 = Volume( + center=s.center, + size=s.size, + dims=self.dimensions, + is_cylindrical=self.is_cylindrical, + ).swigobj vol_list = mp.make_volume_list(v2, c, s.weight, vol_list) stuff = add_dft_stuff(vol_list, freq, decimation_factor, *args) vol_list.__swig_destroy__(vol_list) @@ -3285,26 +3651,46 @@ def _add_fluxish_stuff(self, add_dft_stuff, freq, stufflist, decimation_factor, def output_component(self, c, h5file=None, frequency=0): if self.fields is None: - raise RuntimeError("Fields must be initialized before calling output_component") + raise RuntimeError( + "Fields must be initialized before calling output_component" + ) - vol = self.fields.total_volume() if self.output_volume is None else self.output_volume + vol = ( + self.fields.total_volume() + if self.output_volume is None + else self.output_volume + ) h5 = self.output_append_h5 if h5file is None else h5file append = h5file is None and self.output_append_h5 is not None - self.fields.output_hdf5(c, vol, h5, append, self.output_single_precision,self.get_filename_prefix(), frequency) + self.fields.output_hdf5( + c, + vol, + h5, + append, + self.output_single_precision, + self.get_filename_prefix(), + frequency, + ) if h5file is None: - nm = self.fields.h5file_name(mp.component_name(c), self.get_filename_prefix(), True) + nm = self.fields.h5file_name( + mp.component_name(c), self.get_filename_prefix(), True + ) if c == mp.Dielectric: self.last_eps_filename = nm self.output_h5_hook(nm) def output_components(self, fname, *components): if self.fields is None: - raise RuntimeError("Fields must be initialized before calling output_component") + raise RuntimeError( + "Fields must be initialized before calling output_component" + ) if self.output_append_h5 is None: - f = self.fields.open_h5file(fname, mp.h5file.WRITE, self.get_filename_prefix(), True) + f = self.fields.open_h5file( + fname, mp.h5file.WRITE, self.get_filename_prefix(), True + ) else: f = None @@ -3314,14 +3700,26 @@ def output_components(self, fname, *components): f.prevent_deadlock() if self.output_append_h5 is None: - self.output_h5_hook(self.fields.h5file_name(fname, self.get_filename_prefix(), True)) + self.output_h5_hook( + self.fields.h5file_name(fname, self.get_filename_prefix(), True) + ) def h5topng(self, rm_h5, option, *step_funcs): - opts = "h5topng {}".format(option) - cmd = re.sub(r'\$EPS', self.last_eps_filename, opts) + opts = f"h5topng {option}" + cmd = re.sub(r"\$EPS", self.last_eps_filename, opts) return convert_h5(rm_h5, cmd, *step_funcs) - def get_array(self, component=None, vol=None, center=None, size=None, cmplx=None, arr=None, frequency=0, snap=False): + def get_array( + self, + component=None, + vol=None, + center=None, + size=None, + cmplx=None, + arr=None, + frequency=0, + snap=False, + ): """ Takes as input a subregion of the cell and the field/material component. The method returns a NumPy array containing values of the field/material at the @@ -3396,23 +3794,31 @@ def get_array(self, component=None, vol=None, center=None, size=None, cmplx=None else: v = self._volume_from_kwargs(vol, center, size) - _, dirs = mp._get_array_slice_dimensions(self.fields, v, dim_sizes, not snap, snap) + _, dirs = mp._get_array_slice_dimensions( + self.fields, v, dim_sizes, not snap, snap + ) dims = [s for s in dim_sizes if s != 0] if cmplx is None: - cmplx = frequency != 0 or (component < mp.Dielectric and not self.fields.is_real) + cmplx = frequency != 0 or ( + component < mp.Dielectric and not self.fields.is_real + ) if arr is not None: if cmplx and not np.iscomplexobj(arr): - raise ValueError("Requested a complex slice, but provided array of type {}.".format(arr.dtype)) + raise ValueError( + "Requested a complex slice, but provided array of type {}.".format( + arr.dtype + ) + ) for a, b in zip(arr.shape, dims): if a != b: fmt = "Expected dimensions {}, but got {}" raise ValueError(fmt.format(dims, arr.shape)) - arr = np.require(arr, requirements=['C', 'W']) + arr = np.require(arr, requirements=["C", "W"]) else: if mp.is_single_precision(): @@ -3444,23 +3850,29 @@ def get_dft_array(self, dft_obj, component, num_freq): `nfreq` parameter to `add_dft_fields`, `add_flux`, etc. """ if not self.dft_objects: - raise RuntimeError('DFT monitor dft_obj must be initialized before calling get_dft_array') + raise RuntimeError( + "DFT monitor dft_obj must be initialized before calling get_dft_array" + ) - if hasattr(dft_obj, 'swigobj'): + if hasattr(dft_obj, "swigobj"): dft_swigobj = dft_obj.swigobj else: dft_swigobj = dft_obj if type(dft_swigobj) is mp.dft_fields: - return mp.get_dft_fields_array(self.fields, dft_swigobj, component, num_freq) + return mp.get_dft_fields_array( + self.fields, dft_swigobj, component, num_freq + ) elif type(dft_swigobj) is mp.dft_flux: return mp.get_dft_flux_array(self.fields, dft_swigobj, component, num_freq) elif type(dft_swigobj) is mp.dft_force: return mp.get_dft_force_array(self.fields, dft_swigobj, component, num_freq) elif type(dft_swigobj) is mp.dft_near2far: - return mp.get_dft_near2far_array(self.fields, dft_swigobj, component, num_freq) + return mp.get_dft_near2far_array( + self.fields, dft_swigobj, component, num_freq + ) else: - raise ValueError("Invalid type of dft object: {}".format(dft_swigobj)) + raise ValueError(f"Invalid type of dft object: {dft_swigobj}") def get_source(self, component, vol=None, center=None, size=None): """ @@ -3476,12 +3888,15 @@ def get_source(self, component, vol=None, center=None, size=None): dim_sizes = np.zeros(3, dtype=np.uintp) mp._get_array_slice_dimensions(self.fields, v, dim_sizes, True, False) dims = [s for s in dim_sizes if s != 0] - arr = np.zeros(dims, dtype=np.complex64 if mp.is_single_precision() else np.complex128) + arr = np.zeros( + dims, dtype=np.complex64 if mp.is_single_precision() else np.complex128 + ) self.fields.get_source_slice(v, component, arr) return arr - def get_array_metadata(self, vol=None, center=None, size=None, dft_cell=None, - return_pw=False): + def get_array_metadata( + self, vol=None, center=None, size=None, dft_cell=None, return_pw=False + ): """ This routine provides geometric information useful for interpreting the arrays returned by `get_array` or `get_dft_array` for the spatial region defined by `vol` @@ -3527,13 +3942,15 @@ def get_array_metadata(self, vol=None, center=None, size=None, dft_cell=None, offset, tics = 0, [] for n in range(3): N = int(xyzw_vector[offset]) - tics.append( xyzw_vector[offset+1:offset+1+N] ) - offset += 1+N - wshape = [len(t) for t in tics if len(t)>1] + tics.append(xyzw_vector[offset + 1 : offset + 1 + N]) + offset += 1 + N + wshape = [len(t) for t in tics if len(t) > 1] weights = np.reshape(xyzw_vector[offset:], wshape) if return_pw: - points=[ mp.Vector3(x,y,z) for x in tics[0] for y in tics[1] for z in tics[2] ] - return points,weights + points = [ + mp.Vector3(x, y, z) for x in tics[0] for y in tics[1] for z in tics[2] + ] + return points, weights return tuple(tics) + (weights,) def get_array_slice_dimensions(self, component, vol=None, center=None, size=None): @@ -3552,14 +3969,25 @@ def get_array_slice_dimensions(self, component, vol=None, center=None, size=None v = self._volume_from_kwargs(vol, center, size) dim_sizes = np.zeros(3, dtype=np.uintp) corners = [] - _,_ = mp._get_array_slice_dimensions(self.fields, v, dim_sizes, False, False, component, corners) - dim_sizes[dim_sizes==0] = 1 + _, _ = mp._get_array_slice_dimensions( + self.fields, v, dim_sizes, False, False, component, corners + ) + dim_sizes[dim_sizes == 0] = 1 min_corner = corners[0] max_corner = corners[1] return dim_sizes, min_corner, max_corner - def get_eigenmode_coefficients(self, flux, bands, eig_parity=mp.NO_PARITY, eig_vol=None, - eig_resolution=0, eig_tolerance=1e-12, kpoint_func=None, direction=mp.AUTOMATIC): + def get_eigenmode_coefficients( + self, + flux, + bands, + eig_parity=mp.NO_PARITY, + eig_vol=None, + eig_resolution=0, + eig_tolerance=1e-12, + kpoint_func=None, + direction=mp.AUTOMATIC, + ): """ Given a flux object and list of band indices `bands` or `DiffractedPlanewave`, return a `namedtuple` with the following fields: @@ -3575,7 +4003,9 @@ def get_eigenmode_coefficients(self, flux, bands, eig_parity=mp.NO_PARITY, eig_v calculations. """ if self.fields is None: - raise ValueError("Fields must be initialized before calling get_eigenmode_coefficients") + raise ValueError( + "Fields must be initialized before calling get_eigenmode_coefficients" + ) if eig_vol is None: eig_vol = flux.where else: @@ -3584,7 +4014,7 @@ def get_eigenmode_coefficients(self, flux, bands, eig_parity=mp.NO_PARITY, eig_v direction = flux.normal_direction try: - bands_list_range = isinstance(bands, (list,range)) + bands_list_range = isinstance(bands, (list, range)) except TypeError: bands_list_range = isinstance(bands, list) @@ -3606,7 +4036,7 @@ def get_eigenmode_coefficients(self, flux, bands, eig_parity=mp.NO_PARITY, eig_v vgrp, kpoint_func, cscale, - direction + direction, ) elif isinstance(bands, DiffractedPlanewave): num_bands = 1 @@ -3627,15 +4057,34 @@ def get_eigenmode_coefficients(self, flux, bands, eig_parity=mp.NO_PARITY, eig_v vgrp, kpoint_func, cscale, - direction + direction, ) else: - raise TypeError("get_eigenmode_coefficients: bands must be either a list or DiffractedPlanewave object") + raise TypeError( + "get_eigenmode_coefficients: bands must be either a list or DiffractedPlanewave object" + ) - return EigCoeffsResult(np.reshape(coeffs, (num_bands, flux.freq.size(), 2)), vgrp, kpoints, kdom, cscale) + return EigCoeffsResult( + np.reshape(coeffs, (num_bands, flux.freq.size(), 2)), + vgrp, + kpoints, + kdom, + cscale, + ) - def get_eigenmode(self, frequency, direction, where, band_num, kpoint, eig_vol=None, match_frequency=True, - parity=mp.NO_PARITY, resolution=0, eigensolver_tol=1e-12): + def get_eigenmode( + self, + frequency, + direction, + where, + band_num, + kpoint, + eig_vol=None, + match_frequency=True, + parity=mp.NO_PARITY, + resolution=0, + eigensolver_tol=1e-12, + ): """ The parameters of this routine are the same as that of `get_eigenmode_coefficients` or `EigenModeSource`, but this function returns an @@ -3668,12 +4117,30 @@ def get_eigenmode(self, frequency, direction, where, band_num, kpoint, eig_vol=N swig_kpoint = mp.vec(kpoint.x, kpoint.y, kpoint.z) kdom = np.zeros(3) - emdata = mp._get_eigenmode(self.fields, frequency, direction, where, eig_vol, band_num, swig_kpoint, - match_frequency, parity, resolution, eigensolver_tol, kdom) + emdata = mp._get_eigenmode( + self.fields, + frequency, + direction, + where, + eig_vol, + band_num, + swig_kpoint, + match_frequency, + parity, + resolution, + eigensolver_tol, + kdom, + ) Gk = mp._get_eigenmode_Gk(emdata) - return EigenmodeData(emdata.band_num, emdata.frequency, emdata.group_velocity, Gk, - emdata, mp.Vector3(kdom[0], kdom[1], kdom[2])) + return EigenmodeData( + emdata.band_num, + emdata.frequency, + emdata.group_velocity, + Gk, + emdata, + mp.Vector3(kdom[0], kdom[1], kdom[2]), + ) def output_field_function(self, name, cs, func, real_only=False, h5file=None): """ @@ -3684,16 +4151,28 @@ def output_field_function(self, name, cs, func, real_only=False, h5file=None): `real_only` is True, only outputs the real part of `func`. """ if self.fields is None: - raise RuntimeError("Fields must be initialized before calling output_field_function") + raise RuntimeError( + "Fields must be initialized before calling output_field_function" + ) ov = self.output_volume if self.output_volume else self.fields.total_volume() h5 = self.output_append_h5 if h5file is None else h5file append = h5file is None and self.output_append_h5 is not None - self.fields.output_hdf5(name, [cs, func], ov, h5, append, self.output_single_precision, - self.get_filename_prefix(), real_only) + self.fields.output_hdf5( + name, + [cs, func], + ov, + h5, + append, + self.output_single_precision, + self.get_filename_prefix(), + real_only, + ) if h5file is None: - self.output_h5_hook(self.fields.h5file_name(name, self.get_filename_prefix(), True)) + self.output_h5_hook( + self.fields.h5file_name(name, self.get_filename_prefix(), True) + ) def _get_field_function_volume(self, where=None, center=None, size=None): try: @@ -3723,7 +4202,9 @@ def integrate_field_function(self, cs, func, where=None, center=None, size=None) where = self._get_field_function_volume(where, center, size) return self.fields.integrate([cs, func], where) - def integrate2_field_function(self, fields2, cs1, cs2, func, where=None, center=None, size=None): + def integrate2_field_function( + self, fields2, cs1, cs2, func, where=None, center=None, size=None + ): """ Similar to `integrate_field_function`, but takes additional parameters `fields2` and `cs2`. `fields2` is a `meep::fields*` object similar to the global `fields` @@ -3785,7 +4266,9 @@ def change_k_point(self, k): self.k_point = k if self.fields: - needs_complex_fields = not (not self.k_point or self.k_point == mp.Vector3()) + needs_complex_fields = not ( + not self.k_point or self.k_point == mp.Vector3() + ) if needs_complex_fields and self.fields.is_real: self.fields = None @@ -3793,7 +4276,9 @@ def change_k_point(self, k): self.init_sim() else: if self.k_point: - self.fields.use_bloch(py_v3_to_vec(self.dimensions, self.k_point, self.is_cylindrical)) + self.fields.use_bloch( + py_v3_to_vec(self.dimensions, self.k_point, self.is_cylindrical) + ) def change_sources(self, new_sources): """ @@ -3831,13 +4316,13 @@ def restart_fields(self): else: self._is_initialized = False self.init_sim() - + def clear_dft_monitors(self): """ Remove all of the dft monitors from the simulation. """ for m in self.dft_objects: - if not (isinstance(m,DftFields) and (m.chunks) and (m.chunks.persist)): + if not (isinstance(m, DftFields) and (m.chunks) and (m.chunks.persist)): m.remove() self.fields.clear_dft_monitors() @@ -3864,8 +4349,8 @@ def run(self, *step_funcs, **kwargs): returns `True`. Like `until` above, `until_after_sources` can take a list of stopping conditions. """ - until = kwargs.pop('until', None) - until_after_sources = kwargs.pop('until_after_sources', None) + until = kwargs.pop("until", None) + until_after_sources = kwargs.pop("until_after_sources", None) if self.fields is None: self.init_sim() @@ -3874,7 +4359,7 @@ def run(self, *step_funcs, **kwargs): self._check_material_frequencies() if kwargs: - raise ValueError("Unrecognized keyword arguments: {}".format(kwargs.keys())) + raise ValueError(f"Unrecognized keyword arguments: {kwargs.keys()}") if until_after_sources is not None: self._run_sources_until(until_after_sources, step_funcs) @@ -3940,26 +4425,26 @@ def output_times(self, fname): for each column and one row per process. """ if self.fields: - if not fname.endswith('.csv'): - fname += '.csv' + if not fname.endswith(".csv"): + fname += ".csv" self.fields.output_times(fname) - def get_epsilon(self,frequency=0,snap=False): - return self.get_array(component=mp.Dielectric,frequency=frequency,snap=snap) + def get_epsilon(self, frequency=0, snap=False): + return self.get_array(component=mp.Dielectric, frequency=frequency, snap=snap) - def get_mu(self,frequency=0,snap=False): - return self.get_array(component=mp.Permeability,frequency=frequency,snap=snap) + def get_mu(self, frequency=0, snap=False): + return self.get_array(component=mp.Permeability, frequency=frequency, snap=snap) - def get_hpwr(self,snap=False): - return self.get_array(component=mp.H_EnergyDensity,snap=snap) + def get_hpwr(self, snap=False): + return self.get_array(component=mp.H_EnergyDensity, snap=snap) - def get_dpwr(self,snap=False): - return self.get_array(component=mp.D_EnergyDensity,snap=snap) + def get_dpwr(self, snap=False): + return self.get_array(component=mp.D_EnergyDensity, snap=snap) - def get_tot_pwr(self,snap=False): - return self.get_array(component=mp.EnergyDensity,snap=snap) + def get_tot_pwr(self, snap=False): + return self.get_array(component=mp.EnergyDensity, snap=snap) - def get_hfield(self,snap=False): + def get_hfield(self, snap=False): if self.is_cylindrical: r = self.get_array(mp.Hr, cmplx=not self.fields.is_real, snap=snap) p = self.get_array(mp.Hp, cmplx=not self.fields.is_real, snap=snap) @@ -3970,22 +4455,22 @@ def get_hfield(self,snap=False): z = self.get_array(mp.Hz, cmplx=not self.fields.is_real, snap=snap) return np.stack([x, y, z], axis=-1) - def get_hfield_x(self,snap=False): + def get_hfield_x(self, snap=False): return self.get_array(mp.Hx, cmplx=not self.fields.is_real, snap=snap) - def get_hfield_y(self,snap=False): + def get_hfield_y(self, snap=False): return self.get_array(mp.Hy, cmplx=not self.fields.is_real, snap=snap) - def get_hfield_z(self,snap=False): + def get_hfield_z(self, snap=False): return self.get_array(mp.Hz, cmplx=not self.fields.is_real, snap=snap) - def get_hfield_r(self,snap=False): + def get_hfield_r(self, snap=False): return self.get_array(mp.Hr, cmplx=not self.fields.is_real, snap=snap) - def get_hfield_p(self,snap=False): + def get_hfield_p(self, snap=False): return self.get_array(mp.Hp, cmplx=not self.fields.is_real, snap=snap) - def get_bfield(self,snap=False): + def get_bfield(self, snap=False): if self.is_cylindrical: r = self.get_array(mp.Br, cmplx=not self.fields.is_real, snap=snap) p = self.get_array(mp.Bp, cmplx=not self.fields.is_real, snap=snap) @@ -3996,22 +4481,22 @@ def get_bfield(self,snap=False): z = self.get_array(mp.Bz, cmplx=not self.fields.is_real, snap=snap) return np.stack([x, y, z], axis=-1) - def get_bfield_x(self,snap=False): + def get_bfield_x(self, snap=False): return self.get_array(mp.Bx, cmplx=not self.fields.is_real, snap=snap) - def get_bfield_y(self,snap=False): + def get_bfield_y(self, snap=False): return self.get_array(mp.By, cmplx=not self.fields.is_real, snap=snap) - def get_bfield_z(self,snap=False): + def get_bfield_z(self, snap=False): return self.get_array(mp.Bz, cmplx=not self.fields.is_real, snap=snap) - def get_bfield_r(self,snap=False): + def get_bfield_r(self, snap=False): return self.get_array(mp.Br, cmplx=not self.fields.is_real, snap=snap) - def get_bfield_p(self,snap=False): + def get_bfield_p(self, snap=False): return self.get_array(mp.Bp, cmplx=not self.fields.is_real, snap=snap) - def get_efield(self,snap=False): + def get_efield(self, snap=False): if self.is_cylindrical: r = self.get_array(mp.Er, cmplx=not self.fields.is_real, snap=snap) p = self.get_array(mp.Ep, cmplx=not self.fields.is_real, snap=snap) @@ -4022,22 +4507,22 @@ def get_efield(self,snap=False): z = self.get_array(mp.Ez, cmplx=not self.fields.is_real, snap=snap) return np.stack([x, y, z], axis=-1) - def get_efield_x(self,snap=False): + def get_efield_x(self, snap=False): return self.get_array(mp.Ex, cmplx=not self.fields.is_real, snap=snap) - def get_efield_y(self,snap=False): + def get_efield_y(self, snap=False): return self.get_array(mp.Ey, cmplx=not self.fields.is_real, snap=snap) - def get_efield_z(self,snap=False): + def get_efield_z(self, snap=False): return self.get_array(mp.Ez, cmplx=not self.fields.is_real, snap=snap) - def get_efield_r(self,snap=False): + def get_efield_r(self, snap=False): return self.get_array(mp.Er, cmplx=not self.fields.is_real, snap=snap) - def get_efield_p(self,snap=False): + def get_efield_p(self, snap=False): return self.get_array(mp.Ep, cmplx=not self.fields.is_real, snap=snap) - def get_dfield(self,snap=False): + def get_dfield(self, snap=False): if self.is_cylindrical: r = self.get_array(mp.Dr, cmplx=not self.fields.is_real, snap=snap) p = self.get_array(mp.Dp, cmplx=not self.fields.is_real, snap=snap) @@ -4048,22 +4533,22 @@ def get_dfield(self,snap=False): z = self.get_array(mp.Dz, cmplx=not self.fields.is_real, snap=snap) return np.stack([x, y, z], axis=-1) - def get_dfield_x(self,snap=False): + def get_dfield_x(self, snap=False): return self.get_array(mp.Dx, cmplx=not self.fields.is_real, snap=snap) - def get_dfield_y(self,snap=False): + def get_dfield_y(self, snap=False): return self.get_array(mp.Dy, cmplx=not self.fields.is_real, snap=snap) - def get_dfield_z(self,snap=False): + def get_dfield_z(self, snap=False): return self.get_array(mp.Dz, cmplx=not self.fields.is_real, snap=snap) - def get_dfield_r(self,snap=False): + def get_dfield_r(self, snap=False): return self.get_array(mp.Dr, cmplx=not self.fields.is_real, snap=snap) - def get_dfield_p(self,snap=False): + def get_dfield_p(self, snap=False): return self.get_array(mp.Dp, cmplx=not self.fields.is_real, snap=snap) - def get_sfield(self,snap=False): + def get_sfield(self, snap=False): if self.is_cylindrical: r = self.get_array(mp.Sr, cmplx=not self.fields.is_real, snap=snap) p = self.get_array(mp.Sp, cmplx=not self.fields.is_real, snap=snap) @@ -4074,29 +4559,39 @@ def get_sfield(self,snap=False): z = self.get_array(mp.Sz, cmplx=not self.fields.is_real, snap=snap) return np.stack([x, y, z], axis=-1) - def get_sfield_x(self,snap=False): + def get_sfield_x(self, snap=False): return self.get_array(mp.Sx, cmplx=not self.fields.is_real, snap=snap) - def get_sfield_y(self,snap=False): + def get_sfield_y(self, snap=False): return self.get_array(mp.Sy, cmplx=not self.fields.is_real, snap=snap) - def get_sfield_z(self,snap=False): + def get_sfield_z(self, snap=False): return self.get_array(mp.Sz, cmplx=not self.fields.is_real, snap=snap) - def get_sfield_r(self,snap=False): + def get_sfield_r(self, snap=False): return self.get_array(mp.Sr, cmplx=not self.fields.is_real, snap=snap) - def get_sfield_p(self,snap=False): + def get_sfield_p(self, snap=False): return self.get_array(mp.Sp, cmplx=not self.fields.is_real, snap=snap) - - def plot2D(self, ax=None, output_plane=None, fields=None, labels=False, - eps_parameters=None, boundary_parameters=None, - source_parameters=None, monitor_parameters=None, - field_parameters=None, frequency=None, - plot_eps_flag=True, plot_sources_flag=True, - plot_monitors_flag=True, plot_boundaries_flag=True, - **kwargs): + def plot2D( + self, + ax=None, + output_plane=None, + fields=None, + labels=False, + eps_parameters=None, + boundary_parameters=None, + source_parameters=None, + monitor_parameters=None, + field_parameters=None, + frequency=None, + plot_eps_flag=True, + plot_sources_flag=True, + plot_monitors_flag=True, + plot_boundaries_flag=True, + **kwargs, + ): """ Plots a 2D cross section of the simulation domain using `matplotlib`. The plot includes the geometry, boundary layers, sources, and monitors. Fields can also be @@ -4185,22 +4680,24 @@ def plot2D(self, ax=None, output_plane=None, fields=None, labels=False, - `post_process=np.real`: post processing function to apply to fields (must be a function object) """ - return vis.plot2D(self, - ax=ax, - output_plane=output_plane, - fields=fields, - labels=labels, - eps_parameters=eps_parameters, - boundary_parameters=boundary_parameters, - source_parameters=source_parameters, - monitor_parameters=monitor_parameters, - field_parameters=field_parameters, - frequency=frequency, - plot_eps_flag=plot_eps_flag, - plot_sources_flag=plot_sources_flag, - plot_monitors_flag=plot_monitors_flag, - plot_boundaries_flag=plot_boundaries_flag, - **kwargs) + return vis.plot2D( + self, + ax=ax, + output_plane=output_plane, + fields=fields, + labels=labels, + eps_parameters=eps_parameters, + boundary_parameters=boundary_parameters, + source_parameters=source_parameters, + monitor_parameters=monitor_parameters, + field_parameters=field_parameters, + frequency=frequency, + plot_eps_flag=plot_eps_flag, + plot_sources_flag=plot_sources_flag, + plot_monitors_flag=plot_monitors_flag, + plot_boundaries_flag=plot_boundaries_flag, + **kwargs, + ) def plot_fields(self, **kwargs): return vis.plot_fields(self, **kwargs) @@ -4262,20 +4759,26 @@ def _create_boundary_region_from_boundary_layers(boundary_layers, gv): loop_stop_bi = mp.Low while b != loop_stop_bi: - br += mp.boundary_region(*(boundary_region_args + [layer.direction, b])) + br += mp.boundary_region( + *(boundary_region_args + [layer.direction, b]) + ) b = (b + 1) % 2 loop_stop_bi = mp.High else: - br += mp.boundary_region(*(boundary_region_args + [layer.direction, layer.side])) + br += mp.boundary_region( + *(boundary_region_args + [layer.direction, layer.side]) + ) return br # Private step functions + def _combine_step_funcs(*step_funcs): def _combine(sim, todo): for func in step_funcs: _eval_step_func(sim, func, todo) + return _combine @@ -4283,9 +4786,9 @@ def _eval_step_func(sim, func, todo): num_args = get_num_args(func) if num_args != 1 and num_args != 2: - raise ValueError("Step function '{}'' requires 1 or 2 arguments".format(func.__name__)) + raise ValueError(f"Step function '{func.__name__}'' requires 1 or 2 arguments") elif num_args == 1: - if todo == 'step': + if todo == "step": func(sim) elif num_args == 2: func(sim, todo) @@ -4293,24 +4796,28 @@ def _eval_step_func(sim, func, todo): def _when_true_funcs(cond, *step_funcs): def _true(sim, todo): - if todo == 'finish' or cond(sim): + if todo == "finish" or cond(sim): for f in step_funcs: _eval_step_func(sim, f, todo) + return _true # Public step functions + def after_sources(*step_funcs): """ Given zero or more step functions, evaluates them only for times after all of the sources have turned off. """ + def _after_sources(sim, todo): time = sim.fields.last_source_time() if sim.round_time() >= time: for func in step_funcs: _eval_step_func(sim, func, todo) + return _after_sources @@ -4319,11 +4826,13 @@ def after_sources_and_time(t, *step_funcs): Given zero or more step functions, evaluates them only for times after all of the sources have turned off, plus an additional $T$ time units have elapsed. """ + def _after_s_and_t(sim, todo): time = sim.fields.last_source_time() + t - sim.round_time() if sim.round_time() >= time: for func in step_funcs: _eval_step_func(sim, func, todo) + return _after_s_and_t @@ -4332,8 +4841,10 @@ def after_time(t, *step_funcs): Given zero or more step functions, evaluates them only for times after a $T$ time units have elapsed from the start of the run. """ + def _after_t(sim): return sim.round_time() >= t + return _when_true_funcs(_after_t, *step_funcs) @@ -4342,13 +4853,14 @@ def at_beginning(*step_funcs): Given zero or more step functions, evaluates them only once, at the beginning of the run. """ - closure = {'done': False} + closure = {"done": False} def _beg(sim, todo): - if not closure['done']: + if not closure["done"]: for f in step_funcs: _eval_step_func(sim, f, todo) - closure['done'] = True + closure["done"] = True + return _beg @@ -4356,12 +4868,14 @@ def at_end(*step_funcs): """ Given zero or more step functions, evaluates them only once, at the end of the run. """ + def _end(sim, todo): - if todo == 'finish': + if todo == "finish": for func in step_funcs: - _eval_step_func(sim, func, 'step') + _eval_step_func(sim, func, "step") for func in step_funcs: - _eval_step_func(sim, func, 'finish') + _eval_step_func(sim, func, "finish") + return _end @@ -4370,14 +4884,15 @@ def at_every(dt, *step_funcs): Given zero or more step functions, evaluates them at every time interval of $dT$ units (rounded up to the next time step). """ - closure = {'tlast': 0.0} + closure = {"tlast": 0.0} def _every(sim, todo): t = sim.round_time() - if todo == 'finish' or t >= closure['tlast'] + dt + (-0.5 * sim.fields.dt): + if todo == "finish" or t >= closure["tlast"] + dt + (-0.5 * sim.fields.dt): for func in step_funcs: _eval_step_func(sim, func, todo) - closure['tlast'] = t + closure["tlast"] = t + return _every @@ -4386,13 +4901,14 @@ def at_time(t, *step_funcs): Given zero or more step functions, evaluates them only once, after a $T$ time units have elapsed from the start of the run. """ - closure = {'done': False} + closure = {"done": False} def _at_time(sim, todo): - if not closure['done'] or todo == 'finish': + if not closure["done"] or todo == "finish": for f in step_funcs: _eval_step_func(sim, f, todo) - closure['done'] = closure['done'] or todo == 'step' + closure["done"] = closure["done"] or todo == "step" + return after_time(t, _at_time) @@ -4401,8 +4917,10 @@ def before_time(t, *step_funcs): Given zero or more step functions, evaluates them only for times before a $T$ time units have elapsed from the start of the run. """ + def _before_t(sim): return sim.round_time() < t + return _when_true_funcs(_before_t, *step_funcs) @@ -4411,17 +4929,18 @@ def during_sources(*step_funcs): Given zero or more step functions, evaluates them only for times *before* all of the sources have turned off. """ - closure = {'finished': False} + closure = {"finished": False} def _during_sources(sim, todo): time = sim.fields.last_source_time() if sim.round_time() < time: for func in step_funcs: - _eval_step_func(sim, func, 'step') - elif closure['finished'] is False: + _eval_step_func(sim, func, "step") + elif closure["finished"] is False: for func in step_funcs: - _eval_step_func(sim, func, 'finish') - closure['finished'] = True + _eval_step_func(sim, func, "finish") + closure["finished"] = True + return _during_sources @@ -4431,7 +4950,7 @@ def in_volume(v, *step_funcs): output a subset (or a superset) of the cell, corresponding to the `meep::volume* v` (created by the `Volume` function). """ - closure = {'cur_eps': ''} + closure = {"cur_eps": ""} def _in_volume(sim, todo): v_save = sim.output_volume @@ -4439,15 +4958,16 @@ def _in_volume(sim, todo): sim.output_volume = sim._fit_volume_to_simulation(v).swigobj - if closure['cur_eps']: - sim.last_eps_filename = closure['cur_eps'] + if closure["cur_eps"]: + sim.last_eps_filename = closure["cur_eps"] for func in step_funcs: _eval_step_func(sim, func, todo) - closure['cur_eps'] = sim.last_eps_filename + closure["cur_eps"] = sim.last_eps_filename sim.output_volume = v_save if eps_save: sim.last_eps_filename = eps_save + return _in_volume @@ -4467,21 +4987,24 @@ def to_appended(fname, *step_funcs): an `.h5` suffix and the current filename prefix). They append by adding an *extra dimension* to their datasets, corresponding to time. """ - closure = {'h5': None} + closure = {"h5": None} def _to_appended(sim, todo): - if closure['h5'] is None: - closure['h5'] = sim.fields.open_h5file(fname, mp.h5file.WRITE, sim.get_filename_prefix()) + if closure["h5"] is None: + closure["h5"] = sim.fields.open_h5file( + fname, mp.h5file.WRITE, sim.get_filename_prefix() + ) h5save = sim.output_append_h5 - sim.output_append_h5 = closure['h5'] + sim.output_append_h5 = closure["h5"] for func in step_funcs: _eval_step_func(sim, func, todo) - if todo == 'finish': - closure['h5'] = None + if todo == "finish": + closure["h5"] = None sim.output_h5_hook(sim.fields.h5file_name(fname, sim.get_filename_prefix())) sim.output_append_h5 = h5save + return _to_appended @@ -4505,26 +5028,34 @@ def stop_when_fields_decayed(dt=None, c=None, pt=None, decay_by=None): raise ValueError("dt, c, pt, and decay_by are all required.") closure = { - 'max_abs': 0, - 'cur_max': 0, - 't0': 0, + "max_abs": 0, + "cur_max": 0, + "t0": 0, } def _stop(sim): fabs = abs(sim.get_field_point(c, pt)) * abs(sim.get_field_point(c, pt)) - closure['cur_max'] = max(closure['cur_max'], fabs) + closure["cur_max"] = max(closure["cur_max"], fabs) - if sim.round_time() <= dt + closure['t0']: + if sim.round_time() <= dt + closure["t0"]: return False else: - old_cur = closure['cur_max'] - closure['cur_max'] = 0 - closure['t0'] = sim.round_time() - closure['max_abs'] = max(closure['max_abs'], old_cur) - if closure['max_abs'] != 0 and verbosity.meep > 0: + old_cur = closure["cur_max"] + closure["cur_max"] = 0 + closure["t0"] = sim.round_time() + closure["max_abs"] = max(closure["max_abs"], old_cur) + if closure["max_abs"] != 0 and verbosity.meep > 0: fmt = "field decay(t = {}): {} / {} = {}" - print(fmt.format(sim.meep_time(), old_cur, closure['max_abs'], old_cur / closure['max_abs'])) - return old_cur <= closure['max_abs'] * decay_by + print( + fmt.format( + sim.meep_time(), + old_cur, + closure["max_abs"], + old_cur / closure["max_abs"], + ) + ) + return old_cur <= closure["max_abs"] * decay_by + return _stop @@ -4545,22 +5076,30 @@ def stop_when_energy_decayed(dt=None, decay_by=None): raise ValueError("dt and decay_by are all required.") closure = { - 'max_abs': 0, - 't0': 0, + "max_abs": 0, + "t0": 0, } def _stop(sim): - if sim.round_time() <= dt + closure['t0']: + if sim.round_time() <= dt + closure["t0"]: return False else: cell_volume = mp.Volume(center=sim.geometry_center, size=sim.cell_size) cur_abs = abs(sim.field_energy_in_box(box=cell_volume)) - closure['max_abs'] = max(closure['max_abs'], cur_abs) - closure['t0'] = sim.round_time() - if closure['max_abs'] != 0 and verbosity.meep > 0: + closure["max_abs"] = max(closure["max_abs"], cur_abs) + closure["t0"] = sim.round_time() + if closure["max_abs"] != 0 and verbosity.meep > 0: fmt = "energy decay(t = {}): {} / {} = {}" - print(fmt.format(sim.meep_time(), cur_abs, closure['max_abs'], cur_abs / closure['max_abs'])) - return cur_abs <= closure['max_abs'] * decay_by + print( + fmt.format( + sim.meep_time(), + cur_abs, + closure["max_abs"], + cur_abs / closure["max_abs"], + ) + ) + return cur_abs <= closure["max_abs"] * decay_by + return _stop @@ -4570,10 +5109,12 @@ def stop_after_walltime(t): parameter. Stops the simulation after `t` seconds of wall time have passed. """ start = mp.wall_time() + def _stop_after_walltime(sim): if mp.wall_time() - start > t: return True return False + return _stop_after_walltime @@ -4598,6 +5139,7 @@ def _stop(sim): return _stop + def stop_when_dft_decayed(tol=1e-11, minimum_run_time=0, maximum_run_time=None): """ Return a `condition` function, suitable for passing to `Simulation.run` as the `until` @@ -4610,33 +5152,42 @@ def stop_when_dft_decayed(tol=1e-11, minimum_run_time=0, maximum_run_time=None): """ # Record data in closure so that we can persistently edit - closure = {'previous_fields':0, 't0':0, 'dt':0, 'maxchange':0} + closure = {"previous_fields": 0, "t0": 0, "dt": 0, "maxchange": 0} + def _stop(_sim): if _sim.fields.t == 0: - closure['dt'] = max(1/_sim.fields.dft_maxfreq()/_sim.fields.dt,_sim.fields.max_decimation()) + closure["dt"] = max( + 1 / _sim.fields.dft_maxfreq() / _sim.fields.dt, + _sim.fields.max_decimation(), + ) if maximum_run_time and _sim.round_time() > maximum_run_time: return True - elif _sim.fields.t <= closure['dt'] + closure['t0']: + elif _sim.fields.t <= closure["dt"] + closure["t0"]: return False else: - previous_fields = closure['previous_fields'] - current_fields = _sim.fields.dft_norm() - change = np.abs(previous_fields-current_fields) - closure['maxchange'] = max(closure['maxchange'],change) + previous_fields = closure["previous_fields"] + current_fields = _sim.fields.dft_norm() + change = np.abs(previous_fields - current_fields) + closure["maxchange"] = max(closure["maxchange"], change) if previous_fields == 0: - closure['previous_fields'] = current_fields + closure["previous_fields"] = current_fields return False - closure['previous_fields'] = current_fields - closure['t0'] = _sim.fields.t + closure["previous_fields"] = current_fields + closure["t0"] = _sim.fields.t if verbosity.meep > 1: fmt = "DFT fields decay(t = {0:0.2f}): {1:0.4e}" - print(fmt.format(_sim.meep_time(), np.real(change/closure['maxchange']))) - return (change/closure['maxchange']) <= tol and _sim.round_time() >= minimum_run_time + print( + fmt.format(_sim.meep_time(), np.real(change / closure["maxchange"])) + ) + return ( + change / closure["maxchange"] + ) <= tol and _sim.round_time() >= minimum_run_time return _stop + def combine_step_funcs(*step_funcs): """ Given zero or more step functions, return a new step function that on each step calls @@ -4652,11 +5203,13 @@ def synchronized_magnetic(*step_funcs): electric field. See [Synchronizing the Magnetic and Electric Fields](Synchronizing_the_Magnetic_and_Electric_Fields.md). """ + def _sync(sim, todo): sim.fields.synchronize_magnetic_fields() for f in step_funcs: _eval_step_func(sim, f, todo) sim.fields.restore_magnetic_fields() + return _sync @@ -4681,6 +5234,7 @@ def with_prefix(pre, *step_funcs): Given zero or more step functions, modifies any output functions among them to prepend the string `prefix` to the file names (much like `filename_prefix`, above). """ + def _with_prefix(sim, todo): saved_pre = sim.filename_prefix sim.filename_prefix = pre + sim.get_filename_prefix() @@ -4688,6 +5242,7 @@ def _with_prefix(sim, todo): for f in step_funcs: _eval_step_func(sim, f, todo) sim.filename_prefix = saved_pre + return _with_prefix @@ -4698,11 +5253,11 @@ def display_csv(sim, name, data): def display_progress(t0, t, dt): t_0 = mp.wall_time() - closure = {'tlast': mp.wall_time()} + closure = {"tlast": mp.wall_time()} def _disp(sim): t1 = mp.wall_time() - if t1 - closure['tlast'] >= dt: + if t1 - closure["tlast"] >= dt: msg_fmt = "Meep progress: {}/{} = {:.1f}% done in {:.1f}s, {:.1f}s to go" val1 = sim.meep_time() - t0 val2 = val1 / (0.01 * t) @@ -4711,19 +5266,19 @@ def _disp(sim): if do_progress: sim.progress.value = val1 - sim.progress.description = "{}% done ".format(int(val2)) + sim.progress.description = f"{int(val2)}% done " if verbosity.meep > 0: print(msg_fmt.format(val1, t, val2, val3, val4)) - closure['tlast'] = t1 + closure["tlast"] = t1 return _disp def data_to_str(d): if type(d) is complex: - sign = '+' if d.imag >= 0 else '' - return "{}{}{}i".format(d.real, sign, d.imag) + sign = "+" if d.imag >= 0 else "" + return f"{d.real}{sign}{d.imag}i" else: return str(d) @@ -4734,11 +5289,10 @@ def display_run_data(sim, data_name, data): else: data_str = [data_to_str(data)] if verbosity.meep > 0: - print("{}{}:, {}".format(data_name, sim.run_index, ', '.join(data_str))) + print("{}{}:, {}".format(data_name, sim.run_index, ", ".join(data_str))) def convert_h5(rm_h5, convert_cmd, *step_funcs): - def convert(fname): if mp.my_rank() == 0: cmd = convert_cmd.split() @@ -4780,24 +5334,27 @@ def output_png(compnt, options, rm_h5=True): By default, `output_png` deletes the `.h5` file when it is done. To preserve the `.h5` file requires `output_png(component, h5topng_options, rm_h5=False)`. """ - closure = {'maxabs': 0.0} + closure = {"maxabs": 0.0} def _output_png(sim, todo): - if todo == 'step': + if todo == "step": if sim.output_volume is None: ov = sim.fields.total_volume() else: ov = sim.output_volume - closure['maxabs'] = max(closure['maxabs'], - sim.fields.max_abs(compnt, ov)) - convert = sim.h5topng(rm_h5, "-M {} {}".format(closure['maxabs'], options), - lambda sim: sim.output_component(compnt)) + closure["maxabs"] = max(closure["maxabs"], sim.fields.max_abs(compnt, ov)) + convert = sim.h5topng( + rm_h5, + "-M {} {}".format(closure["maxabs"], options), + lambda sim: sim.output_component(compnt), + ) convert(sim, todo) + return _output_png -def output_epsilon(sim=None,*step_func_args,**kwargs): +def output_epsilon(sim=None, *step_func_args, **kwargs): """ Given a frequency `frequency`, (provided as a keyword argument) output $\\varepsilon$ (relative permittivity); for an anisotropic $\\varepsilon$ tensor the output is the [harmonic @@ -4811,11 +5368,11 @@ def output_epsilon(sim=None,*step_func_args,**kwargs): if sim is None: return lambda sim: mp.output_epsilon(sim, *step_func_args, **kwargs) - frequency = kwargs.pop('frequency', 0.0) - sim.output_component(mp.Dielectric,frequency=frequency) + frequency = kwargs.pop("frequency", 0.0) + sim.output_component(mp.Dielectric, frequency=frequency) -def output_mu(sim=None,*step_func_args,**kwargs): +def output_mu(sim=None, *step_func_args, **kwargs): """ Given a frequency `frequency`, (provided as a keyword argument) output $\\mu$ (relative permeability); for an anisotropic $\\mu$ tensor the output is the [harmonic @@ -4829,8 +5386,8 @@ def output_mu(sim=None,*step_func_args,**kwargs): if sim is None: return lambda sim: mp.output_mu(sim, *step_func_args, **kwargs) - frequency = kwargs.pop('frequency', 0.0) - sim.output_component(mp.Permeability,frequency=frequency) + frequency = kwargs.pop("frequency", 0.0) + sim.output_component(mp.Permeability, frequency=frequency) def output_hpwr(sim): @@ -4862,7 +5419,7 @@ def output_hfield(sim): Outputs *all* the components of the field *h*, (magnetic) to an HDF5 file. That is, the different components are stored as different datasets within the *same* file. """ - sim.output_components('h', mp.Hx, mp.Hy, mp.Hz, mp.Hr, mp.Hp) + sim.output_components("h", mp.Hx, mp.Hy, mp.Hz, mp.Hr, mp.Hp) def output_hfield_x(sim): @@ -4915,7 +5472,7 @@ def output_bfield(sim): Outputs *all* the components of the field *b*, (magnetic) to an HDF5 file. That is, the different components are stored as different datasets within the *same* file. """ - sim.output_components('b', mp.Bx, mp.By, mp.Bz, mp.Br, mp.Bp) + sim.output_components("b", mp.Bx, mp.By, mp.Bz, mp.Br, mp.Bp) def output_bfield_x(sim): @@ -4971,7 +5528,7 @@ def output_efield(sim): Outputs *all* the components of the field *e*, (electric) to an HDF5 file. That is, the different components are stored as different datasets within the *same* file. """ - sim.output_components('e', mp.Ex, mp.Ey, mp.Ez, mp.Er, mp.Ep) + sim.output_components("e", mp.Ex, mp.Ey, mp.Ez, mp.Er, mp.Ep) def output_efield_x(sim): @@ -5027,7 +5584,7 @@ def output_dfield(sim): Outputs *all* the components of the field *d*, (displacement) to an HDF5 file. That is, the different components are stored as different datasets within the *same* file. """ - sim.output_components('d', mp.Dx, mp.Dy, mp.Dz, mp.Dr, mp.Dp) + sim.output_components("d", mp.Dx, mp.Dy, mp.Dz, mp.Dr, mp.Dp) def output_dfield_x(sim): @@ -5086,7 +5643,7 @@ def output_poynting(sim): accurately. See [Synchronizing the Magnetic and Electric Fields](Synchronizing_the_Magnetic_and_Electric_Fields.md). """ - sim.output_components('s', mp.Sx, mp.Sy, mp.Sz, mp.Sr, mp.Sp) + sim.output_components("s", mp.Sx, mp.Sy, mp.Sz, mp.Sr, mp.Sp) def output_poynting_x(sim): @@ -5117,7 +5674,7 @@ def output_sfield(sim): compute it more accurately. See [Synchronizing the Magnetic and Electric Fields](Synchronizing_the_Magnetic_and_Electric_Fields.md). """ - sim.output_components('s', mp.Sx, mp.Sy, mp.Sz, mp.Sr, mp.Sp) + sim.output_components("s", mp.Sx, mp.Sy, mp.Sz, mp.Sr, mp.Sp) def output_sfield_x(sim): @@ -5197,17 +5754,19 @@ def dft_ldos(*args, **kwargs): is also stored in the `ldos_data` variable of the `Simulation` object after the `run` is complete. """ - ldos = kwargs.get('ldos', None) + ldos = kwargs.get("ldos", None) if ldos is None: args = fix_dft_args(args, 0) freq = args[0] - if isinstance(freq, (np.ndarray,list)): + if isinstance(freq, (np.ndarray, list)): ldos = mp._dft_ldos(freq) else: - raise TypeError("dft_ldos only accepts freq_min,freq_max,nfreq (3 numbers) or freq (array/list) or ldos (keyword argument)") + raise TypeError( + "dft_ldos only accepts freq_min,freq_max,nfreq (3 numbers) or freq (array/list) or ldos (keyword argument)" + ) def _ldos(sim, todo): - if todo == 'step': + if todo == "step": ldos.update(sim.fields) else: sim.ldos_data = mp._dft_ldos_ldos(ldos) @@ -5215,7 +5774,8 @@ def _ldos(sim, todo): sim.ldos_Jdata = mp._dft_ldos_J(ldos) sim.ldos_scale = ldos.overall_scale() if verbosity.meep > 0: - display_csv(sim, 'ldos', zip(mp.get_ldos_freqs(ldos), sim.ldos_data)) + display_csv(sim, "ldos", zip(mp.get_ldos_freqs(ldos), sim.ldos_data)) + return _ldos @@ -5379,6 +5939,7 @@ def get_center_and_size(vol): size = v3rmax - v3rmin return center, size + def GDSII_layers(fname): """ Returns a list of integer-valued layer indices for the layers present in @@ -5391,6 +5952,7 @@ def GDSII_layers(fname): """ return list(mp.get_GDSII_layers(fname)) + def GDSII_vol(fname, layer, zmin, zmax): """ Returns a `mp.Volume` read from a GDSII file `fname` on layer number `layer` with @@ -5428,6 +5990,7 @@ def complexarray(re, im): z += re return z + def quiet(quietval=True): """ Meep ordinarily prints various diagnostic and progress information to standard output. @@ -5438,52 +6001,61 @@ def quiet(quietval=True): This function is deprecated, please use the [Verbosity](#verbosity) class instead. """ verbosity(int(not quietval)) - warnings.warn("quiet has been deprecated; use the Verbosity class instead", RuntimeWarning) + warnings.warn( + "quiet has been deprecated; use the Verbosity class instead", RuntimeWarning + ) def get_num_groups(): # Lazy import from mpi4py import MPI + comm = MPI.COMM_WORLD return comm.allreduce(int(mp.my_rank() == 0), op=MPI.SUM) + def get_group_masters(): # Lazy import from mpi4py import MPI + comm = MPI.COMM_WORLD num_workers = comm.Get_size() num_groups = mp.get_num_groups # Check if current worker is a group master is_group_master = True if mp.my_rank() == 0 else False - group_master_idx = np.zeros((num_workers,),dtype=np.bool) + group_master_idx = np.zeros((num_workers,), dtype=np.bool) # Formulate send and receive packets - smsg = [np.array([is_group_master]),([1]*num_workers, [0]*num_workers)] - rmsg = [group_master_idx,([1]*num_workers, list(range(num_workers)))] + smsg = [np.array([is_group_master]), ([1] * num_workers, [0] * num_workers)] + rmsg = [group_master_idx, ([1] * num_workers, list(range(num_workers)))] # Send and receive comm.Alltoallv(smsg, rmsg) # get rank of each group master - group_masters = np.arange(num_workers)[group_master_idx] # rank index of each group leader + group_masters = np.arange(num_workers)[ + group_master_idx + ] # rank index of each group leader return group_masters + def merge_subgroup_data(data): # Lazy import from mpi4py import MPI + comm = MPI.COMM_WORLD num_workers = comm.Get_size() num_groups = get_num_groups() # Initialize new input and output datasets - input=np.array(data,copy=True,order='F') - shape=input.shape - size=input.size - out_shape=shape + (num_groups,) - output=np.zeros(out_shape,input.dtype,order='F') + input = np.array(data, copy=True, order="F") + shape = input.shape + size = input.size + out_shape = shape + (num_groups,) + output = np.zeros(out_shape, input.dtype, order="F") # Get group masters group_masters = get_group_masters() @@ -5501,7 +6073,7 @@ def merge_subgroup_data(data): rdsp = [0] * num_workers buf_idx = 0 for grpidx in group_masters: - rdsp[grpidx] = buf_idx # offset group leader worker by size of each count + rdsp[grpidx] = buf_idx # offset group leader worker by size of each count buf_idx += size # Formulate send and receive packets @@ -5513,12 +6085,22 @@ def merge_subgroup_data(data): return output -class BinaryPartition(object): + +class BinaryPartition: """ Binary tree class used for specifying a cell partition of arbitrary sized chunks for use as the `chunk_layout` parameter of the `Simulation` class object. """ - def __init__(self, data=None, split_dir=None, split_pos=None, left=None, right=None, proc_id=None): + + def __init__( + self, + data=None, + split_dir=None, + split_pos=None, + left=None, + right=None, + proc_id=None, + ): """ The constructor accepts three separate groups of arguments: (1) `data`: a list of lists where each list entry is either (a) a node defined as `[ (split_dir,split_pos), left, right ]` for which `split_dir` @@ -5536,18 +6118,26 @@ def __init__(self, data=None, split_dir=None, split_pos=None, left=None, right=N self.left = None self.right = None if data is not None: - if isinstance(data,list) and len(data) == 3: - if isinstance(data[0],tuple) and len(data[0]) == 2: + if isinstance(data, list) and len(data) == 3: + if isinstance(data[0], tuple) and len(data[0]) == 2: self.split_dir = data[0][0] self.split_pos = data[0][1] else: - raise ValueError("expecting 2-tuple (split_dir,split_pos) but got {}".format(data[0])) + raise ValueError( + "expecting 2-tuple (split_dir,split_pos) but got {}".format( + data[0] + ) + ) self.left = BinaryPartition(data=data[1]) self.right = BinaryPartition(data=data[2]) - elif isinstance(data,int): + elif isinstance(data, int): self.proc_id = data else: - raise ValueError("expecting list [(split_dir,split_pos), left, right] or int (proc_id) but got {}".format(data)) + raise ValueError( + "expecting list [(split_dir,split_pos), left, right] or int (proc_id) but got {}".format( + data + ) + ) elif split_dir is not None: self.split_dir = split_dir self.split_pos = split_pos @@ -5558,16 +6148,16 @@ def __init__(self, data=None, split_dir=None, split_pos=None, left=None, right=N def print(self): """Pretty-prints the tree structure of the BinaryPartition object.""" - print(str(self) + " with {} chunks:".format(self.numchunks())) + print(str(self) + f" with {self.numchunks()} chunks:") for line in self._print(is_root=True): print(line) def _print(self, prefix="", is_root=True): # pointers - ptr_l = ' ├L─ ' - ext_l = ' │ ' - ptr_r = ' └R─ ' - ext_r = ' ' + ptr_l = " ├L─ " + ext_l = " │ " + ptr_r = " └R─ " + ext_r = " " if is_root: yield prefix + self._node_info() @@ -5575,28 +6165,23 @@ def _print(self, prefix="", is_root=True): if self.left is not None and self.right is not None: yield prefix + ptr_l + self.left._node_info() if self.left.left is not None and self.left.right is not None: - yield from self.left._print(prefix=prefix+ext_l, is_root=False) + yield from self.left._print(prefix=prefix + ext_l, is_root=False) yield prefix + ptr_r + self.right._node_info() if self.right.left is not None and self.right.right is not None: - yield from self.right._print(prefix=prefix+ext_r, is_root=False) + yield from self.right._print(prefix=prefix + ext_r, is_root=False) def _node_info(self) -> str: if self.proc_id is not None: - return "".format(self.proc_id) + return f"" else: - split_dir_str = { - mp.X: "X", - mp.Y: "Y", - mp.Z: "Z" - }[self.split_dir] - return "".format( - split_dir_str, self.split_pos) - - def _numchunks(self,bp): + split_dir_str = {mp.X: "X", mp.Y: "Y", mp.Z: "Z"}[self.split_dir] + return f"" + + def _numchunks(self, bp): if bp is None: return 0 - return max(self._numchunks(bp.left)+self._numchunks(bp.right), 1) + return max(self._numchunks(bp.left) + self._numchunks(bp.right), 1) def numchunks(self): return self._numchunks(self) diff --git a/python/solver.py b/python/solver.py index 17e3ae17e..106efd456 100644 --- a/python/solver.py +++ b/python/solver.py @@ -1,19 +1,21 @@ -# -*- coding: utf-8 -*- import functools import math -import os import numbers +import os import re import sys import time import h5py import numpy as np -import meep as mp -from . import mode_solver, with_hermitian_epsilon from meep.geom import init_do_averaging from meep.simulation import get_num_args from meep.verbosity_mgr import Verbosity + +import meep as mp + +from . import mode_solver, with_hermitian_epsilon + try: basestring except NameError: @@ -23,10 +25,10 @@ U_PROD = 1 U_MEAN = 2 -verbosity = Verbosity(mp.cvar, 'meep', 1) +verbosity = Verbosity(mp.cvar, "meep", 1) -class MPBArray(np.ndarray): +class MPBArray(np.ndarray): def __new__(cls, input_array, lattice, kpoint=None, bloch_phase=False): # Input array is an already formed ndarray instance # We first cast to be our class type @@ -64,53 +66,54 @@ def __array_finalize__(self, obj): # method sees all creation of default objects - with the # MPBArray.__new__ constructor, but also with # arr.view(MPBArray). - self.lattice = getattr(obj, 'lattice', None) - self.kpoint = getattr(obj, 'kpoint', None) - self.bloch_phase = getattr(obj, 'bloch_phase', False) - - -class ModeSolver(object): - - def __init__(self, - resolution=10, - is_negative_epsilon_ok=False, - eigensolver_flops=0, - eigensolver_flags=68, - use_simple_preconditioner=False, - force_mu=False, - mu_input_file='', - epsilon_input_file='', - mesh_size=3, - target_freq=0.0, - tolerance=1.0e-7, - num_bands=1, - k_points=None, - ensure_periodicity=True, - geometry=None, - geometry_lattice=mp.Lattice(), - geometry_center=mp.Vector3(0, 0, 0), - default_material=mp.Medium(epsilon=1), - dimensions=3, - random_fields=False, - filename_prefix='', - deterministic=False, - verbose=False, - optimize_grid_size=True, - eigensolver_nwork=3, - eigensolver_block_size=-11): + self.lattice = getattr(obj, "lattice", None) + self.kpoint = getattr(obj, "kpoint", None) + self.bloch_phase = getattr(obj, "bloch_phase", False) + + +class ModeSolver: + def __init__( + self, + resolution=10, + is_negative_epsilon_ok=False, + eigensolver_flops=0, + eigensolver_flags=68, + use_simple_preconditioner=False, + force_mu=False, + mu_input_file="", + epsilon_input_file="", + mesh_size=3, + target_freq=0.0, + tolerance=1.0e-7, + num_bands=1, + k_points=None, + ensure_periodicity=True, + geometry=None, + geometry_lattice=mp.Lattice(), + geometry_center=mp.Vector3(0, 0, 0), + default_material=mp.Medium(epsilon=1), + dimensions=3, + random_fields=False, + filename_prefix="", + deterministic=False, + verbose=False, + optimize_grid_size=True, + eigensolver_nwork=3, + eigensolver_block_size=-11, + ): self.mode_solver = None self.resolution = resolution self.eigensolver_flags = eigensolver_flags - self.k_points = k_points if k_points else [] - self.geometry = geometry if geometry else [] + self.k_points = k_points or [] + self.geometry = geometry or [] self.geometry_lattice = geometry_lattice self.geometry_center = mp.Vector3(*geometry_center) self.default_material = default_material self.random_fields = random_fields self.filename_prefix = filename_prefix self.optimize_grid_size = optimize_grid_size - self.parity = '' + self.parity = "" self.iterations = 0 self.all_freqs = None self.freqs = [] @@ -123,7 +126,9 @@ def __init__(self, grid_size = self._adjust_grid_size() - if type(self.default_material) is not mp.Medium and callable(self.default_material): + if type(self.default_material) is not mp.Medium and callable( + self.default_material + ): init_do_averaging(self.default_material) self.default_material.eps = False @@ -170,7 +175,7 @@ def resolution(self, val): self._resolution = [val.x, val.y, val.z] else: t = type(val) - raise TypeError("resolution must be a number or a Vector3: Got {}".format(t)) + raise TypeError(f"resolution must be a number or a Vector3: Got {t}") if self.mode_solver: self.mode_solver.resolution = self._resolution @@ -323,14 +328,14 @@ def allow_negative_epsilon(self): def get_filename_prefix(self): if self.filename_prefix: - return self.filename_prefix + '-' - else: - _, filename = os.path.split(sys.argv[0]) + return f"{self.filename_prefix}-" + _, filename = os.path.split(sys.argv[0]) - if filename == 'ipykernel_launcher.py' or filename == '__main__.py': - return '' - else: - return re.sub(r'\.py$', '', filename) + '-' + return ( + "" + if filename in ["ipykernel_launcher.py", "__main__.py"] + else re.sub(r"\.py$", "", filename) + "-" + ) def get_freqs(self): return self.mode_solver.get_freqs() @@ -362,7 +367,7 @@ def ExH(e, h): flat_res = res.ravel() self.mode_solver.set_curfield_cmplx(flat_res) - self.mode_solver.set_curfield_type('v') + self.mode_solver.set_curfield_type("v") arr = np.reshape(res, dims) return MPBArray(arr, self.get_lattice(), self.current_k) @@ -376,16 +381,16 @@ def get_mu(self): return self.get_curfield_as_array(False) def get_bfield(self, which_band, bloch_phase=True): - return self._get_field('b', which_band, bloch_phase) + return self._get_field("b", which_band, bloch_phase) def get_efield(self, which_band, bloch_phase=True): - return self._get_field('e', which_band, bloch_phase) + return self._get_field("e", which_band, bloch_phase) def get_dfield(self, which_band, bloch_phase=True): - return self._get_field('d', which_band, bloch_phase) + return self._get_field("d", which_band, bloch_phase) def get_hfield(self, which_band, bloch_phase=True): - return self._get_field('h', which_band, bloch_phase) + return self._get_field("h", which_band, bloch_phase) def get_charge_density(self, which_band, bloch_phase=True): self.get_efield(which_band, bloch_phase) @@ -393,15 +398,17 @@ def get_charge_density(self, which_band, bloch_phase=True): def _get_field(self, f, band, bloch_phase): if self.mode_solver is None: - raise ValueError("Must call a run function before attempting to get a field") + raise ValueError( + "Must call a run function before attempting to get a field" + ) - if f == 'b': + if f == "b": self.mode_solver.get_bfield(band) - elif f == 'd': + elif f == "d": self.mode_solver.get_dfield(band) - elif f == 'e': + elif f == "e": self.mode_solver.get_efield(band) - elif f == 'h': + elif f == "h": self.mode_solver.get_hfield(band) dims = self.mode_solver.get_dims() @@ -418,9 +425,9 @@ def _get_field(self, f, band, bloch_phase): self.mode_solver.get_curfield_cmplx(arr) arr = np.reshape(arr, dims) - res = MPBArray(arr, self.get_lattice(), self.current_k, bloch_phase=bloch_phase) - - return res + return MPBArray( + arr, self.get_lattice(), self.current_k, bloch_phase=bloch_phase + ) def get_curfield_as_array(self, bloch_phase=True): dims = self.mode_solver.get_dims() @@ -428,7 +435,9 @@ def get_curfield_as_array(self, bloch_phase=True): self.mode_solver.get_curfield(arr) arr = np.reshape(arr, dims) - return MPBArray(arr, self.get_lattice(), self.current_k, bloch_phase=bloch_phase) + return MPBArray( + arr, self.get_lattice(), self.current_k, bloch_phase=bloch_phase + ) def get_dpwr(self, band): self.get_dfield(band, False) @@ -465,7 +474,7 @@ def get_tot_pwr(self, which_band): tot_pwr = epwr + hpwr self.mode_solver.set_curfield(tot_pwr.ravel()) - self.mode_solver.set_curfield_type('R') + self.mode_solver.set_curfield_type("R") return MPBArray(tot_pwr, self.get_lattice(), self.current_k, bloch_phase=False) @@ -479,13 +488,13 @@ def set_eigenvectors(self, ev, first_band): self.mode_solver.set_eigenvectors(first_band - 1, ev.flatten()) def save_eigenvectors(self, filename): - with h5py.File(filename, 'w') as f: + with h5py.File(filename, "w") as f: ev = self.get_eigenvectors(1, self.num_bands) - f['rawdata'] = ev + f["rawdata"] = ev def load_eigenvectors(self, filename): - with h5py.File(filename, 'r') as f: - ev = f['rawdata'][()] + with h5py.File(filename, "r") as f: + ev = f["rawdata"][()] self.set_eigenvectors(ev, 1) self.mode_solver.curfield_reset() @@ -495,24 +504,22 @@ def load_eigenvectors(self, filename): # Here, we update this data with a new list of band frequencies, and return the new # data. If band-range-data is null or too short, the needed entries will be created. def update_band_range_data(self, brd, freqs, kpoint): - def update_brd(brd, freqs, br_start): if not freqs: return br_start + brd - else: - br = ((mp.inf, -1), (-mp.inf, -1)) if not brd else brd[0] - br_rest = [] if not brd else brd[1:] - newmin = (freqs[0], kpoint) if freqs[0] < br[0][0] else br[0] - newmax = (freqs[0], kpoint) if freqs[0] > br[1][0] else br[1] - new_start = br_start + [(newmin, newmax)] - return update_brd(br_rest, freqs[1:], new_start) + br = brd[0] if brd else ((mp.inf, -1), (-mp.inf, -1)) + br_rest = brd[1:] if brd else [] + newmin = (freqs[0], kpoint) if freqs[0] < br[0][0] else br[0] + newmax = (freqs[0], kpoint) if freqs[0] > br[1][0] else br[1] + new_start = br_start + [(newmin, newmax)] + return update_brd(br_rest, freqs[1:], new_start) return update_brd(brd, freqs, []) def output_band_range_data(self, br_data): if verbosity.mpb > 0: + fmt = "Band {} range: {} at {} to {} at {}" for tup, band in zip(br_data, range(1, len(br_data) + 1)): - fmt = "Band {} range: {} at {} to {} at {}" min_band, max_band = tup min_freq, min_kpoint = min_band max_freq, max_kpoint = max_band @@ -521,27 +528,30 @@ def output_band_range_data(self, br_data): # Output any gaps in the given band ranges, and return a list of the gaps as # a list of (percent, freq-min, freq-max) tuples. def output_gaps(self, br_data): - def ogaps(br_cur, br_rest, i, gaps): if not br_rest: - ordered_gaps = [] gaps = list(reversed(gaps)) - for i in range(0, len(gaps), 3): - ordered_gaps.append((gaps[i + 2], gaps[i + 1], gaps[i])) - return ordered_gaps + return [ + (gaps[i + 2], gaps[i + 1], gaps[i]) for i in range(0, len(gaps), 3) + ] else: br_rest_min_f = br_rest[0][0][0] br_cur_max_f = br_cur[1][0] if br_cur_max_f >= br_rest_min_f: return ogaps(br_rest[0], br_rest[1:], i + 1, gaps) - else: - gap_size = ((200 * (br_rest_min_f - br_cur_max_f)) / - (br_rest_min_f + br_cur_max_f)) - if verbosity.mpb > 0: - fmt = "Gap from band {} ({}) to band {} ({}), {}%" - print(fmt.format(i, br_cur_max_f, i + 1, br_rest_min_f, gap_size)) - return ogaps(br_rest[0], br_rest[1:], i + 1, - [gap_size, br_cur_max_f, br_rest_min_f] + gaps) + gap_size = (200 * (br_rest_min_f - br_cur_max_f)) / ( + br_rest_min_f + br_cur_max_f + ) + if verbosity.mpb > 0: + fmt = "Gap from band {} ({}) to band {} ({}), {}%" + print(fmt.format(i, br_cur_max_f, i + 1, br_rest_min_f, gap_size)) + return ogaps( + br_rest[0], + br_rest[1:], + i + 1, + [gap_size, br_cur_max_f, br_rest_min_f] + gaps, + ) + if not br_data: return [] else: @@ -565,7 +575,6 @@ def retrieve_gap(self, lower_band): # given by index (in 0..num-1), along with the index in L of the first # element of the piece, as a list: [first-index, piece-of-L] def list_split(self, l, num, index): - def list_sub(l, start, length, index, rest): if not l: return list(reversed(rest)) @@ -615,39 +624,36 @@ def output_field_to_file(self, component, fname_prefix): curfield_type = self.mode_solver.get_curfield_type() output_k = self.mode_solver.get_output_k() - if curfield_type in 'Rv': + if curfield_type in "Rv": # Generic scalar/vector field. Don't know k output_k = [0, 0, 0] - if curfield_type in 'dhbecv': + if curfield_type in "dhbecv": self._output_vector_field(curfield_type, fname_prefix, output_k, component) - elif curfield_type == 'C': + elif curfield_type == "C": self._output_complex_scalar_field(fname_prefix, output_k) - elif curfield_type in 'DHBnmR': + elif curfield_type in "DHBnmR": self._output_scalar_field(curfield_type, fname_prefix) else: - raise ValueError("Unkown field type: {}".format(curfield_type)) + raise ValueError(f"Unkown field type: {curfield_type}") self.mode_solver.curfield_reset() def _output_complex_scalar_field(self, fname_prefix, output_k): - curfield_type = 'C' + curfield_type = "C" kpoint_index = self.mode_solver.get_kpoint_index() curfield_band = self.mode_solver.curfield_band - fname = "{}.k{:02d}.b{:02d}".format(curfield_type, kpoint_index, curfield_band) + fname = f"{curfield_type}.k{kpoint_index:02d}.b{curfield_band:02d}" description = "{} field, kpoint {}, band {}, freq={:.6g}".format( - curfield_type, - kpoint_index, - curfield_band, - self.freqs[curfield_band - 1] + curfield_type, kpoint_index, curfield_band, self.freqs[curfield_band - 1] ) fname = self._create_fname(fname, fname_prefix, True) if verbosity.mpb > 0: - print("Outputting complex scalar field to {}...".format(fname)) + print(f"Outputting complex scalar field to {fname}...") - with h5py.File(fname, 'w') as f: - f['description'] = description.encode() - f['Bloch wavevector'] = np.array(output_k) + with h5py.File(fname, "w") as f: + f["description"] = description.encode() + f["Bloch wavevector"] = np.array(output_k) self._write_lattice_vectors(f) dims = self.mode_solver.get_dims() @@ -656,35 +662,32 @@ def _output_complex_scalar_field(self, fname_prefix, output_k): reshaped_field = field.reshape(dims) - f['c.r'] = np.real(reshaped_field) - f['c.i'] = np.imag(reshaped_field) + f["c.r"] = np.real(reshaped_field) + f["c.i"] = np.imag(reshaped_field) def _output_vector_field(self, curfield_type, fname_prefix, output_k, component): - components = ['x', 'y', 'z'] + components = ["x", "y", "z"] kpoint_index = self.mode_solver.get_kpoint_index() curfield_band = self.mode_solver.curfield_band - fname = "{}.k{:02d}.b{:02d}".format(curfield_type, kpoint_index, curfield_band) + fname = f"{curfield_type}.k{kpoint_index:02d}.b{curfield_band:02d}" if component >= 0: - fname += ".{}".format(components[component]) + fname += f".{components[component]}" description = "{} field, kpoint {}, band {}, freq={:.6g}".format( - curfield_type, - kpoint_index, - curfield_band, - self.freqs[curfield_band - 1] + curfield_type, kpoint_index, curfield_band, self.freqs[curfield_band - 1] ) fname = self._create_fname(fname, fname_prefix, True) if verbosity.mpb > 0: - print("Outputting fields to {}...".format(fname)) + print(f"Outputting fields to {fname}...") - with h5py.File(fname, 'w') as f: - f['description'] = description.encode() - f['Bloch wavevector'] = np.array(output_k) + with h5py.File(fname, "w") as f: + f["description"] = description.encode() + f["Bloch wavevector"] = np.array(output_k) self._write_lattice_vectors(f) - if curfield_type != 'v': + if curfield_type != "v": self.mode_solver.multiply_bloch_phase() for c_idx, c in enumerate(components): @@ -696,70 +699,70 @@ def _output_vector_field(self, curfield_type, fname_prefix, output_k, component) self.mode_solver.get_curfield_cmplx(field) component_field = field[c_idx::3].reshape(dims) - name = "{}.r".format(c) + name = f"{c}.r" f[name] = np.real(component_field) - name = "{}.i".format(c) + name = f"{c}.i" f[name] = np.imag(component_field) def _output_scalar_field(self, curfield_type, fname_prefix): - components = ['x', 'y', 'z'] - - if curfield_type == 'n': - fname = 'epsilon' - description = 'dielectric function, epsilon' - elif curfield_type == 'm': - fname = 'mu' - description = 'permeability mu' + components = ["x", "y", "z"] + + if curfield_type == "n": + fname = "epsilon" + description = "dielectric function, epsilon" + elif curfield_type == "m": + fname = "mu" + description = "permeability mu" else: kpoint_index = self.mode_solver.get_kpoint_index() curfield_band = self.mode_solver.curfield_band - fname = "{}pwr.k{:02d}.b{:02d}".format(curfield_type.lower(), - kpoint_index, curfield_band) + fname = "{}pwr.k{:02d}.b{:02d}".format( + curfield_type.lower(), kpoint_index, curfield_band + ) descr_fmt = "{} field energy density, kpoint {}, band {}, freq={:.6g}" - description = descr_fmt.format(curfield_type, kpoint_index, curfield_band, - self.freqs[curfield_band - 1]) - - parity_suffix = False if curfield_type in 'mn' else True + description = descr_fmt.format( + curfield_type, + kpoint_index, + curfield_band, + self.freqs[curfield_band - 1], + ) + + parity_suffix = curfield_type not in "mn" fname = self._create_fname(fname, fname_prefix, parity_suffix) if verbosity.mpb > 0: - print("Outputting {}...".format(fname)) + print(f"Outputting {fname}...") - with h5py.File(fname, 'w') as f: - f['description'] = description.encode() - self._create_h5_dataset(f, 'data') + with h5py.File(fname, "w") as f: + f["description"] = description.encode() + self._create_h5_dataset(f, "data") self._write_lattice_vectors(f) - if curfield_type == 'n': + if curfield_type == "n": for inv in [False, True]: - inv_str = 'epsilon_inverse' if inv else 'epsilon' + inv_str = "epsilon_inverse" if inv else "epsilon" for c1 in range(3): for c2 in range(c1, 3): self.mode_solver.get_epsilon_tensor(c1, c2, 0, inv) - dataname = "{}.{}{}".format(inv_str, components[c1], - components[c2]) + dataname = f"{inv_str}.{components[c1]}{components[c2]}" self._create_h5_dataset(f, dataname) if with_hermitian_epsilon() and c1 != c2: self.mode_solver.get_epsilon_tensor(c1, c2, 1, inv) - dataname += '.i' + dataname += ".i" self._create_h5_dataset(f, dataname) def _write_lattice_vectors(self, h5file): lattice = np.zeros((3, 3)) self.mode_solver.get_lattice(lattice) - h5file['lattice vectors'] = lattice + h5file["lattice vectors"] = lattice def _create_h5_dataset(self, h5file, key): h5file[key] = self.get_curfield_as_array(False) def _create_fname(self, fname, prefix, parity_suffix): parity_str = self.mode_solver.get_parity_string() - if parity_suffix and parity_str: - suffix = ".{}".format(parity_str) - else: - suffix = '' - - return prefix + fname + suffix + '.h5' + suffix = f".{parity_str}" if parity_suffix and parity_str else "" + return prefix + fname + suffix + ".h5" def compute_field_energy(self): return self.mode_solver.compute_field_energy() @@ -796,8 +799,9 @@ def compute_one_group_velocity(self, which_band): return self.mode_solver.compute_1_group_velocity(which_band) def compute_one_group_velocity_component(self, direction, which_band): - return self.mode_solver.compute_1_group_velocity_component(direction, - which_band) + return self.mode_solver.compute_1_group_velocity_component( + direction, which_band + ) def compute_zparities(self): return self.mode_solver.compute_zparities() @@ -809,12 +813,12 @@ def randomize_fields(self): self.mode_solver.randomize_fields() def display_kpoint_data(self, name, data): - k_index = self.mode_solver.get_kpoint_index() if verbosity.mpb > 0: - print("{}{}:, {}".format(self.parity, name, k_index), end='') + k_index = self.mode_solver.get_kpoint_index() + print(f"{self.parity}{name}:, {k_index}", end="") for d in data: - print(", {}".format(d), end='') + print(f", {d}", end="") print() def display_eigensolver_stats(self): @@ -828,27 +832,29 @@ def display_eigensolver_stats(self): mean_iters = np.mean(self.eigensolver_iters) if verbosity.mpb > 0: fmt = "eigensolver iterations for {} kpoints: {}-{}, mean = {}" - print(fmt.format(num_runs, min_iters, max_iters, mean_iters), end='') + print(fmt.format(num_runs, min_iters, max_iters, mean_iters), end="") sorted_iters = sorted(self.eigensolver_iters) idx1 = num_runs // 2 idx2 = ((num_runs + 1) // 2) - 1 median_iters = 0.5 * (sorted_iters[idx1] + sorted_iters[idx2]) if verbosity.mpb > 0: - print(", median = {}".format(median_iters)) + print(f", median = {median_iters}") mean_flops = self.eigensolver_flops / (num_runs * mean_iters) if verbosity.mpb > 0: - print("mean flops per iteration = {}".format(mean_flops)) + print(f"mean flops per iteration = {mean_flops}") mean_time = self.total_run_time / (mean_iters * num_runs) if verbosity.mpb > 0: - print("mean time per iteration = {} s".format(mean_time)) + print(f"mean time per iteration = {mean_time} s") def _get_grid_size(self): - grid_size = mp.Vector3(self.resolution[0] * self.geometry_lattice.size.x, - self.resolution[1] * self.geometry_lattice.size.y, - self.resolution[2] * self.geometry_lattice.size.z) + grid_size = mp.Vector3( + self.resolution[0] * self.geometry_lattice.size.x, + self.resolution[1] * self.geometry_lattice.size.y, + self.resolution[2] * self.geometry_lattice.size.z, + ) grid_size.x = max(math.ceil(grid_size.x), 1) grid_size.y = max(math.ceil(grid_size.y), 1) @@ -863,13 +869,10 @@ def _optimize_grid_size(self, grid_size): return grid_size def next_factor2357(self, n): - def is_factor2357(n): - def divby(n, p): - if n % p == 0: - return divby(n // p, p) - return n + return divby(n // p, p) if n % p == 0 else n + return divby(divby(divby(divby(n, 2), 3), 5), 7) == 1 if is_factor2357(n): @@ -899,7 +902,7 @@ def run_parity(self, p, reset_fields, *band_functions): if verbosity.mpb > 0: print("Initializing eigensolver data") - print("Computing {} bands with {} tolerance".format(self.num_bands, self.tolerance)) + print(f"Computing {self.num_bands} bands with {self.tolerance} tolerance") self.init_params(p, reset_fields) @@ -907,12 +910,12 @@ def run_parity(self, p, reset_fields, *band_functions): self.load_eigenvectors(reset_fields) if verbosity.mpb > 0: - print("{} k-points".format(len(self.k_points))) + print(f"{len(self.k_points)} k-points") for kp in self.k_points: - print(" {}".format(kp)) + print(f" {kp}") - print("elapsed time for initialization: {}".format(time.time() - init_time)) + print(f"elapsed time for initialization: {time.time() - init_time}") # TODO: Split over multiple processes # k_split = list_split(self.k_points, self.k_split_num, self.k_split_index) @@ -926,10 +929,13 @@ def run_parity(self, p, reset_fields, *band_functions): self.solve_kpoint(k) self.iterations = self.mode_solver.get_iterations() if verbosity.mpb > 0: - print("elapsed time for k point: {}".format(time.time() - solve_kpoint_time)) + print( + f"elapsed time for k point: {time.time() - solve_kpoint_time}" + ) self.all_freqs[i, :] = np.array(self.freqs) - self.band_range_data = self.update_band_range_data(self.band_range_data, - self.freqs, k) + self.band_range_data = self.update_band_range_data( + self.band_range_data, self.freqs, k + ) self.eigensolver_iters += [self.iterations / self.num_bands] for f in band_functions: @@ -942,8 +948,10 @@ def run_parity(self, p, reset_fields, *band_functions): f(self, band) band += 1 else: - raise ValueError("Band function should take 1 or 2 arguments. " - "The first must be a ModeSolver instance") + raise ValueError( + "Band function should take 1 or 2 arguments. " + "The first must be a ModeSolver instance" + ) if len(k_split[1]) > 1: self.output_band_range_data(self.band_range_data) @@ -953,7 +961,7 @@ def run_parity(self, p, reset_fields, *band_functions): end = time.time() - start if verbosity.mpb > 0: - print("total elapsed time for run: {}".format(end)) + print(f"total elapsed time for run: {end}") self.total_run_time += end self.eigensolver_flops = self.mode_solver.get_eigensolver_flops() self.parity = self.mode_solver.get_parity_string() @@ -994,15 +1002,28 @@ def run_yodd_zodd(self, *band_functions): run_tm_yeven = run_yeven_zodd run_tm_yodd = run_yodd_zodd - def find_k(self, p, omega, band_min, band_max, korig_and_kdir, tol, - kmag_guess, kmag_min, kmag_max, *band_funcs): + def find_k( + self, + p, + omega, + band_min, + band_max, + korig_and_kdir, + tol, + kmag_guess, + kmag_min, + kmag_max, + *band_funcs, + ): num_bands_save = self.num_bands kpoints_save = self.k_points nb = band_max - band_min + 1 kdir = korig_and_kdir[1] if type(korig_and_kdir) is list else korig_and_kdir lat = self.geometry_lattice - kdir1 = mp.cartesian_to_reciprocal(mp.reciprocal_to_cartesian(kdir, lat).unit(), lat) + kdir1 = mp.cartesian_to_reciprocal( + mp.reciprocal_to_cartesian(kdir, lat).unit(), lat + ) if type(korig_and_kdir) is list: korig = korig_and_kdir[0] @@ -1019,15 +1040,13 @@ def find_k(self, p, omega, band_min, band_max, korig_and_kdir, tol, bktab = {} def rootfun(b): - def _rootfun(k): # First, look in the cached table tab_val = bktab.get((b, k), None) if tab_val: if verbosity.mpb > 0: - print("find-k {} at {}: {} (cached)".format(b, k, tab_val[0])) + print(f"find-k {b} at {k}: {tab_val[0]} (cached)") return tab_val - # Otherwise, compute bands and cache results else: self.num_bands = b self.k_points = [korig + kdir1.scale(k)] @@ -1035,9 +1054,11 @@ def _rootfun(k): v = self.mode_solver.compute_group_velocity_component(kdir1) # Cache computed values - for _b, _f, _v in zip(range(band_min, b - band_min + 1, 1), - self.freqs[band_min - 1:], - v[band_min - 1:]): + for _b, _f, _v in zip( + range(band_min, b - band_min + 1), + self.freqs[band_min - 1 :], + v[band_min - 1 :], + ): tabval = bktab.get((_b, k0s[_b - band_min]), None) if not tabval or abs(_f - omega) < abs(tabval[0]): @@ -1047,7 +1068,7 @@ def _rootfun(k): fun = self.freqs[-1] - omega if verbosity.mpb > 0: - print("find-k {} at {}: {}".format(b, k, fun)) + print(f"find-k {b} at {k}: {fun}") return (fun, v[-1]) return _rootfun @@ -1058,10 +1079,14 @@ def _rootfun(k): ks = [] for b in range(band_max, band_max - nb, -1): - ks.append(mp.find_root_deriv(rootfun(b), tol, kmag_min, kmag_max, k0s[b - band_min])) + ks.append( + mp.find_root_deriv( + rootfun(b), tol, kmag_min, kmag_max, k0s[b - band_min] + ) + ) if band_funcs: - for b, k in zip(range(1, band_max +1), reversed(ks)): + for b, k in zip(range(1, band_max + 1), reversed(ks)): self.num_bands = b self.k_points = [korig + kdir1.scale(k)] @@ -1076,13 +1101,16 @@ def bfunc(ms, b_prime): self.k_points = kpoints_save ks = list(reversed(ks)) if verbosity.mpb > 0: - print("{}kvals:, {}, {}, {}".format(self.parity, omega, band_min, band_max), end='') + print( + f"{self.parity}kvals:, {omega}, {band_min}, {band_max}", + end="", + ) for k in korig: - print(", {}".format(k), end='') + print(f", {k}", end="") for k in kdir1: - print(", {}".format(k), end='') + print(f", {k}", end="") for k in ks: - print(", {}".format(k), end='') + print(f", {k}", end="") print() return ks @@ -1092,23 +1120,29 @@ def first_brillouin_zone(self, k): Function to convert a k-point k into an equivalent point in the first Brillouin zone (not necessarily the irreducible Brillouin zone) """ + def n(k): return mp.reciprocal_to_cartesian(k, self.geometry_lattice).norm() def try_plus(k, v): - if n(k + v) < n(k): - return try_plus(k + v, v) - else: - return k + return try_plus(k + v, v) if n(k + v) < n(k) else k def _try(k, v): return try_plus(try_plus(k, v), mp.Vector3() - v) try_list = [ - mp.Vector3(1, 0, 0), mp.Vector3(0, 1, 0), mp.Vector3(0, 0, 1), - mp.Vector3(0, 1, 1), mp.Vector3(1, 0, 1), mp.Vector3(1, 1, 0), - mp.Vector3(0, 1, -1), mp.Vector3(1, 0, -1), mp.Vector3(1, -1, 0), - mp.Vector3(1, 1, 1), mp.Vector3(-1, 1, 1), mp.Vector3(1, -1, 1), + mp.Vector3(1, 0, 0), + mp.Vector3(0, 1, 0), + mp.Vector3(0, 0, 1), + mp.Vector3(0, 1, 1), + mp.Vector3(1, 0, 1), + mp.Vector3(1, 1, 0), + mp.Vector3(0, 1, -1), + mp.Vector3(1, 0, -1), + mp.Vector3(1, -1, 0), + mp.Vector3(1, 1, 1), + mp.Vector3(-1, 1, 1), + mp.Vector3(1, -1, 1), mp.Vector3(1, 1, -1), ] @@ -1131,16 +1165,17 @@ def transformed_overlap(self, W, w): def compute_symmetry(self, band, W, w): return self.mode_solver.compute_symmetry(band, W, w) - + def compute_symmetries(self, W, w): - symvals = [] - for band in range(1, self.num_bands+1): - symvals.append(self.mode_solver.compute_symmetry(band, W, w)) - return symvals + return [ + self.mode_solver.compute_symmetry(band, W, w) + for band in range(1, self.num_bands + 1) + ] # Predefined output functions (functions of the band index), for passing to `run` + def output_hfield(ms, which_band): ms.get_hfield(which_band, False) ms.output_field() @@ -1235,7 +1270,7 @@ def output_dpwr(ms, which_band): def output_tot_pwr(ms, which_band): ms.get_tot_pwr(which_band) - ms.output_field_to_file(-1, ms.get_filename_prefix() + 'tot.') + ms.output_field_to_file(-1, f"{ms.get_filename_prefix()}tot.") def output_dpwr_in_objects(output_func, min_energy, objects=[]): @@ -1267,39 +1302,40 @@ def output_charge_density(ms, which_band): def output_poynting(ms, which_band): ms.get_poynting(which_band) - ms.output_field_to_file(-1, ms.get_filename_prefix() + 'flux.') + ms.output_field_to_file(-1, f"{ms.get_filename_prefix()}flux.") def output_poynting_x(ms, which_band): ms.get_poynting(which_band) - ms.output_field_to_file(0, ms.get_filename_prefix() + 'flux.') + ms.output_field_to_file(0, f"{ms.get_filename_prefix()}flux.") def output_poynting_y(ms, which_band): ms.get_poynting(which_band) - ms.output_field_to_file(1, ms.get_filename_prefix() + 'flux.') + ms.output_field_to_file(1, f"{ms.get_filename_prefix()}flux.") def output_poynting_z(ms, which_band): ms.get_poynting(which_band) - ms.output_field_to_file(2, ms.get_filename_prefix() + 'flux.') + ms.output_field_to_file(2, f"{ms.get_filename_prefix()}flux.") def display_yparities(ms): - ms.display_kpoint_data('yparity', ms.mode_solver.compute_yparities()) + ms.display_kpoint_data("yparity", ms.mode_solver.compute_yparities()) def display_zparities(ms): - ms.display_kpoint_data('zparity', ms.mode_solver.compute_zparities()) + ms.display_kpoint_data("zparity", ms.mode_solver.compute_zparities()) def display_group_velocities(ms): - ms.display_kpoint_data('velocity', ms.compute_group_velocities()) + ms.display_kpoint_data("velocity", ms.compute_group_velocities()) # Band functions to pick a canonical phase for the eigenstate of the # given band based upon the spatial representation of the given field + def fix_hfield_phase(ms, which_band): ms.get_hfield(which_band, False) ms.mode_solver.fix_field_phase() @@ -1343,6 +1379,7 @@ def combine_band_functions(*band_funcs): def _combine(ms, which_band): for f in band_funcs: apply_band_func(ms, f, which_band) + return _combine diff --git a/python/source.py b/python/source.py index b50a30acb..bedede024 100644 --- a/python/source.py +++ b/python/source.py @@ -1,17 +1,18 @@ -# -*- coding: utf-8 -*- import warnings -import meep as mp + from meep.geom import Vector3, check_nonnegative +import meep as mp + def check_positive(prop, val): if val > 0: return val else: - raise ValueError("{} must be positive. Got {}".format(prop, val)) + raise ValueError(f"{prop} must be positive. Got {val}") -class Source(object): +class Source: """ The `Source` class is used to specify the current sources via the `Simulation.sources` attribute. Note that all sources in Meep are separable in time and space, i.e. of the @@ -33,8 +34,19 @@ class Source(object): the book [Advances in FDTD Computational Electrodynamics: Photonics and Nanotechnology](https://www.amazon.com/Advances-FDTD-Computational-Electrodynamics-Nanotechnology/dp/1608071707). """ - def __init__(self, src, component, center=None, volume=None, size=Vector3(), amplitude=1.0, amp_func=None, - amp_func_file='', amp_data=None): + + def __init__( + self, + src, + component, + center=None, + volume=None, + size=Vector3(), + amplitude=1.0, + amp_func=None, + amp_func_file="", + amp_data=None, + ): """ Construct a `Source`. @@ -115,11 +127,12 @@ def __init__(self, src, component, center=None, volume=None, size=Vector3(), amp self.amp_data = amp_data -class SourceTime(object): +class SourceTime: """ This is the parent for classes describing the time dependence of sources; it should not be instantiated directly. """ + def __init__(self, is_integrated=False): self.is_integrated = is_integrated @@ -132,9 +145,18 @@ class ContinuousSource(SourceTime): response](FAQ.md#why-doesnt-the-continuous-wave-cw-source-produce-an-exact-single-frequency-response). """ - def __init__(self, frequency=None, start_time=0, end_time=1.0e20, width=0, - fwidth=float('inf'), cutoff=3.0, wavelength=None, - is_integrated=False, **kwargs): + def __init__( + self, + frequency=None, + start_time=0, + end_time=1.0e20, + width=0, + fwidth=float("inf"), + cutoff=3.0, + wavelength=None, + is_integrated=False, + **kwargs, + ): """ Construct a `ContinuousSource`. @@ -171,16 +193,19 @@ def __init__(self, frequency=None, start_time=0, end_time=1.0e20, width=0, """ if frequency is None and wavelength is None: - raise ValueError("Must set either frequency or wavelength in {}.".format(self.__class__.__name__)) + raise ValueError( + f"Must set either frequency or wavelength in {self.__class__.__name__}." + ) - super(ContinuousSource, self).__init__(is_integrated=is_integrated, **kwargs) + super().__init__(is_integrated=is_integrated, **kwargs) self.frequency = 1 / wavelength if wavelength else float(frequency) self.start_time = start_time self.end_time = end_time self.width = max(width, 1 / fwidth) self.cutoff = cutoff - self.swigobj = mp.continuous_src_time(self.frequency, self.width, self.start_time, - self.end_time, self.cutoff) + self.swigobj = mp.continuous_src_time( + self.frequency, self.width, self.start_time, self.end_time, self.cutoff + ) self.swigobj.is_integrated = self.is_integrated @@ -192,8 +217,18 @@ class GaussianSource(SourceTime): (t-t_0)^2/2w^2)$, but the difference between this and a true Gaussian is usually irrelevant. """ - def __init__(self, frequency=None, width=0, fwidth=float('inf'), start_time=0, cutoff=5.0, - is_integrated=False, wavelength=None, **kwargs): + + def __init__( + self, + frequency=None, + width=0, + fwidth=float("inf"), + start_time=0, + cutoff=5.0, + is_integrated=False, + wavelength=None, + **kwargs, + ): """ Construct a `GaussianSource`. @@ -238,16 +273,22 @@ def __init__(self, frequency=None, width=0, fwidth=float('inf'), start_time=0, c `amplitude` or `amp_func` factor that you specified for the source. """ if frequency is None and wavelength is None: - raise ValueError("Must set either frequency or wavelength in {}.".format(self.__class__.__name__)) + raise ValueError( + f"Must set either frequency or wavelength in {self.__class__.__name__}." + ) - super(GaussianSource, self).__init__(is_integrated=is_integrated, **kwargs) + super().__init__(is_integrated=is_integrated, **kwargs) self.frequency = 1 / wavelength if wavelength else float(frequency) self.width = max(width, 1 / fwidth) self.start_time = start_time self.cutoff = cutoff - self.swigobj = mp.gaussian_src_time(self.frequency, self.width, self.start_time, - self.start_time + 2 * self.width * self.cutoff) + self.swigobj = mp.gaussian_src_time( + self.frequency, + self.width, + self.start_time, + self.start_time + 2 * self.width * self.cutoff, + ) self.swigobj.is_integrated = self.is_integrated def fourier_transform(self, freq): @@ -267,8 +308,16 @@ class CustomSource(SourceTime): [`examples/chirped_pulse.py`](https://github.com/NanoComp/meep/blob/master/python/examples/chirped_pulse.py). """ - def __init__(self, src_func, start_time=-1.0e20, end_time=1.0e20, is_integrated=False, - center_frequency=0, fwidth=0, **kwargs): + def __init__( + self, + src_func, + start_time=-1.0e20, + end_time=1.0e20, + is_integrated=False, + center_frequency=0, + fwidth=0, + **kwargs, + ): """ Construct a `CustomSource`. @@ -301,14 +350,15 @@ def __init__(self, src_func, start_time=-1.0e20, end_time=1.0e20, is_integrated= automatically determine the decimation factor of the time-series updates of the DFT fields monitors (if any). """ - super(CustomSource, self).__init__(is_integrated=is_integrated, **kwargs) + super().__init__(is_integrated=is_integrated, **kwargs) self.src_func = src_func self.start_time = start_time self.end_time = end_time self.fwidth = fwidth self.center_frequency = center_frequency - self.swigobj = mp.custom_py_src_time(src_func, start_time, end_time, - center_frequency, fwidth) + self.swigobj = mp.custom_py_src_time( + src_func, start_time, end_time, center_frequency, fwidth + ) self.swigobj.is_integrated = self.is_integrated @@ -364,21 +414,24 @@ class EigenModeSource(Source): The `SourceTime` object (`Source.src`), which specifies the time dependence of the source, can be one of `ContinuousSource`, `GaussianSource` or `CustomSource`. """ - def __init__(self, - src, - center=None, - volume=None, - eig_lattice_size=None, - eig_lattice_center=None, - component=mp.ALL_COMPONENTS, - direction=mp.AUTOMATIC, - eig_band=1, - eig_kpoint=Vector3(), - eig_match_freq=True, - eig_parity=mp.NO_PARITY, - eig_resolution=0, - eig_tolerance=1e-12, - **kwargs): + + def __init__( + self, + src, + center=None, + volume=None, + eig_lattice_size=None, + eig_lattice_center=None, + component=mp.ALL_COMPONENTS, + direction=mp.AUTOMATIC, + eig_band=1, + eig_kpoint=Vector3(), + eig_match_freq=True, + eig_parity=mp.NO_PARITY, + eig_resolution=0, + eig_tolerance=1e-12, + **kwargs, + ): """ Construct an `EigenModeSource`. @@ -460,7 +513,7 @@ def __init__(self, simulation. """ - super(EigenModeSource, self).__init__(src, component, center, volume, **kwargs) + super().__init__(src, component, center, volume, **kwargs) self.eig_lattice_size = eig_lattice_size self.eig_lattice_center = eig_lattice_center self.component = component @@ -478,10 +531,7 @@ def eig_lattice_size(self): @eig_lattice_size.setter def eig_lattice_size(self, val): - if val is None: - self._eig_lattice_size = self.size - else: - self._eig_lattice_size = val + self._eig_lattice_size = self.size if val is None else val @property def eig_lattice_center(self): @@ -489,10 +539,7 @@ def eig_lattice_center(self): @eig_lattice_center.setter def eig_lattice_center(self, val): - if val is None: - self._eig_lattice_center = self.center - else: - self._eig_lattice_center = val + self._eig_lattice_center = self.center if val is None else val @property def component(self): @@ -501,7 +548,10 @@ def component(self): @component.setter def component(self, val): if val != mp.ALL_COMPONENTS: - warnings.warn("EigenModeSource component is not ALL_COMPONENTS (the default), which makes it non-unidirectional.",RuntimeWarning) + warnings.warn( + "EigenModeSource component is not ALL_COMPONENTS (the default), which makes it non-unidirectional.", + RuntimeWarning, + ) self._component = val @property @@ -511,7 +561,7 @@ def eig_band(self): @eig_band.setter def eig_band(self, val): if isinstance(val, int): - self._eig_band = check_positive('EigenModeSource.eig_band', val) + self._eig_band = check_positive("EigenModeSource.eig_band", val) else: self._eig_band = val @@ -521,7 +571,7 @@ def eig_resolution(self): @eig_resolution.setter def eig_resolution(self, val): - self._eig_resolution = check_nonnegative('EigenModeSource.eig_resolution', val) + self._eig_resolution = check_nonnegative("EigenModeSource.eig_resolution", val) @property def eig_tolerance(self): @@ -529,16 +579,17 @@ def eig_tolerance(self): @eig_tolerance.setter def eig_tolerance(self, val): - self._eig_tolerance = check_positive('EigenModeSource.eig_tolerance', val) + self._eig_tolerance = check_positive("EigenModeSource.eig_tolerance", val) - def eig_power(self,freq): + def eig_power(self, freq): """ Returns the total power of the fields from the eigenmode source at frequency `freq`. """ amp = self.amplitude if callable(getattr(self.src, "fourier_transform", None)): - amp *= self.src.fourier_transform(freq) - return abs(amp)**2 + amp *= self.src.fourier_transform(freq) + return abs(amp) ** 2 + class GaussianBeamSource(Source): """ @@ -549,16 +600,18 @@ class GaussianBeamSource(Source): The `SourceTime` object (`Source.src`), which specifies the time dependence of the source, should normally be a narrow-band `ContinuousSource` or `GaussianSource`. (For a `CustomSource`, the beam frequency is determined by the source's `center_frequency` parameter.) """ - def __init__(self, - src, - center=None, - volume=None, - component=mp.ALL_COMPONENTS, - beam_x0=Vector3(), - beam_kdir=Vector3(), - beam_w0=None, - beam_E0=Vector3(), - **kwargs): + def __init__( + self, + src, + center=None, + volume=None, + component=mp.ALL_COMPONENTS, + beam_x0=Vector3(), + beam_kdir=Vector3(), + beam_w0=None, + beam_E0=Vector3(), + **kwargs, + ): """ Construct a `GaussianBeamSource`. @@ -571,7 +624,7 @@ def __init__(self, + **`beam_E0` [`Vector3`]** — The polarization vector of the beam. Elements can be complex valued (i.e., for circular polarization). The polarization vector must be *parallel* to the source region in order to generate a transverse mode. """ - super(GaussianBeamSource, self).__init__(src, component, center, volume, **kwargs) + super().__init__(src, component, center, volume, **kwargs) self._beam_x0 = beam_x0 self._beam_kdir = beam_kdir self._beam_w0 = beam_w0 @@ -593,13 +646,15 @@ def beam_w0(self): def beam_E0(self): return self._beam_E0 + class IndexedSource(Source): """ created a source object using (SWIG-wrapped mp::srcdata*) srcdata. """ + def __init__(self, src, srcdata, amp_arr, needs_boundary_fix=False): self.src = src self.num_pts = len(amp_arr) self.srcdata = srcdata self.amp_arr = amp_arr - self.needs_boundary_fix = needs_boundary_fix \ No newline at end of file + self.needs_boundary_fix = needs_boundary_fix diff --git a/python/tests/test_3rd_harm_1d.py b/python/tests/test_3rd_harm_1d.py index 87e9ee4e7..99a4fe910 100644 --- a/python/tests/test_3rd_harm_1d.py +++ b/python/tests/test_3rd_harm_1d.py @@ -1,9 +1,11 @@ import unittest -import meep as mp + from utils import ApproxComparisonTestCase -class Test3rdHarm1d(ApproxComparisonTestCase): +import meep as mp + +class Test3rdHarm1d(ApproxComparisonTestCase): def setUp(self): self.sz = 100 fcen = 1 / 3.0 @@ -18,23 +20,31 @@ def setUp(self): pml_layers = mp.PML(self.dpml) - sources = mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ex, - center=mp.Vector3(0, 0, (-0.5 * self.sz) + self.dpml), amplitude=self.amp) + sources = mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=mp.Ex, + center=mp.Vector3(0, 0, (-0.5 * self.sz) + self.dpml), + amplitude=self.amp, + ) nfreq = 400 fmin = fcen / 2.0 fmax = fcen * 4 - self.sim = mp.Simulation(cell_size=cell, - geometry=[], - sources=[sources], - boundary_layers=[pml_layers], - default_material=default_material, - resolution=20, - dimensions=dimensions) + self.sim = mp.Simulation( + cell_size=cell, + geometry=[], + sources=[sources], + boundary_layers=[pml_layers], + default_material=default_material, + resolution=20, + dimensions=dimensions, + ) fr = mp.FluxRegion(mp.Vector3(0, 0, (0.5 * self.sz) - self.dpml - 0.5)) - self.trans = self.sim.add_flux(0.5 * (fmin + fmax), fmax - fmin, nfreq, fr, decimation_factor=1) + self.trans = self.sim.add_flux( + 0.5 * (fmin + fmax), fmax - fmin, nfreq, fr, decimation_factor=1 + ) self.trans1 = self.sim.add_flux(fcen, 0, 1, fr, decimation_factor=1) self.trans3 = self.sim.add_flux(3 * fcen, 0, 1, fr, decimation_factor=1) @@ -48,11 +58,16 @@ def test_3rd_harm_1d(self): ) ) - harmonics = [self.k, self.amp, mp.get_fluxes(self.trans1)[0], mp.get_fluxes(self.trans3)[0]] + harmonics = [ + self.k, + self.amp, + mp.get_fluxes(self.trans1)[0], + mp.get_fluxes(self.trans3)[0], + ] tol = 3e-5 if mp.is_single_precision() else 1e-7 self.assertClose(expected_harmonics, harmonics, epsilon=tol) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_absorber_1d.py b/python/tests/test_absorber_1d.py index b8c9690ce..5a408f1ad 100644 --- a/python/tests/test_absorber_1d.py +++ b/python/tests/test_absorber_1d.py @@ -1,10 +1,11 @@ import unittest -import meep as mp + from meep.materials import Al +import meep as mp -class TestAbsorber(unittest.TestCase): +class TestAbsorber(unittest.TestCase): def setUp(self): resolution = 40 @@ -12,19 +13,30 @@ def setUp(self): absorber_layers = [mp.Absorber(1, direction=mp.Z)] - sources = [mp.Source(src=mp.GaussianSource(1 / 0.803, fwidth=0.1), center=mp.Vector3(), - component=mp.Ex)] - - self.sim = mp.Simulation(cell_size=cell_size, - resolution=resolution, - dimensions=1, - default_material=Al, - boundary_layers=absorber_layers, - sources=sources) + sources = [ + mp.Source( + src=mp.GaussianSource(1 / 0.803, fwidth=0.1), + center=mp.Vector3(), + component=mp.Ex, + ) + ] + + self.sim = mp.Simulation( + cell_size=cell_size, + resolution=resolution, + dimensions=1, + default_material=Al, + boundary_layers=absorber_layers, + sources=sources, + ) def test_absorber(self): - self.sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ex, mp.Vector3(), 1e-6)) + self.sim.run( + until_after_sources=mp.stop_when_fields_decayed( + 50, mp.Ex, mp.Vector3(), 1e-6 + ) + ) f = self.sim.get_field_point(mp.Ex, mp.Vector3()) self.assertAlmostEqual(f.real, 3.218846961494622e-13, places=6) @@ -33,14 +45,14 @@ def test_absorber_2d(self): source = mp.Source( src=mp.GaussianSource(frequency=0.1, fwidth=0.1), component=mp.Hz, - center=mp.Vector3() + center=mp.Vector3(), ) sim = mp.Simulation( cell_size=mp.Vector3(20, 20, 0), resolution=10, sources=[source], - boundary_layers=[mp.Absorber(5)] + boundary_layers=[mp.Absorber(5)], ) sim.run(until_after_sources=1000) @@ -50,5 +62,5 @@ def test_absorber_2d(self): self.assertAlmostEqual(-4.058476603571745e-11, p.real) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_adjoint_cyl.py b/python/tests/test_adjoint_cyl.py index ab6a3307d..98bc01d33 100644 --- a/python/tests/test_adjoint_cyl.py +++ b/python/tests/test_adjoint_cyl.py @@ -1,19 +1,22 @@ import meep as mp + try: import meep.adjoint as mpa except: import adjoint as mpa + +import unittest +from enum import Enum + import numpy as np from autograd import numpy as npa from autograd import tensor_jacobian_product -import unittest -from enum import Enum from utils import ApproxComparisonTestCase rng = np.random.RandomState(2) resolution = 20 dimensions = mp.CYLINDRICAL -m=0 +m = 0 Si = mp.Medium(index=3.4) SiO2 = mp.Medium(index=1.44) @@ -23,87 +26,110 @@ dpml = 1.0 boundary_layers = [mp.PML(thickness=dpml)] -design_region_resolution = int(2*resolution) +design_region_resolution = int(2 * resolution) design_r = 5 design_z = 2 -Nr, Nz = int(design_r*design_region_resolution), int(design_z*design_region_resolution) +Nr, Nz = int(design_r * design_region_resolution), int( + design_z * design_region_resolution +) -fcen = 1/1.55 +fcen = 1 / 1.55 width = 0.2 fwidth = width * fcen -source_center = [design_r/2,0,-(sz/2-dpml+design_z/2)/2] -source_size = mp.Vector3(design_r,0,0) -src = mp.GaussianSource(frequency=fcen,fwidth=fwidth) -source = [mp.Source(src,component=mp.Er, - center=source_center, - size=source_size)] +source_center = [design_r / 2, 0, -(sz / 2 - dpml + design_z / 2) / 2] +source_size = mp.Vector3(design_r, 0, 0) +src = mp.GaussianSource(frequency=fcen, fwidth=fwidth) +source = [mp.Source(src, component=mp.Er, center=source_center, size=source_size)] ## random design region -p = 0.5*rng.rand(Nr*Nz) +p = 0.5 * rng.rand(Nr * Nz) ## random epsilon perturbation for design region deps = 1e-5 -dp = deps*rng.rand(Nr*Nz) +dp = deps * rng.rand(Nr * Nz) def forward_simulation(design_params): - matgrid = mp.MaterialGrid(mp.Vector3(Nr,0,Nz), - SiO2, - Si, - weights=design_params.reshape(Nr,1,Nz)) - - geometry = [mp.Block(center=mp.Vector3(design_r/2,0,0), - size=mp.Vector3(design_r,0,design_z), - material=matgrid)] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=boundary_layers, - sources=source, - geometry=geometry, - dimensions=dimensions, - m=m) + matgrid = mp.MaterialGrid( + mp.Vector3(Nr, 0, Nz), SiO2, Si, weights=design_params.reshape(Nr, 1, Nz) + ) + + geometry = [ + mp.Block( + center=mp.Vector3(design_r / 2, 0, 0), + size=mp.Vector3(design_r, 0, design_z), + material=matgrid, + ) + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=boundary_layers, + sources=source, + geometry=geometry, + dimensions=dimensions, + m=m, + ) frequencies = [fcen] - far_x = [mp.Vector3(5,0,20)] + far_x = [mp.Vector3(5, 0, 20)] mode = sim.add_near2far( frequencies, - mp.Near2FarRegion(center=mp.Vector3(design_r/2,0,(sz/2-dpml+design_z/2)/2), - size=mp.Vector3(design_r,0,0),weight=+1)) + mp.Near2FarRegion( + center=mp.Vector3(design_r / 2, 0, (sz / 2 - dpml + design_z / 2) / 2), + size=mp.Vector3(design_r, 0, 0), + weight=+1, + ), + ) sim.run(until_after_sources=1200) Er = sim.get_farfield(mode, far_x[0]) sim.reset_meep() - return abs(Er[0])**2 + return abs(Er[0]) ** 2 def adjoint_solver(design_params): - design_variables = mp.MaterialGrid(mp.Vector3(Nr,0,Nz),SiO2,Si) - design_region = mpa.DesignRegion(design_variables, - volume=mp.Volume(center=mp.Vector3(design_r/2,0,0), - size=mp.Vector3(design_r,0,design_z))) - geometry = [mp.Block(center=design_region.center, - size=design_region.size, - material=design_variables)] - - sim = mp.Simulation(cell_size=cell_size, + design_variables = mp.MaterialGrid(mp.Vector3(Nr, 0, Nz), SiO2, Si) + design_region = mpa.DesignRegion( + design_variables, + volume=mp.Volume( + center=mp.Vector3(design_r / 2, 0, 0), + size=mp.Vector3(design_r, 0, design_z), + ), + ) + geometry = [ + mp.Block( + center=design_region.center, + size=design_region.size, + material=design_variables, + ) + ] + + sim = mp.Simulation( + cell_size=cell_size, boundary_layers=boundary_layers, geometry=geometry, sources=source, resolution=resolution, dimensions=dimensions, - m=m) - - far_x = [mp.Vector3(5,0,20)] - NearRegions = [mp.Near2FarRegion(center=mp.Vector3(design_r/2,0,(sz/2-dpml+design_z/2)/2), - size=mp.Vector3(design_r,0,0), - weight=+1)] - FarFields = mpa.Near2FarFields(sim, NearRegions ,far_x) + m=m, + ) + + far_x = [mp.Vector3(5, 0, 20)] + NearRegions = [ + mp.Near2FarRegion( + center=mp.Vector3(design_r / 2, 0, (sz / 2 - dpml + design_z / 2) / 2), + size=mp.Vector3(design_r, 0, 0), + weight=+1, + ) + ] + FarFields = mpa.Near2FarFields(sim, NearRegions, far_x) ob_list = [FarFields] def J(alpha): - return npa.abs(alpha[0,0,0])**2 + return npa.abs(alpha[0, 0, 0]) ** 2 opt = mpa.OptimizationProblem( simulation=sim, @@ -111,9 +137,10 @@ def J(alpha): objective_arguments=ob_list, design_regions=[design_region], fcen=fcen, - df = 0, - nf = 1, - maximum_run_time=1200) + df=0, + nf=1, + maximum_run_time=1200, + ) f, dJ_du = opt([design_params]) sim.reset_meep() @@ -122,7 +149,6 @@ def J(alpha): class TestAdjointSolver(ApproxComparisonTestCase): - def test_adjoint_solver_cyl_n2f_fields(self): print("*** TESTING CYLINDRICAL Near2Far ADJOINT FEATURES ***") adjsol_obj, adjsol_grad = adjoint_solver(p) @@ -131,23 +157,24 @@ def test_adjoint_solver_cyl_n2f_fields(self): S12_unperturbed = forward_simulation(p) ## compare objective results - print("|Er|^2 -- adjoint solver: {}, traditional simulation: {}".format(adjsol_obj,S12_unperturbed)) - self.assertClose(adjsol_obj,S12_unperturbed,epsilon=1e-3) + print( + f"|Er|^2 -- adjoint solver: {adjsol_obj}, traditional simulation: {S12_unperturbed}" + ) + + self.assertClose(adjsol_obj, S12_unperturbed, epsilon=1e-3) ## compute perturbed S12 - S12_perturbed = forward_simulation(p+dp) + S12_perturbed = forward_simulation(p + dp) ## compare gradients if adjsol_grad.ndim < 2: - adjsol_grad = np.expand_dims(adjsol_grad,axis=1) - adj_scale = (dp[None,:]@adjsol_grad).flatten() - fd_grad = S12_perturbed-S12_unperturbed - print("Directional derivative -- adjoint solver: {}, FD: {}".format(adj_scale,fd_grad)) + adjsol_grad = np.expand_dims(adjsol_grad, axis=1) + adj_scale = (dp[None, :] @ adjsol_grad).flatten() + fd_grad = S12_perturbed - S12_unperturbed + print(f"Directional derivative -- adjoint solver: {adj_scale}, FD: {fd_grad}") tol = 0.2 if mp.is_single_precision() else 0.1 - self.assertClose(adj_scale,fd_grad,epsilon=tol) - - + self.assertClose(adj_scale, fd_grad, epsilon=tol) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_adjoint_jax.py b/python/tests/test_adjoint_jax.py index 6513369a1..ea007ddc5 100644 --- a/python/tests/test_adjoint_jax.py +++ b/python/tests/test_adjoint_jax.py @@ -1,16 +1,16 @@ import unittest -import parameterized - -from utils import ApproxComparisonTestCase import jax import jax.numpy as jnp -import meep as mp import meep.adjoint as mpa import numpy as onp +import parameterized +from utils import ApproxComparisonTestCase + +import meep as mp # The calculation of finite difference gradients requires that JAX be operated with double precision -jax.config.update('jax_enable_x64', True) +jax.config.update("jax_enable_x64", True) # The step size for the finite difference gradient calculation _FD_STEP = 1e-4 @@ -41,9 +41,13 @@ def build_straight_wg_simulation( # Simulation domain size sx = 2 * pml_width + 2 * wg_length + design_region_shape[0] - sy = 2 * pml_width + 2 * wg_padding + max( - wg_width, - design_region_shape[1], + sy = ( + 2 * pml_width + + 2 * wg_padding + + max( + wg_width, + design_region_shape[1], + ) ) # Mean / center frequency @@ -54,8 +58,7 @@ def build_straight_wg_simulation( sources = [ mp.EigenModeSource( - mp.GaussianSource(frequency=fmean, - fwidth=fmean * gaussian_rel_width), + mp.GaussianSource(frequency=fmean, fwidth=fmean * gaussian_rel_width), eig_band=1, direction=mp.NO_DIRECTION, eig_kpoint=mp.Vector3(1, 0, 0), @@ -63,8 +66,7 @@ def build_straight_wg_simulation( center=[-sx / 2 + pml_width + source_to_pml, 0, 0], ), mp.EigenModeSource( - mp.GaussianSource(frequency=fmean, - fwidth=fmean * gaussian_rel_width), + mp.GaussianSource(frequency=fmean, fwidth=fmean * gaussian_rel_width), eig_band=1, direction=mp.NO_DIRECTION, eig_kpoint=mp.Vector3(-1, 0, 0), @@ -72,12 +74,14 @@ def build_straight_wg_simulation( center=[sx / 2 - pml_width - source_to_pml, 0, 0], ), ] - nx, ny = int(design_region_shape[0]*design_region_resolution), int(design_region_shape[1]*design_region_resolution) + nx, ny = int(design_region_shape[0] * design_region_resolution), int( + design_region_shape[1] * design_region_resolution + ) mat_grid = mp.MaterialGrid( mp.Vector3(nx, ny), sio2, si, - grid_type='U_DEFAULT', + grid_type="U_DEFAULT", ) design_regions = [ @@ -95,19 +99,25 @@ def build_straight_wg_simulation( ] geometry = [ - mp.Block(center=mp.Vector3(x=-design_region_shape[0] / 2 - - wg_length / 2 - pml_width / 2), - material=si, - size=mp.Vector3(wg_length + pml_width, wg_width, - 0)), # left wg - mp.Block(center=mp.Vector3(x=+design_region_shape[0] / 2 + - wg_length / 2 + pml_width / 2), - material=si, - size=mp.Vector3(wg_length + pml_width, wg_width, - 0)), # right wg - mp.Block(center=design_regions[0].center, - size=design_regions[0].size, - material=mat_grid), # design region + mp.Block( + center=mp.Vector3( + x=-design_region_shape[0] / 2 - wg_length / 2 - pml_width / 2 + ), + material=si, + size=mp.Vector3(wg_length + pml_width, wg_width, 0), + ), # left wg + mp.Block( + center=mp.Vector3( + x=+design_region_shape[0] / 2 + wg_length / 2 + pml_width / 2 + ), + material=si, + size=mp.Vector3(wg_length + pml_width, wg_width, 0), + ), # right wg + mp.Block( + center=design_regions[0].center, + size=design_regions[0].size, + material=mat_grid, + ), # design region ] simulation = mp.Simulation( @@ -125,11 +135,14 @@ def build_straight_wg_simulation( monitor_size = mp.Vector3(y=wg_width + 2 * wg_padding) monitors = [ - mpa.EigenmodeCoefficient(simulation, - mp.Volume(center=center, size=monitor_size), - mode=1, - forward=forward) - for center in monitor_centers for forward in [True, False] + mpa.EigenmodeCoefficient( + simulation, + mp.Volume(center=center, size=monitor_size), + mode=1, + forward=forward, + ) + for center in monitor_centers + for forward in [True, False] ] return simulation, sources, monitors, design_regions, frequencies @@ -150,36 +163,74 @@ def test_mode_monitor_helpers(self): self.simulation.run(until=100) monitor_values = mpa.utils.gather_monitor_values(self.monitors) self.assertEqual(monitor_values.dtype, onp.complex128) - self.assertEqual(monitor_values.shape, - (len(self.monitors), len(self.frequencies))) - + self.assertEqual( + monitor_values.shape, (len(self.monitors), len(self.frequencies)) + ) + def test_dist_dft_pointers(self): fwd_design_region_monitors = mpa.utils.install_design_region_monitors( self.simulation, self.design_regions, self.frequencies, ) - self.assertEqual(len(fwd_design_region_monitors[0]),_NUM_DES_REG_MON) - + self.assertEqual(len(fwd_design_region_monitors[0]), _NUM_DES_REG_MON) class WrapperTest(ApproxComparisonTestCase): - @parameterized.parameterized.expand([ - ('1500_1550bw_01relative_gaussian_port1', - onp.linspace(1 / 1.50, 1 / 1.55, 3).tolist(), 0.1, 0.5, 0), - ('1550_1600bw_02relative_gaussian_port1', - onp.linspace(1 / 1.55, 1 / 1.60, 3).tolist(), 0.2, 0.5, 0), - ('1500_1600bw_03relative_gaussian_port1', - onp.linspace(1 / 1.50, 1 / 1.60, 4).tolist(), 0.3, 0.5, 0), - ('1500_1550bw_01relative_gaussian_port2', - onp.linspace(1 / 1.50, 1 / 1.55, 3).tolist(), 0.1, 0.5, 1), - ('1550_1600bw_02relative_gaussian_port2', - onp.linspace(1 / 1.55, 1 / 1.60, 3).tolist(), 0.2, 0.5, 1), - ('1500_1600bw_03relative_gaussian_port2', - onp.linspace(1 / 1.50, 1 / 1.60, 4).tolist(), 0.3, 0.5, 1), - ]) - def test_wrapper_gradients(self, _, frequencies, gaussian_rel_width, - design_variable_fill_value, excite_port_idx): + @parameterized.parameterized.expand( + [ + ( + "1500_1550bw_01relative_gaussian_port1", + onp.linspace(1 / 1.50, 1 / 1.55, 3).tolist(), + 0.1, + 0.5, + 0, + ), + ( + "1550_1600bw_02relative_gaussian_port1", + onp.linspace(1 / 1.55, 1 / 1.60, 3).tolist(), + 0.2, + 0.5, + 0, + ), + ( + "1500_1600bw_03relative_gaussian_port1", + onp.linspace(1 / 1.50, 1 / 1.60, 4).tolist(), + 0.3, + 0.5, + 0, + ), + ( + "1500_1550bw_01relative_gaussian_port2", + onp.linspace(1 / 1.50, 1 / 1.55, 3).tolist(), + 0.1, + 0.5, + 1, + ), + ( + "1550_1600bw_02relative_gaussian_port2", + onp.linspace(1 / 1.55, 1 / 1.60, 3).tolist(), + 0.2, + 0.5, + 1, + ), + ( + "1500_1600bw_03relative_gaussian_port2", + onp.linspace(1 / 1.50, 1 / 1.60, 4).tolist(), + 0.3, + 0.5, + 1, + ), + ] + ) + def test_wrapper_gradients( + self, + _, + frequencies, + gaussian_rel_width, + design_variable_fill_value, + excite_port_idx, + ): """Tests gradient from the JAX-Meep wrapper against finite differences.""" ( simulation, @@ -187,11 +238,13 @@ def test_wrapper_gradients(self, _, frequencies, gaussian_rel_width, monitors, design_regions, frequencies, - ) = build_straight_wg_simulation(frequencies=frequencies, - gaussian_rel_width=gaussian_rel_width) + ) = build_straight_wg_simulation( + frequencies=frequencies, gaussian_rel_width=gaussian_rel_width + ) design_shape = tuple( - int(i) for i in design_regions[0].design_parameters.grid_size)[:2] + int(i) for i in design_regions[0].design_parameters.grid_size + )[:2] x = onp.ones(design_shape) * design_variable_fill_value # Define a loss function @@ -205,16 +258,12 @@ def loss_fn(x, excite_port_idx=0): ) monitor_values = wrapped_meep([x]) s1p, s1m, s2m, s2p = monitor_values - if excite_port_idx == 0: - t = s2m / s1p - else: - t = s1m / s2p - # Mean transmission vs wavelength - t_mean = jnp.mean(jnp.square(jnp.abs(t))) - return t_mean + t = s2m / s1p if excite_port_idx == 0 else s1m / s2p + return jnp.mean(jnp.square(jnp.abs(t))) value, adjoint_grad = jax.value_and_grad(loss_fn)( - x, excite_port_idx=excite_port_idx) + x, excite_port_idx=excite_port_idx + ) projection = [] fd_projection = [] @@ -231,14 +280,14 @@ def loss_fn(x, excite_port_idx=0): x_perturbed = x + random_perturbation_vector # Calculate T(p + dp) - value_perturbed = loss_fn(x_perturbed, - excite_port_idx=excite_port_idx) + value_perturbed = loss_fn(x_perturbed, excite_port_idx=excite_port_idx) projection.append( onp.dot( random_perturbation_vector.ravel(), adjoint_grad.ravel(), - )) + ) + ) fd_projection.append(value_perturbed - value) projection = onp.stack(projection) @@ -252,5 +301,5 @@ def loss_fn(x, excite_port_idx=0): ) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_adjoint_solver.py b/python/tests/test_adjoint_solver.py index f7db4d152..56cee371a 100644 --- a/python/tests/test_adjoint_solver.py +++ b/python/tests/test_adjoint_solver.py @@ -1,17 +1,19 @@ import meep as mp + try: import meep.adjoint as mpa except: import adjoint as mpa + +import unittest +from enum import Enum + import numpy as np from autograd import numpy as npa from autograd import tensor_jacobian_product -import unittest -from enum import Enum from utils import ApproxComparisonTestCase - -MonitorObject = Enum('MonitorObject', 'EIGENMODE DFT LDOS') +MonitorObject = Enum("MonitorObject", "EIGENMODE DFT LDOS") class TestAdjointSolver(ApproxComparisonTestCase): @@ -20,115 +22,161 @@ def setUpClass(cls): cls.resolution = 30 # pixels/μm cls.silicon = mp.Medium(epsilon=12) - cls.sapphire = mp.Medium(epsilon_diag=(10.225,10.225,9.95), - epsilon_offdiag=(-0.825,-0.55*np.sqrt(3/2),0.55*np.sqrt(3/2))) + cls.sapphire = mp.Medium( + epsilon_diag=(10.225, 10.225, 9.95), + epsilon_offdiag=(-0.825, -0.55 * np.sqrt(3 / 2), 0.55 * np.sqrt(3 / 2)), + ) cls.sxy = 5.0 - cls.cell_size = mp.Vector3(cls.sxy,cls.sxy,0) + cls.cell_size = mp.Vector3(cls.sxy, cls.sxy, 0) cls.dpml = 1.0 cls.pml_xy = [mp.PML(thickness=cls.dpml)] - cls.pml_x = [mp.PML(thickness=cls.dpml,direction=mp.X)] + cls.pml_x = [mp.PML(thickness=cls.dpml, direction=mp.X)] - cls.eig_parity = mp.EVEN_Y+mp.ODD_Z + cls.eig_parity = mp.EVEN_Y + mp.ODD_Z - cls.design_region_size = mp.Vector3(1.5,1.5) - cls.design_region_resolution = int(2*cls.resolution) - cls.Nx = int(cls.design_region_size.x*cls.design_region_resolution) - cls.Ny = int(cls.design_region_size.y*cls.design_region_resolution) + cls.design_region_size = mp.Vector3(1.5, 1.5) + cls.design_region_resolution = int(2 * cls.resolution) + cls.Nx = int(cls.design_region_size.x * cls.design_region_resolution) + cls.Ny = int(cls.design_region_size.y * cls.design_region_resolution) # ensure reproducible results rng = np.random.RandomState(9861548) # random design region - cls.p = 0.5*rng.rand(cls.Nx*cls.Ny) + cls.p = 0.5 * rng.rand(cls.Nx * cls.Ny) # random perturbation for design region deps = 1e-5 - cls.dp = deps*rng.rand(cls.Nx*cls.Ny) + cls.dp = deps * rng.rand(cls.Nx * cls.Ny) cls.w = 1.0 - cls.waveguide_geometry = [mp.Block(material=cls.silicon, - center=mp.Vector3(), - size=mp.Vector3(mp.inf,cls.w,mp.inf))] - - cls.fcen = 1/1.55 - cls.df = 0.2*cls.fcen - cls.mode_source = [mp.EigenModeSource(src=mp.GaussianSource(cls.fcen,fwidth=cls.df), - center=mp.Vector3(-0.5*cls.sxy+cls.dpml,0), - size=mp.Vector3(0,cls.sxy-2*cls.dpml), - eig_parity=cls.eig_parity)] - - cls.pt_source = [mp.Source(src=mp.GaussianSource(cls.fcen,fwidth=cls.df), - center=mp.Vector3(-0.5*cls.sxy+cls.dpml,0), - size=mp.Vector3(), - component=mp.Ez)] - - cls.line_source = [mp.Source(src=mp.GaussianSource(cls.fcen,fwidth=cls.df), - center=mp.Vector3(-0.85,0), - size=mp.Vector3(0,cls.sxy-2*cls.dpml), - component=mp.Ez)] - - cls.k_point = mp.Vector3(0.23,-0.38) - - - def adjoint_solver(self, design_params, mon_type: MonitorObject, frequencies=None, - mat2=None, need_gradient=True): - matgrid = mp.MaterialGrid(mp.Vector3(self.Nx,self.Ny), - mp.air, - self.silicon if mat2 is None else mat2, - weights=np.ones((self.Nx,self.Ny))) - - matgrid_region = mpa.DesignRegion(matgrid, - volume=mp.Volume(center=mp.Vector3(), - size=mp.Vector3(self.design_region_size.x, - self.design_region_size.y, - 0))) - - matgrid_geometry = [mp.Block(center=matgrid_region.center, - size=matgrid_region.size, - material=matgrid)] + cls.waveguide_geometry = [ + mp.Block( + material=cls.silicon, + center=mp.Vector3(), + size=mp.Vector3(mp.inf, cls.w, mp.inf), + ) + ] + + cls.fcen = 1 / 1.55 + cls.df = 0.2 * cls.fcen + cls.mode_source = [ + mp.EigenModeSource( + src=mp.GaussianSource(cls.fcen, fwidth=cls.df), + center=mp.Vector3(-0.5 * cls.sxy + cls.dpml, 0), + size=mp.Vector3(0, cls.sxy - 2 * cls.dpml), + eig_parity=cls.eig_parity, + ) + ] + + cls.pt_source = [ + mp.Source( + src=mp.GaussianSource(cls.fcen, fwidth=cls.df), + center=mp.Vector3(-0.5 * cls.sxy + cls.dpml, 0), + size=mp.Vector3(), + component=mp.Ez, + ) + ] + + cls.line_source = [ + mp.Source( + src=mp.GaussianSource(cls.fcen, fwidth=cls.df), + center=mp.Vector3(-0.85, 0), + size=mp.Vector3(0, cls.sxy - 2 * cls.dpml), + component=mp.Ez, + ) + ] + + cls.k_point = mp.Vector3(0.23, -0.38) + + def adjoint_solver( + self, + design_params, + mon_type: MonitorObject, + frequencies=None, + mat2=None, + need_gradient=True, + ): + matgrid = mp.MaterialGrid( + mp.Vector3(self.Nx, self.Ny), + mp.air, + self.silicon if mat2 is None else mat2, + weights=np.ones((self.Nx, self.Ny)), + ) + + matgrid_region = mpa.DesignRegion( + matgrid, + volume=mp.Volume( + center=mp.Vector3(), + size=mp.Vector3( + self.design_region_size.x, self.design_region_size.y, 0 + ), + ), + ) + + matgrid_geometry = [ + mp.Block( + center=matgrid_region.center, size=matgrid_region.size, material=matgrid + ) + ] geometry = self.waveguide_geometry + matgrid_geometry - sim = mp.Simulation(resolution=self.resolution, - cell_size=self.cell_size, - boundary_layers=self.pml_xy, - sources=self.mode_source, - geometry=geometry) + sim = mp.Simulation( + resolution=self.resolution, + cell_size=self.cell_size, + boundary_layers=self.pml_xy, + sources=self.mode_source, + geometry=geometry, + ) if not frequencies: frequencies = [self.fcen] - if mon_type.name == 'EIGENMODE': - obj_list = [mpa.EigenmodeCoefficient(sim, - mp.Volume(center=mp.Vector3(0.5*self.sxy-self.dpml), - size=mp.Vector3(0,self.sxy-2*self.dpml,0)), - 1, - eig_parity=self.eig_parity)] + if mon_type.name == "EIGENMODE": + obj_list = [ + mpa.EigenmodeCoefficient( + sim, + mp.Volume( + center=mp.Vector3(0.5 * self.sxy - self.dpml), + size=mp.Vector3(0, self.sxy - 2 * self.dpml, 0), + ), + 1, + eig_parity=self.eig_parity, + ) + ] def J(mode_mon): - return npa.power(npa.abs(mode_mon),2) - elif mon_type.name == 'DFT': - obj_list = [mpa.FourierFields(sim, - mp.Volume(center=mp.Vector3(1.25), - size=mp.Vector3(0.25,1,0)), - mp.Ez)] + return npa.power(npa.abs(mode_mon), 2) + + elif mon_type.name == "DFT": + obj_list = [ + mpa.FourierFields( + sim, + mp.Volume(center=mp.Vector3(1.25), size=mp.Vector3(0.25, 1, 0)), + mp.Ez, + ) + ] def J(mode_mon): - return npa.power(npa.abs(mode_mon[:,4,10]),2) - elif mon_type.name == 'LDOS': + return npa.power(npa.abs(mode_mon[:, 4, 10]), 2) + + elif mon_type.name == "LDOS": sim.change_sources(self.line_source) obj_list = [mpa.LDOS(sim)] def J(mode_mon): return npa.array(mode_mon) - opt = mpa.OptimizationProblem(simulation=sim, - objective_functions=J, - objective_arguments=obj_list, - design_regions=[matgrid_region], - frequencies=frequencies) + opt = mpa.OptimizationProblem( + simulation=sim, + objective_functions=J, + objective_arguments=obj_list, + design_regions=[matgrid_region], + frequencies=frequencies, + ) if need_gradient: f, dJ_du = opt([design_params]) @@ -137,47 +185,61 @@ def J(mode_mon): f = opt([design_params], need_gradient=False) return f[0] - - def adjoint_solver_complex_fields(self, design_params, frequencies=None, need_gradient=True): - matgrid = mp.MaterialGrid(mp.Vector3(self.Nx,self.Ny), - mp.air, - self.silicon, - weights=np.ones((self.Nx,self.Ny))) - - matgrid_region = mpa.DesignRegion(matgrid, - volume=mp.Volume(center=mp.Vector3(), - size=mp.Vector3(self.design_region_size.x, - self.design_region_size.y, - 0))) - - geometry = [mp.Block(center=matgrid_region.center, - size=matgrid_region.size, - material=matgrid)] - - sim = mp.Simulation(resolution=self.resolution, - cell_size=self.cell_size, - default_material=self.silicon, - k_point=self.k_point, - boundary_layers=self.pml_x, - sources=self.pt_source, - geometry=geometry) + def adjoint_solver_complex_fields( + self, design_params, frequencies=None, need_gradient=True + ): + matgrid = mp.MaterialGrid( + mp.Vector3(self.Nx, self.Ny), + mp.air, + self.silicon, + weights=np.ones((self.Nx, self.Ny)), + ) + + matgrid_region = mpa.DesignRegion( + matgrid, + volume=mp.Volume( + center=mp.Vector3(), + size=mp.Vector3( + self.design_region_size.x, self.design_region_size.y, 0 + ), + ), + ) + + geometry = [ + mp.Block( + center=matgrid_region.center, size=matgrid_region.size, material=matgrid + ) + ] + + sim = mp.Simulation( + resolution=self.resolution, + cell_size=self.cell_size, + default_material=self.silicon, + k_point=self.k_point, + boundary_layers=self.pml_x, + sources=self.pt_source, + geometry=geometry, + ) if not frequencies: frequencies = [self.fcen] - obj_list = [mpa.FourierFields(sim, - mp.Volume(center=mp.Vector3(0.9), - size=mp.Vector3(0.2,0.5)), - mp.Dz)] + obj_list = [ + mpa.FourierFields( + sim, mp.Volume(center=mp.Vector3(0.9), size=mp.Vector3(0.2, 0.5)), mp.Dz + ) + ] def J(dft_mon): - return npa.power(npa.abs(dft_mon[:,3,9]),2) + return npa.power(npa.abs(dft_mon[:, 3, 9]), 2) - opt = mpa.OptimizationProblem(simulation=sim, - objective_functions=J, - objective_arguments=obj_list, - design_regions=[matgrid_region], - frequencies=frequencies) + opt = mpa.OptimizationProblem( + simulation=sim, + objective_functions=J, + objective_arguments=obj_list, + design_regions=[matgrid_region], + frequencies=frequencies, + ) if need_gradient: f, dJ_du = opt([design_params]) @@ -186,50 +248,69 @@ def J(dft_mon): f = opt([design_params], need_gradient=False) return f[0] - - def adjoint_solver_damping(self, design_params, frequencies=None, mat2=None, need_gradient=True): - matgrid = mp.MaterialGrid(mp.Vector3(self.Nx,self.Ny), - mp.air, - self.silicon if mat2 is None else mat2, - weights=np.ones((self.Nx,self.Ny)), - damping=np.pi*self.fcen) - - matgrid_region = mpa.DesignRegion(matgrid, - volume=mp.Volume(center=mp.Vector3(), - size=mp.Vector3(self.design_region_size.x, - self.design_region_size.y, - 0))) - - matgrid_geometry = [mp.Block(center=matgrid_region.center, - size=matgrid_region.size, - material=matgrid)] + def adjoint_solver_damping( + self, design_params, frequencies=None, mat2=None, need_gradient=True + ): + matgrid = mp.MaterialGrid( + mp.Vector3(self.Nx, self.Ny), + mp.air, + self.silicon if mat2 is None else mat2, + weights=np.ones((self.Nx, self.Ny)), + damping=np.pi * self.fcen, + ) + + matgrid_region = mpa.DesignRegion( + matgrid, + volume=mp.Volume( + center=mp.Vector3(), + size=mp.Vector3( + self.design_region_size.x, self.design_region_size.y, 0 + ), + ), + ) + + matgrid_geometry = [ + mp.Block( + center=matgrid_region.center, size=matgrid_region.size, material=matgrid + ) + ] geometry = self.waveguide_geometry + matgrid_geometry - sim = mp.Simulation(resolution=self.resolution, - cell_size=self.cell_size, - boundary_layers=self.pml_xy, - sources=self.mode_source, - geometry=geometry) + sim = mp.Simulation( + resolution=self.resolution, + cell_size=self.cell_size, + boundary_layers=self.pml_xy, + sources=self.mode_source, + geometry=geometry, + ) if not frequencies: frequencies = [self.fcen] - obj_list = [mpa.EigenmodeCoefficient(sim, - mp.Volume(center=mp.Vector3(0.5*self.sxy-self.dpml), - size=mp.Vector3(0,self.sxy-2*self.dpml,0)), - 1, - eig_parity=self.eig_parity)] + obj_list = [ + mpa.EigenmodeCoefficient( + sim, + mp.Volume( + center=mp.Vector3(0.5 * self.sxy - self.dpml), + size=mp.Vector3(0, self.sxy - 2 * self.dpml, 0), + ), + 1, + eig_parity=self.eig_parity, + ) + ] def J(mode_mon): - return npa.power(npa.abs(mode_mon),2) + return npa.power(npa.abs(mode_mon), 2) - opt = mpa.OptimizationProblem(simulation=sim, - objective_functions=J, - objective_arguments=obj_list, - design_regions=[matgrid_region], - frequencies=frequencies, - minimum_run_time=150) + opt = mpa.OptimizationProblem( + simulation=sim, + objective_functions=J, + objective_arguments=obj_list, + design_regions=[matgrid_region], + frequencies=frequencies, + minimum_run_time=150, + ) if need_gradient: f, dJ_du = opt([design_params]) @@ -238,232 +319,257 @@ def J(mode_mon): f = opt([design_params], need_gradient=False) return f[0] + def mapping(self, x, filter_radius, eta, beta): + filtered_field = mpa.conic_filter( + x, + filter_radius, + self.design_region_size.x, + self.design_region_size.y, + self.design_region_resolution, + ) - def mapping(self,x,filter_radius,eta,beta): - filtered_field = mpa.conic_filter(x, - filter_radius, - self.design_region_size.x, - self.design_region_size.y, - self.design_region_resolution) - - projected_field = mpa.tanh_projection(filtered_field,beta,eta) + projected_field = mpa.tanh_projection(filtered_field, beta, eta) return projected_field.flatten() - def test_DFT_fields(self): print("*** TESTING DFT OBJECTIVE ***") # test the single frequency and multi frequency cases - for frequencies in [[self.fcen], [1/1.58, self.fcen, 1/1.53]]: + for frequencies in [[self.fcen], [1 / 1.58, self.fcen, 1 / 1.53]]: # compute objective value and its gradient for unperturbed design - unperturbed_val, unperturbed_grad = self.adjoint_solver(self.p, - MonitorObject.DFT, - frequencies) + unperturbed_val, unperturbed_grad = self.adjoint_solver( + self.p, MonitorObject.DFT, frequencies + ) # compute objective value for perturbed design - perturbed_val = self.adjoint_solver(self.p+self.dp, - MonitorObject.DFT, - frequencies, - need_gradient=False) + perturbed_val = self.adjoint_solver( + self.p + self.dp, MonitorObject.DFT, frequencies, need_gradient=False + ) # compare directional derivative if unperturbed_grad.ndim < 2: - unperturbed_grad = np.expand_dims(unperturbed_grad,axis=1) - adj_dd = (self.dp[None,:]@unperturbed_grad).flatten() - fnd_dd = perturbed_val-unperturbed_val - print("directional derivative:, {} (adjoint solver), {} (finite difference)".format(adj_dd,fnd_dd)) - tol = 0.07 if mp.is_single_precision() else 0.006 - self.assertClose(adj_dd,fnd_dd,epsilon=tol) + unperturbed_grad = np.expand_dims(unperturbed_grad, axis=1) + adj_dd = (self.dp[None, :] @ unperturbed_grad).flatten() + fnd_dd = perturbed_val - unperturbed_val + print( + f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)" + ) + tol = 0.07 if mp.is_single_precision() else 0.006 + self.assertClose(adj_dd, fnd_dd, epsilon=tol) def test_eigenmode(self): print("*** TESTING EIGENMODE OBJECTIVE ***") # test the single frequency and multi frequency case - for frequencies in [[self.fcen], [1/1.58, self.fcen, 1/1.53]]: + for frequencies in [[self.fcen], [1 / 1.58, self.fcen, 1 / 1.53]]: # compute objective value and its gradient for unperturbed design - unperturbed_val, unperturbed_grad = self.adjoint_solver(self.p, - MonitorObject.EIGENMODE, - frequencies) + unperturbed_val, unperturbed_grad = self.adjoint_solver( + self.p, MonitorObject.EIGENMODE, frequencies + ) # compute objective for perturbed design - perturbed_val = self.adjoint_solver(self.p+self.dp, - MonitorObject.EIGENMODE, - frequencies, - need_gradient=False) + perturbed_val = self.adjoint_solver( + self.p + self.dp, + MonitorObject.EIGENMODE, + frequencies, + need_gradient=False, + ) # compare directional derivative if unperturbed_grad.ndim < 2: - unperturbed_grad = np.expand_dims(unperturbed_grad,axis=1) - adj_dd = (self.dp[None,:]@unperturbed_grad).flatten() - fnd_dd = perturbed_val-unperturbed_val - print("directional derivative:, {} (adjoint solver), {} (finite difference)".format(adj_dd,fnd_dd)) - tol = 0.04 if mp.is_single_precision() else 0.01 - self.assertClose(adj_dd,fnd_dd,epsilon=tol) + unperturbed_grad = np.expand_dims(unperturbed_grad, axis=1) + adj_dd = (self.dp[None, :] @ unperturbed_grad).flatten() + fnd_dd = perturbed_val - unperturbed_val + print( + f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)" + ) + tol = 0.04 if mp.is_single_precision() else 0.01 + self.assertClose(adj_dd, fnd_dd, epsilon=tol) def test_ldos(self): print("*** TESTING LDOS OBJECTIVE ***") # test the single frequency and multi frequency cases - for frequencies in [[self.fcen], [1/1.58, self.fcen, 1/1.53]]: + for frequencies in [[self.fcen], [1 / 1.58, self.fcen, 1 / 1.53]]: # compute objective value and its gradient for unperturbed design - unperturbed_val, unperturbed_grad = self.adjoint_solver(self.p, - MonitorObject.LDOS, - frequencies) + unperturbed_val, unperturbed_grad = self.adjoint_solver( + self.p, MonitorObject.LDOS, frequencies + ) # compute objective for perturbed design - perturbed_val = self.adjoint_solver(self.p+self.dp, - MonitorObject.LDOS, - frequencies, - need_gradient=False) + perturbed_val = self.adjoint_solver( + self.p + self.dp, MonitorObject.LDOS, frequencies, need_gradient=False + ) # compare directional derivative if unperturbed_grad.ndim < 2: - unperturbed_grad = np.expand_dims(unperturbed_grad,axis=1) - adj_dd = (self.dp[None,:]@unperturbed_grad).flatten() - fnd_dd = perturbed_val-unperturbed_val - print("directional derivative:, {} (adjoint solver), {} (finite difference)".format(adj_dd,fnd_dd)) - tol = 0.07 if mp.is_single_precision() else 0.006 - self.assertClose(adj_dd,fnd_dd,epsilon=tol) + unperturbed_grad = np.expand_dims(unperturbed_grad, axis=1) + adj_dd = (self.dp[None, :] @ unperturbed_grad).flatten() + fnd_dd = perturbed_val - unperturbed_val + print( + f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)" + ) + tol = 0.07 if mp.is_single_precision() else 0.006 + self.assertClose(adj_dd, fnd_dd, epsilon=tol) def test_gradient_backpropagation(self): print("*** TESTING GRADIENT BACKPROPAGATION ***") - for frequencies in [[self.fcen], [1/1.58, self.fcen, 1/1.53]]: - # filter/thresholding parameters - filter_radius = 0.21985 - eta = 0.49093 - beta = 4.0698 + # filter/thresholding parameters + filter_radius = 0.21985 + eta = 0.49093 + beta = 4.0698 - mapped_p = self.mapping(self.p,filter_radius,eta,beta) + for frequencies in [[self.fcen], [1 / 1.58, self.fcen, 1 / 1.53]]: + mapped_p = self.mapping(self.p, filter_radius, eta, beta) # compute objective value and its gradient for unperturbed design - unperturbed_val, unperturbed_grad = self.adjoint_solver(mapped_p, - MonitorObject.EIGENMODE, - frequencies) + unperturbed_val, unperturbed_grad = self.adjoint_solver( + mapped_p, MonitorObject.EIGENMODE, frequencies + ) # backpropagate the gradient using vector-Jacobian product if len(frequencies) > 1: unperturbed_grad_backprop = np.zeros(unperturbed_grad.shape) for i in range(len(frequencies)): - unperturbed_grad_backprop[:,i] = tensor_jacobian_product(self.mapping,0)(self.p, - filter_radius, - eta, - beta, - unperturbed_grad[:,i]) + unperturbed_grad_backprop[:, i] = tensor_jacobian_product( + self.mapping, 0 + )(self.p, filter_radius, eta, beta, unperturbed_grad[:, i]) else: - unperturbed_grad_backprop = tensor_jacobian_product(self.mapping,0)(self.p, - filter_radius, - eta, - beta, - unperturbed_grad) + unperturbed_grad_backprop = tensor_jacobian_product(self.mapping, 0)( + self.p, filter_radius, eta, beta, unperturbed_grad + ) # compute objective for perturbed design - perturbed_val = self.adjoint_solver(self.mapping(self.p+self.dp,filter_radius,eta,beta), - MonitorObject.EIGENMODE, - frequencies, - need_gradient=False) + perturbed_val = self.adjoint_solver( + self.mapping(self.p + self.dp, filter_radius, eta, beta), + MonitorObject.EIGENMODE, + frequencies, + need_gradient=False, + ) # compare directional derivative if unperturbed_grad_backprop.ndim < 2: - unperturbed_grad_backprop = np.expand_dims(unperturbed_grad_backprop,axis=1) - adj_dd = (self.dp[None,:]@unperturbed_grad_backprop).flatten() - fnd_dd = perturbed_val-unperturbed_val - print("directional derivative:, {} (adjoint solver), {} (finite difference)".format(adj_dd,fnd_dd)) - tol = 0.025 if mp.is_single_precision() else 0.01 - self.assertClose(adj_dd,fnd_dd,epsilon=tol) + unperturbed_grad_backprop = np.expand_dims( + unperturbed_grad_backprop, axis=1 + ) + adj_dd = (self.dp[None, :] @ unperturbed_grad_backprop).flatten() + fnd_dd = perturbed_val - unperturbed_val + print( + f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)" + ) + tol = 0.025 if mp.is_single_precision() else 0.01 + self.assertClose(adj_dd, fnd_dd, epsilon=tol) def test_complex_fields(self): print("*** TESTING COMPLEX FIELDS ***") - for frequencies in [[self.fcen], [1/1.58, self.fcen, 1/1.53]]: + for frequencies in [[self.fcen], [1 / 1.58, self.fcen, 1 / 1.53]]: # compute objective value and its gradient for unperturbed design - unperturbed_val, unperturbed_grad = self.adjoint_solver_complex_fields(self.p, - frequencies) + unperturbed_val, unperturbed_grad = self.adjoint_solver_complex_fields( + self.p, frequencies + ) # compute objective value perturbed design - perturbed_val = self.adjoint_solver_complex_fields(self.p+self.dp, - frequencies, - need_gradient=False) + perturbed_val = self.adjoint_solver_complex_fields( + self.p + self.dp, frequencies, need_gradient=False + ) # compare directional derivative if unperturbed_grad.ndim < 2: - unperturbed_grad = np.expand_dims(unperturbed_grad,axis=1) - adj_dd = (self.dp[None,:]@unperturbed_grad).flatten() - fnd_dd = perturbed_val-unperturbed_val - print("directional derivative:, {} (adjoint solver), {} (finite difference)".format(adj_dd,fnd_dd)) - tol = 0.06 if mp.is_single_precision() else 0.01 - self.assertClose(adj_dd,fnd_dd,epsilon=tol) + unperturbed_grad = np.expand_dims(unperturbed_grad, axis=1) + adj_dd = (self.dp[None, :] @ unperturbed_grad).flatten() + fnd_dd = perturbed_val - unperturbed_val + print( + f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)" + ) + tol = 0.06 if mp.is_single_precision() else 0.01 + self.assertClose(adj_dd, fnd_dd, epsilon=tol) def test_damping(self): print("*** TESTING CONDUCTIVITY ***") - for frequencies in [[1/1.58, self.fcen, 1/1.53]]: + for frequencies in [[1 / 1.58, self.fcen, 1 / 1.53]]: # compute objective value and its gradient for unperturbed design - unperturbed_val, unperturbed_grad = self.adjoint_solver_damping(self.p, - frequencies) + unperturbed_val, unperturbed_grad = self.adjoint_solver_damping( + self.p, frequencies + ) # compute objective value perturbed design - perturbed_val = self.adjoint_solver_damping(self.p+self.dp, - frequencies, - need_gradient=False) + perturbed_val = self.adjoint_solver_damping( + self.p + self.dp, frequencies, need_gradient=False + ) # compare directional derivative if unperturbed_grad.ndim < 2: - unperturbed_grad = np.expand_dims(unperturbed_grad,axis=1) - adj_dd = (self.dp[None,:]@unperturbed_grad).flatten() - fnd_dd = perturbed_val-unperturbed_val - print("directional derivative:, {} (adjoint solver), {} (finite difference)".format(adj_dd,fnd_dd)) - tol = 0.06 if mp.is_single_precision() else 0.04 - self.assertClose(adj_dd,fnd_dd,epsilon=tol) + unperturbed_grad = np.expand_dims(unperturbed_grad, axis=1) + adj_dd = (self.dp[None, :] @ unperturbed_grad).flatten() + fnd_dd = perturbed_val - unperturbed_val + print( + f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)" + ) + tol = 0.06 if mp.is_single_precision() else 0.04 + self.assertClose(adj_dd, fnd_dd, epsilon=tol) def test_offdiagonal(self): print("*** TESTING ANISOTROPIC ε ***") - filt = lambda x: mpa.conic_filter(x.reshape((self.Nx,self.Ny)), - 0.25, - self.design_region_size.x, - self.design_region_size.y, - self.design_region_resolution).flatten() + filt = lambda x: mpa.conic_filter( + x.reshape((self.Nx, self.Ny)), + 0.25, + self.design_region_size.x, + self.design_region_size.y, + self.design_region_resolution, + ).flatten() # test the single frequency and multi frequency case - for frequencies in [[self.fcen], [1/1.58, self.fcen, 1/1.53]]: + for frequencies in [[self.fcen], [1 / 1.58, self.fcen, 1 / 1.53]]: # compute objective value and its gradient for unperturbed design - unperturbed_val, unperturbed_grad = self.adjoint_solver(filt(self.p), - MonitorObject.EIGENMODE, - frequencies, - self.sapphire) + unperturbed_val, unperturbed_grad = self.adjoint_solver( + filt(self.p), MonitorObject.EIGENMODE, frequencies, self.sapphire + ) # backpropagate the gradient using vector-Jacobian product if len(frequencies) > 1: unperturbed_grad_backprop = np.zeros(unperturbed_grad.shape) for i in range(len(frequencies)): - unperturbed_grad_backprop[:,i] = tensor_jacobian_product(filt,0)(self.p, - unperturbed_grad[:,i]) + unperturbed_grad_backprop[:, i] = tensor_jacobian_product(filt, 0)( + self.p, unperturbed_grad[:, i] + ) else: - unperturbed_grad_backprop = tensor_jacobian_product(filt,0)(self.p,unperturbed_grad) + unperturbed_grad_backprop = tensor_jacobian_product(filt, 0)( + self.p, unperturbed_grad + ) # compute objective value perturbed design - perturbed_val = self.adjoint_solver(filt(self.p+self.dp), - MonitorObject.EIGENMODE, - frequencies, - self.sapphire, - need_gradient=False) + perturbed_val = self.adjoint_solver( + filt(self.p + self.dp), + MonitorObject.EIGENMODE, + frequencies, + self.sapphire, + need_gradient=False, + ) # compare directional derivative if unperturbed_grad_backprop.ndim < 2: - unperturbed_grad_backprop = np.expand_dims(unperturbed_grad_backprop,axis=1) - adj_dd = (self.dp[None,:]@unperturbed_grad_backprop).flatten() - fnd_dd = perturbed_val-unperturbed_val - print("directional derivative:, {} (adjoint solver), {} (finite difference)".format(adj_dd,fnd_dd)) + unperturbed_grad_backprop = np.expand_dims( + unperturbed_grad_backprop, axis=1 + ) + adj_dd = (self.dp[None, :] @ unperturbed_grad_backprop).flatten() + fnd_dd = perturbed_val - unperturbed_val + print( + f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)" + ) + tol = 0.1 if mp.is_single_precision() else 0.04 - self.assertClose(adj_dd,fnd_dd,epsilon=tol) + self.assertClose(adj_dd, fnd_dd, epsilon=tol) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_adjoint_utils.py b/python/tests/test_adjoint_utils.py index 6ed5c684f..7bec9b774 100644 --- a/python/tests/test_adjoint_utils.py +++ b/python/tests/test_adjoint_utils.py @@ -1,48 +1,54 @@ -'''test_adjoint_utils.py +"""test_adjoint_utils.py Check various components of the adjoint solver codebase, like filters, which may not need explicit gradient computation (i.e. forward and adjoint runs). -''' - +""" import meep as mp + try: import meep.adjoint as mpa except: import adjoint as mpa + +import unittest +from enum import Enum + import numpy as np +import parameterized from autograd import numpy as npa from autograd import tensor_jacobian_product -import unittest -from enum import Enum from utils import ApproxComparisonTestCase -import parameterized _TOL = 1e-6 if mp.is_single_precision() else 1e-14 ## ensure reproducible results rng = np.random.RandomState(9861548) + class TestAdjointUtils(ApproxComparisonTestCase): - @parameterized.parameterized.expand([ - ('1.0_1.0_20_conic',1.0, 1.0, 20, 0.24, mpa.conic_filter), - ('1.0_1.0_23_conic',1.0, 1.0, 23, 0.24, mpa.conic_filter), - ('0.887_1.56_conic',0.887, 1.56, 20, 0.24, mpa.conic_filter), - ('0.887_1.56_conic',0.887, 1.56, 31, 0.24, mpa.conic_filter), - ('0.887_1.56_gaussian',0.887, 1.56, 20, 0.24, mpa.gaussian_filter), - ('0.887_1.56_cylindrical',0.887, 1.56, 20, 0.24, mpa.cylindrical_filter) - ]) - def test_filter_offset(self,test_name,Lx,Ly,resolution,radius,filter_func): - '''ensure that the filters are indeed zero-phase''' - print("Testing ",test_name) - Nx, Ny = int(resolution*Lx), int(resolution*Ly) - x = np.random.rand(Nx,Ny) + @parameterized.parameterized.expand( + [ + ("1.0_1.0_20_conic", 1.0, 1.0, 20, 0.24, mpa.conic_filter), + ("1.0_1.0_23_conic", 1.0, 1.0, 23, 0.24, mpa.conic_filter), + ("0.887_1.56_conic", 0.887, 1.56, 20, 0.24, mpa.conic_filter), + ("0.887_1.56_conic", 0.887, 1.56, 31, 0.24, mpa.conic_filter), + ("0.887_1.56_gaussian", 0.887, 1.56, 20, 0.24, mpa.gaussian_filter), + ("0.887_1.56_cylindrical", 0.887, 1.56, 20, 0.24, mpa.cylindrical_filter), + ] + ) + def test_filter_offset(self, test_name, Lx, Ly, resolution, radius, filter_func): + """ensure that the filters are indeed zero-phase""" + print("Testing ", test_name) + Nx, Ny = int(resolution * Lx), int(resolution * Ly) + x = np.random.rand(Nx, Ny) x = x + np.fliplr(x) x = x + np.flipud(x) y = filter_func(x, radius, Lx, Ly, resolution) - self.assertClose(y,np.fliplr(y),epsilon=_TOL) - self.assertClose(y,np.flipud(y),epsilon=_TOL) + self.assertClose(y, np.fliplr(y), epsilon=_TOL) + self.assertClose(y, np.flipud(y), epsilon=_TOL) + -if __name__ == '__main__': - unittest.main() \ No newline at end of file +if __name__ == "__main__": + unittest.main() diff --git a/python/tests/test_antenna_radiation.py b/python/tests/test_antenna_radiation.py index 35a8958d8..501f2869a 100644 --- a/python/tests/test_antenna_radiation.py +++ b/python/tests/test_antenna_radiation.py @@ -1,102 +1,106 @@ -import meep as mp import math -import numpy as np import unittest + +import numpy as np from utils import ApproxComparisonTestCase -class TestAntennaRadiation(ApproxComparisonTestCase): +import meep as mp + +class TestAntennaRadiation(ApproxComparisonTestCase): @classmethod def setUp(cls): cls.resolution = 100 # pixels/μm - cls.h = 1.125 # height of point source above ground plane - cls.n = 1.2 # refractive index of surrounding medium + cls.h = 1.125 # height of point source above ground plane + cls.n = 1.2 # refractive index of surrounding medium cls.src_cmpt = mp.Ez cls.wvl = 0.65 - cls.npts = 50 # number of points in [0,pi/2) range of angles - cls.angles = 0.5*math.pi/cls.npts*np.arange(cls.npts) - cls.r = 1000*cls.wvl # radius of far-field hemicircle + cls.npts = 50 # number of points in [0,pi/2) range of angles + cls.angles = 0.5 * math.pi / cls.npts * np.arange(cls.npts) + cls.r = 1000 * cls.wvl # radius of far-field hemicircle - - def radial_flux(self,sim,nearfield_box,r): - E = np.zeros((self.npts,3),dtype=np.complex128) - H = np.zeros((self.npts,3),dtype=np.complex128) + def radial_flux(self, sim, nearfield_box, r): + E = np.zeros((self.npts, 3), dtype=np.complex128) + H = np.zeros((self.npts, 3), dtype=np.complex128) for n in range(self.npts): - ff = sim.get_farfield(nearfield_box, - mp.Vector3(r*math.sin(self.angles[n]), - r*math.cos(self.angles[n]))) - E[n,:] = [np.conj(ff[j]) for j in range(3)] - H[n,:] = [ff[j+3] for j in range(3)] - - Px = np.real(E[:,1]*H[:,2]-E[:,2]*H[:,1]) # Ey*Hz-Ez*Hy - Py = np.real(E[:,2]*H[:,0]-E[:,0]*H[:,2]) # Ez*Hx-Ex*Hz - Pr = np.sqrt(np.square(Px)+np.square(Py)) - - return Pr + ff = sim.get_farfield( + nearfield_box, + mp.Vector3(r * math.sin(self.angles[n]), r * math.cos(self.angles[n])), + ) + E[n, :] = [np.conj(ff[j]) for j in range(3)] + H[n, :] = [ff[j + 3] for j in range(3)] + Px = np.real(E[:, 1] * H[:, 2] - E[:, 2] * H[:, 1]) # Ey*Hz-Ez*Hy + Py = np.real(E[:, 2] * H[:, 0] - E[:, 0] * H[:, 2]) # Ez*Hx-Ex*Hz + return np.sqrt(np.square(Px) + np.square(Py)) def free_space_radiation(self): sxy = 4 dpml = 1 - cell_size = mp.Vector3(sxy+2*dpml,sxy+2*dpml) + cell_size = mp.Vector3(sxy + 2 * dpml, sxy + 2 * dpml) pml_layers = [mp.PML(dpml)] - fcen = 1/self.wvl + fcen = 1 / self.wvl - sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen), - center=mp.Vector3(), - component=self.src_cmpt)] + sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=0.2 * fcen), + center=mp.Vector3(), + component=self.src_cmpt, + ) + ] if self.src_cmpt == mp.Hz: - symmetries = [mp.Mirror(mp.X,phase=-1), - mp.Mirror(mp.Y,phase=-1)] + symmetries = [mp.Mirror(mp.X, phase=-1), mp.Mirror(mp.Y, phase=-1)] elif self.src_cmpt == mp.Ez: - symmetries = [mp.Mirror(mp.X,phase=+1), - mp.Mirror(mp.Y,phase=+1)] + symmetries = [mp.Mirror(mp.X, phase=+1), mp.Mirror(mp.Y, phase=+1)] else: symmetries = [] - sim = mp.Simulation(cell_size=cell_size, - resolution=self.resolution, - sources=sources, - symmetries=symmetries, - boundary_layers=pml_layers, - default_material=mp.Medium(index=self.n)) - - nearfield_box = sim.add_near2far(fcen, - 0, - 1, - mp.Near2FarRegion(center=mp.Vector3(0,+0.5*sxy), - size=mp.Vector3(sxy,0)), - mp.Near2FarRegion(center=mp.Vector3(0,-0.5*sxy), - size=mp.Vector3(sxy,0), - weight=-1), - mp.Near2FarRegion(center=mp.Vector3(+0.5*sxy,0), - size=mp.Vector3(0,sxy)), - mp.Near2FarRegion(center=mp.Vector3(-0.5*sxy,0), - size=mp.Vector3(0,sxy), - weight=-1)) + sim = mp.Simulation( + cell_size=cell_size, + resolution=self.resolution, + sources=sources, + symmetries=symmetries, + boundary_layers=pml_layers, + default_material=mp.Medium(index=self.n), + ) + + nearfield_box = sim.add_near2far( + fcen, + 0, + 1, + mp.Near2FarRegion( + center=mp.Vector3(0, +0.5 * sxy), size=mp.Vector3(sxy, 0) + ), + mp.Near2FarRegion( + center=mp.Vector3(0, -0.5 * sxy), size=mp.Vector3(sxy, 0), weight=-1 + ), + mp.Near2FarRegion( + center=mp.Vector3(+0.5 * sxy, 0), size=mp.Vector3(0, sxy) + ), + mp.Near2FarRegion( + center=mp.Vector3(-0.5 * sxy, 0), size=mp.Vector3(0, sxy), weight=-1 + ), + ) sim.run(until_after_sources=mp.stop_when_dft_decayed()) - Pr = self.radial_flux(sim,nearfield_box,self.r) - - return Pr - + return self.radial_flux(sim, nearfield_box, self.r) def pec_ground_plane_radiation(self): - L = 8.0 # length of non-PML region + L = 8.0 # length of non-PML region dpml = 1.0 # thickness of PML - sxy = dpml+L+dpml - cell_size = mp.Vector3(sxy,sxy,0) + sxy = dpml + L + dpml + cell_size = mp.Vector3(sxy, sxy, 0) boundary_layers = [mp.PML(dpml)] - fcen = 1/self.wvl + fcen = 1 / self.wvl # The near-to-far field transformation feature only supports # homogeneous media which means it cannot explicitly take into @@ -107,46 +111,57 @@ def pec_ground_plane_radiation(self): # equivalent to a PEC boundary condition on one side. # Note: This setup means that the radiation pattern can only # be measured in the top half above the dipole. - sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen), - component=self.src_cmpt, - center=mp.Vector3(0,+self.h)), - mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen), - component=self.src_cmpt, - center=mp.Vector3(0,-self.h), - amplitude=-1 if self.src_cmpt==mp.Ez else +1)] - - symmetries = [mp.Mirror(direction=mp.X, - phase=+1 if self.src_cmpt==mp.Ez else -1), - mp.Mirror(direction=mp.Y, - phase=-1 if self.src_cmpt==mp.Ez else +1)] - - sim = mp.Simulation(resolution=self.resolution, - cell_size=cell_size, - boundary_layers=boundary_layers, - sources=sources, - symmetries=symmetries, - default_material=mp.Medium(index=self.n)) - - nearfield_box = sim.add_near2far(fcen, - 0, - 1, - mp.Near2FarRegion(center=mp.Vector3(0,2*self.h), - size=mp.Vector3(2*self.h,0)), - mp.Near2FarRegion(center=mp.Vector3(0,-2*self.h), - size=mp.Vector3(2*self.h,0), - weight=-1), - mp.Near2FarRegion(center=mp.Vector3(self.h,0), - size=mp.Vector3(0,4*self.h)), - mp.Near2FarRegion(center=mp.Vector3(-self.h,0), - size=mp.Vector3(0,4*self.h), - weight=-1)) + sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=0.2 * fcen), + component=self.src_cmpt, + center=mp.Vector3(0, +self.h), + ), + mp.Source( + src=mp.GaussianSource(fcen, fwidth=0.2 * fcen), + component=self.src_cmpt, + center=mp.Vector3(0, -self.h), + amplitude=-1 if self.src_cmpt == mp.Ez else +1, + ), + ] + + symmetries = [ + mp.Mirror(direction=mp.X, phase=+1 if self.src_cmpt == mp.Ez else -1), + mp.Mirror(direction=mp.Y, phase=-1 if self.src_cmpt == mp.Ez else +1), + ] + + sim = mp.Simulation( + resolution=self.resolution, + cell_size=cell_size, + boundary_layers=boundary_layers, + sources=sources, + symmetries=symmetries, + default_material=mp.Medium(index=self.n), + ) + + nearfield_box = sim.add_near2far( + fcen, + 0, + 1, + mp.Near2FarRegion( + center=mp.Vector3(0, 2 * self.h), size=mp.Vector3(2 * self.h, 0) + ), + mp.Near2FarRegion( + center=mp.Vector3(0, -2 * self.h), + size=mp.Vector3(2 * self.h, 0), + weight=-1, + ), + mp.Near2FarRegion( + center=mp.Vector3(self.h, 0), size=mp.Vector3(0, 4 * self.h) + ), + mp.Near2FarRegion( + center=mp.Vector3(-self.h, 0), size=mp.Vector3(0, 4 * self.h), weight=-1 + ), + ) sim.run(until_after_sources=mp.stop_when_dft_decayed()) - Pr = self.radial_flux(sim,nearfield_box,self.r) - - return Pr - + return self.radial_flux(sim, nearfield_box, self.r) def test_pec_ground_plane(self): """Unit test for near-to-far field transformation and symmetries. @@ -163,18 +178,19 @@ def test_pec_ground_plane(self): Pr_fsp = self.free_space_radiation() Pr_pec = self.pec_ground_plane_radiation() - k = 2*np.pi/(self.wvl/self.n) # wavevector in medium - Pr_theory = np.zeros(self.npts,) - for i,ang in enumerate(self.angles): - Pr_theory[i] = Pr_fsp[i] * 2*np.sin(k*self.h*np.cos(ang)) + k = 2 * np.pi / (self.wvl / self.n) # wavevector in medium + Pr_theory = np.zeros( + self.npts, + ) + for i, ang in enumerate(self.angles): + Pr_theory[i] = Pr_fsp[i] * 2 * np.sin(k * self.h * np.cos(ang)) - Pr_pec_norm = Pr_pec/np.max(Pr_pec) - Pr_theory_norm = (Pr_theory/max(Pr_theory))**2 + Pr_pec_norm = Pr_pec / np.max(Pr_pec) + Pr_theory_norm = (Pr_theory / max(Pr_theory)) ** 2 tol = 0.02 self.assertClose(Pr_pec_norm, Pr_theory_norm, epsilon=tol) - def test_poynting_theorem(self): """Unit test for near-to-far field transformation in 2d. @@ -189,87 +205,102 @@ def test_poynting_theorem(self): resolution = 50 sxy = 4 dpml = 1 - cell = mp.Vector3(sxy+2*dpml,sxy+2*dpml) + cell = mp.Vector3(sxy + 2 * dpml, sxy + 2 * dpml) pml_layers = mp.PML(dpml) fcen = 1.0 df = 0.4 - sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=df), - center=mp.Vector3(), - component=mp.Ez)] - - symmetries = [mp.Mirror(mp.X), - mp.Mirror(mp.Y)] - - sim = mp.Simulation(cell_size=cell, - resolution=resolution, - sources=sources, - symmetries=symmetries, - boundary_layers=[pml_layers]) - - nearfield_box = sim.add_near2far(fcen, - 0, - 1, - mp.Near2FarRegion(mp.Vector3(y=0.5*sxy), - size=mp.Vector3(sxy)), - mp.Near2FarRegion(mp.Vector3(y=-0.5*sxy), - size=mp.Vector3(sxy), - weight=-1), - mp.Near2FarRegion(mp.Vector3(0.5*sxy), - size=mp.Vector3(y=sxy)), - mp.Near2FarRegion(mp.Vector3(-0.5*sxy), - size=mp.Vector3(y=sxy), - weight=-1)) - - flux_box = sim.add_flux(fcen, - 0, - 1, - mp.FluxRegion(mp.Vector3(y=0.5*sxy), - size=mp.Vector3(sxy)), - mp.FluxRegion(mp.Vector3(y=-0.5*sxy), - size=mp.Vector3(sxy), - weight=-1), - mp.FluxRegion(mp.Vector3(0.5*sxy), - size=mp.Vector3(y=sxy)), - mp.FluxRegion(mp.Vector3(-0.5*sxy), - size=mp.Vector3(y=sxy), - weight=-1)) - - sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mp.Vector3(), 1e-8)) + sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=df), + center=mp.Vector3(), + component=mp.Ez, + ) + ] + + symmetries = [mp.Mirror(mp.X), mp.Mirror(mp.Y)] + + sim = mp.Simulation( + cell_size=cell, + resolution=resolution, + sources=sources, + symmetries=symmetries, + boundary_layers=[pml_layers], + ) + + nearfield_box = sim.add_near2far( + fcen, + 0, + 1, + mp.Near2FarRegion(mp.Vector3(y=0.5 * sxy), size=mp.Vector3(sxy)), + mp.Near2FarRegion( + mp.Vector3(y=-0.5 * sxy), size=mp.Vector3(sxy), weight=-1 + ), + mp.Near2FarRegion(mp.Vector3(0.5 * sxy), size=mp.Vector3(y=sxy)), + mp.Near2FarRegion( + mp.Vector3(-0.5 * sxy), size=mp.Vector3(y=sxy), weight=-1 + ), + ) + + flux_box = sim.add_flux( + fcen, + 0, + 1, + mp.FluxRegion(mp.Vector3(y=0.5 * sxy), size=mp.Vector3(sxy)), + mp.FluxRegion(mp.Vector3(y=-0.5 * sxy), size=mp.Vector3(sxy), weight=-1), + mp.FluxRegion(mp.Vector3(0.5 * sxy), size=mp.Vector3(y=sxy)), + mp.FluxRegion(mp.Vector3(-0.5 * sxy), size=mp.Vector3(y=sxy), weight=-1), + ) + + sim.run( + until_after_sources=mp.stop_when_fields_decayed( + 50, mp.Ez, mp.Vector3(), 1e-8 + ) + ) near_flux = mp.get_fluxes(flux_box)[0] - r = 1000/fcen # radius of far field circle - Pr = self.radial_flux(sim,nearfield_box,r) - far_flux_circle = 4*np.sum(Pr)*0.5*np.pi*r/len(Pr) - - rr = 20/fcen # length of far-field square box - res_far = 20 # resolution of far-field square box - far_flux_square = (nearfield_box.flux(mp.Y, - mp.Volume(center=mp.Vector3(y=0.5*rr), - size=mp.Vector3(rr)), - res_far)[0] - - nearfield_box.flux(mp.Y, - mp.Volume(center=mp.Vector3(y=-0.5*rr), - size=mp.Vector3(rr)), - res_far)[0] + - nearfield_box.flux(mp.X, - mp.Volume(center=mp.Vector3(0.5*rr), - size=mp.Vector3(y=rr)), - res_far)[0] - - nearfield_box.flux(mp.X, - mp.Volume(center=mp.Vector3(-0.5*rr), - size=mp.Vector3(y=rr)), - res_far)[0]) - - print("flux:, {:.6f}, {:.6f}, {:.6f}".format(near_flux,far_flux_circle,far_flux_square)) + r = 1000 / fcen # radius of far field circle + Pr = self.radial_flux(sim, nearfield_box, r) + far_flux_circle = 4 * np.sum(Pr) * 0.5 * np.pi * r / len(Pr) + + rr = 20 / fcen # length of far-field square box + res_far = 20 # resolution of far-field square box + far_flux_square = ( + nearfield_box.flux( + mp.Y, + mp.Volume(center=mp.Vector3(y=0.5 * rr), size=mp.Vector3(rr)), + res_far, + )[0] + - nearfield_box.flux( + mp.Y, + mp.Volume(center=mp.Vector3(y=-0.5 * rr), size=mp.Vector3(rr)), + res_far, + )[0] + + nearfield_box.flux( + mp.X, + mp.Volume(center=mp.Vector3(0.5 * rr), size=mp.Vector3(y=rr)), + res_far, + )[0] + - nearfield_box.flux( + mp.X, + mp.Volume(center=mp.Vector3(-0.5 * rr), size=mp.Vector3(y=rr)), + res_far, + )[0] + ) + + print( + "flux:, {:.6f}, {:.6f}, {:.6f}".format( + near_flux, far_flux_circle, far_flux_square + ) + ) self.assertAlmostEqual(near_flux, far_flux_circle, places=2) self.assertAlmostEqual(far_flux_circle, far_flux_square, places=2) self.assertAlmostEqual(far_flux_square, near_flux, places=2) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_array_metadata.py b/python/tests/test_array_metadata.py index 05f1d8e02..2bd98e5ab 100644 --- a/python/tests/test_array_metadata.py +++ b/python/tests/test_array_metadata.py @@ -1,10 +1,12 @@ -import meep as mp import unittest + import numpy as np from utils import ApproxComparisonTestCase -class TestArrayMetadata(ApproxComparisonTestCase): +import meep as mp + +class TestArrayMetadata(ApproxComparisonTestCase): def test_array_metadata(self): resolution = 25 @@ -14,75 +16,101 @@ def test_array_metadata(self): pad = 4 dpml = 2 - sxy = 2*(r+w+pad+dpml) - cell_size = mp.Vector3(sxy,sxy) + sxy = 2 * (r + w + pad + dpml) + cell_size = mp.Vector3(sxy, sxy) - nonpml_vol = mp.Volume(mp.Vector3(), size=mp.Vector3(sxy-2*dpml,sxy-2*dpml)) + nonpml_vol = mp.Volume( + mp.Vector3(), size=mp.Vector3(sxy - 2 * dpml, sxy - 2 * dpml) + ) - geometry = [mp.Cylinder(radius=r+w, material=mp.Medium(index=n)), - mp.Cylinder(radius=r)] + geometry = [ + mp.Cylinder(radius=r + w, material=mp.Medium(index=n)), + mp.Cylinder(radius=r), + ] fcen = 0.118 df = 0.08 - symmetries = [mp.Mirror(mp.X,phase=-1), - mp.Mirror(mp.Y,phase=+1)] + symmetries = [mp.Mirror(mp.X, phase=-1), mp.Mirror(mp.Y, phase=+1)] pml_layers = [mp.PML(dpml)] # CW source - src = [mp.Source(mp.ContinuousSource(fcen,fwidth=df), mp.Ez, mp.Vector3(r+0.1)), - mp.Source(mp.ContinuousSource(fcen,fwidth=df), mp.Ez, mp.Vector3(-(r+0.1)), amplitude=-1)] - - sim = mp.Simulation(cell_size=cell_size, - geometry=geometry, - sources=src, - resolution=resolution, - force_complex_fields=True, - symmetries=symmetries, - boundary_layers=pml_layers) + src = [ + mp.Source(mp.ContinuousSource(fcen, fwidth=df), mp.Ez, mp.Vector3(r + 0.1)), + mp.Source( + mp.ContinuousSource(fcen, fwidth=df), + mp.Ez, + mp.Vector3(-(r + 0.1)), + amplitude=-1, + ), + ] + + sim = mp.Simulation( + cell_size=cell_size, + geometry=geometry, + sources=src, + resolution=resolution, + force_complex_fields=True, + symmetries=symmetries, + boundary_layers=pml_layers, + ) sim.init_sim() sim.solve_cw(1e-5 if mp.is_single_precision() else 1e-6, 1000, 10) def electric_energy(r, ez, eps): - return np.real(eps * np.conj(ez)*ez) + return np.real(eps * np.conj(ez) * ez) def vec_func(r): - return r.x**2 + 2*r.y**2 - - electric_energy_total = sim.integrate_field_function([mp.Ez,mp.Dielectric],electric_energy,nonpml_vol) - electric_energy_max = sim.max_abs_field_function([mp.Ez,mp.Dielectric],electric_energy,nonpml_vol) - vec_func_total = sim.integrate_field_function([],vec_func,nonpml_vol) + return r.x**2 + 2 * r.y**2 + + electric_energy_total = sim.integrate_field_function( + [mp.Ez, mp.Dielectric], electric_energy, nonpml_vol + ) + electric_energy_max = sim.max_abs_field_function( + [mp.Ez, mp.Dielectric], electric_energy, nonpml_vol + ) + vec_func_total = sim.integrate_field_function([], vec_func, nonpml_vol) cw_modal_volume = (electric_energy_total / electric_energy_max) * vec_func_total sim.reset_meep() # pulsed source - src = [mp.Source(mp.GaussianSource(fcen,fwidth=df), mp.Ez, mp.Vector3(r+0.1)), - mp.Source(mp.GaussianSource(fcen,fwidth=df), mp.Ez, mp.Vector3(-(r+0.1)), amplitude=-1)] - - sim = mp.Simulation(cell_size=cell_size, - geometry=geometry, - k_point=mp.Vector3(), - sources=src, - resolution=resolution, - symmetries=symmetries, - boundary_layers=pml_layers) + src = [ + mp.Source(mp.GaussianSource(fcen, fwidth=df), mp.Ez, mp.Vector3(r + 0.1)), + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + mp.Ez, + mp.Vector3(-(r + 0.1)), + amplitude=-1, + ), + ] + + sim = mp.Simulation( + cell_size=cell_size, + geometry=geometry, + k_point=mp.Vector3(), + sources=src, + resolution=resolution, + symmetries=symmetries, + boundary_layers=pml_layers, + ) dft_obj = sim.add_dft_fields([mp.Ez], fcen, 0, 1, where=nonpml_vol) sim.run(until_after_sources=100) Ez = sim.get_dft_array(dft_obj, mp.Ez, 0) - (X,Y,Z,W) = sim.get_array_metadata(dft_cell=dft_obj) + (X, Y, Z, W) = sim.get_array_metadata(dft_cell=dft_obj) Eps = sim.get_array(vol=nonpml_vol, component=mp.Dielectric) - EpsE2 = np.real(Eps*np.conj(Ez)*Ez) + EpsE2 = np.real(Eps * np.conj(Ez) * Ez) xm, ym = np.meshgrid(X, Y) - vec_func_sum = np.sum(W*(xm**2 + 2*ym**2)) - pulse_modal_volume = np.sum(W*EpsE2)/np.max(EpsE2) * vec_func_sum + vec_func_sum = np.sum(W * (xm**2 + 2 * ym**2)) + pulse_modal_volume = np.sum(W * EpsE2) / np.max(EpsE2) * vec_func_sum tol = 5e-2 if mp.is_single_precision() else 1e-2 - self.assertClose(cw_modal_volume/pulse_modal_volume, 1.0, epsilon=tol) + self.assertClose(cw_modal_volume / pulse_modal_volume, 1.0, epsilon=tol) + -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_bend_flux.py b/python/tests/test_bend_flux.py index 5f3eb3371..83aa10688 100644 --- a/python/tests/test_bend_flux.py +++ b/python/tests/test_bend_flux.py @@ -1,12 +1,13 @@ import os import unittest + import numpy as np -import meep as mp from utils import ApproxComparisonTestCase +import meep as mp + class TestBendFlux(ApproxComparisonTestCase): - def init(self, no_bend=False, gdsii=False): sx = 16 sy = 32 @@ -16,61 +17,91 @@ def init(self, no_bend=False, gdsii=False): wvg_ycen = -0.5 * (sy - w - (2 * pad)) wvg_xcen = 0.5 * (sx - w - (2 * pad)) height = mp.inf - data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'data')) - gdsii_file = os.path.join(data_dir, 'bend-flux.gds') + data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "data")) + gdsii_file = os.path.join(data_dir, "bend-flux.gds") if no_bend: if gdsii: - geometry = mp.get_GDSII_prisms(mp.Medium(epsilon=12), gdsii_file, 1, 0, height) + geometry = mp.get_GDSII_prisms( + mp.Medium(epsilon=12), gdsii_file, 1, 0, height + ) else: - no_bend_vertices = [mp.Vector3(-0.5 * sx - 5, wvg_ycen - 0.5 * w), - mp.Vector3(+0.5 * sx + 5, wvg_ycen - 0.5 * w), - mp.Vector3(+0.5 * sx + 5, wvg_ycen + 0.5 * w), - mp.Vector3(-0.5 * sx - 5, wvg_ycen + 0.5 * w)] - - geometry = [mp.Prism(no_bend_vertices, height, material=mp.Medium(epsilon=12))] + no_bend_vertices = [ + mp.Vector3(-0.5 * sx - 5, wvg_ycen - 0.5 * w), + mp.Vector3(+0.5 * sx + 5, wvg_ycen - 0.5 * w), + mp.Vector3(+0.5 * sx + 5, wvg_ycen + 0.5 * w), + mp.Vector3(-0.5 * sx - 5, wvg_ycen + 0.5 * w), + ] + + geometry = [ + mp.Prism(no_bend_vertices, height, material=mp.Medium(epsilon=12)) + ] + elif gdsii: + geometry = mp.get_GDSII_prisms( + mp.Medium(epsilon=12), gdsii_file, 2, 0, height + ) else: - if gdsii: - geometry = mp.get_GDSII_prisms(mp.Medium(epsilon=12), gdsii_file, 2, 0, height) - else: - bend_vertices = [mp.Vector3(-0.5 * sx, wvg_ycen - 0.5 * w), - mp.Vector3(wvg_xcen + 0.5 * w, wvg_ycen - 0.5 * w), - mp.Vector3(wvg_xcen + 0.5 * w, 0.5 * sy), - mp.Vector3(wvg_xcen - 0.5 * w, 0.5 * sy), - mp.Vector3(wvg_xcen - 0.5 * w, wvg_ycen + 0.5 * w), - mp.Vector3(-0.5 * sx, wvg_ycen + 0.5 * w)] + bend_vertices = [ + mp.Vector3(-0.5 * sx, wvg_ycen - 0.5 * w), + mp.Vector3(wvg_xcen + 0.5 * w, wvg_ycen - 0.5 * w), + mp.Vector3(wvg_xcen + 0.5 * w, 0.5 * sy), + mp.Vector3(wvg_xcen - 0.5 * w, 0.5 * sy), + mp.Vector3(wvg_xcen - 0.5 * w, wvg_ycen + 0.5 * w), + mp.Vector3(-0.5 * sx, wvg_ycen + 0.5 * w), + ] - geometry = [mp.Prism(bend_vertices, height, material=mp.Medium(epsilon=12))] + geometry = [mp.Prism(bend_vertices, height, material=mp.Medium(epsilon=12))] fcen = 0.15 df = 0.1 - sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, - center=mp.Vector3(1 + (-0.5 * sx), wvg_ycen), size=mp.Vector3(0, w))] + sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=mp.Ez, + center=mp.Vector3(1 + (-0.5 * sx), wvg_ycen), + size=mp.Vector3(0, w), + ) + ] pml_layers = [mp.PML(1.0)] resolution = 10 nfreq = 100 - self.sim = mp.Simulation(cell_size=cell, - boundary_layers=pml_layers, - geometry=geometry, - sources=sources, - resolution=resolution) + self.sim = mp.Simulation( + cell_size=cell, + boundary_layers=pml_layers, + geometry=geometry, + sources=sources, + resolution=resolution, + ) if no_bend: - fr = mp.FluxRegion(center=mp.Vector3((sx / 2) - 1.5, wvg_ycen), size=mp.Vector3(0, w * 2)) + fr = mp.FluxRegion( + center=mp.Vector3((sx / 2) - 1.5, wvg_ycen), size=mp.Vector3(0, w * 2) + ) else: - fr = mp.FluxRegion(center=mp.Vector3(wvg_xcen, (sy / 2) - 1.5), size=mp.Vector3(w * 2, 0)) + fr = mp.FluxRegion( + center=mp.Vector3(wvg_xcen, (sy / 2) - 1.5), size=mp.Vector3(w * 2, 0) + ) self.trans = self.sim.add_flux(fcen, df, nfreq, fr, decimation_factor=1) - self.trans_decimated = self.sim.add_flux(fcen, df, nfreq, fr, decimation_factor=5) - - refl_fr = mp.FluxRegion(center=mp.Vector3((-0.5 * sx) + 1.5, wvg_ycen), - size=mp.Vector3(0, w * 2)) - self.refl = self.sim.add_flux(np.linspace(fcen-0.5*df,fcen+0.5*df,nfreq), refl_fr, - decimation_factor=1) - self.refl_decimated = self.sim.add_flux(np.linspace(fcen-0.5*df,fcen+0.5*df,nfreq), refl_fr, - decimation_factor=10) + self.trans_decimated = self.sim.add_flux( + fcen, df, nfreq, fr, decimation_factor=5 + ) + + refl_fr = mp.FluxRegion( + center=mp.Vector3((-0.5 * sx) + 1.5, wvg_ycen), size=mp.Vector3(0, w * 2) + ) + self.refl = self.sim.add_flux( + np.linspace(fcen - 0.5 * df, fcen + 0.5 * df, nfreq), + refl_fr, + decimation_factor=1, + ) + self.refl_decimated = self.sim.add_flux( + np.linspace(fcen - 0.5 * df, fcen + 0.5 * df, nfreq), + refl_fr, + decimation_factor=10, + ) if no_bend: self.pt = mp.Vector3((sx / 2) - 1.5, wvg_ycen) @@ -108,13 +139,21 @@ def run_bend_flux(self, from_gdsii_file): (0.119191919192, 0.0254987474079, 0.0252348211592), ] - res = list(zip(mp.get_flux_freqs(self.trans), - mp.get_fluxes(self.trans), - mp.get_fluxes(self.refl))) - - res_decimated = list(zip(mp.get_flux_freqs(self.trans_decimated), - mp.get_fluxes(self.trans_decimated), - mp.get_fluxes(self.refl_decimated))) + res = list( + zip( + mp.get_flux_freqs(self.trans), + mp.get_fluxes(self.trans), + mp.get_fluxes(self.refl), + ) + ) + + res_decimated = list( + zip( + mp.get_flux_freqs(self.trans_decimated), + mp.get_fluxes(self.trans_decimated), + mp.get_fluxes(self.refl_decimated), + ) + ) tol = 1e-6 if mp.is_single_precision() else 1e-8 self.assertClose(np.array(expected), np.array(res[:20]), epsilon=tol) @@ -151,13 +190,21 @@ def run_bend_flux(self, from_gdsii_file): (0.11919191919191931, 0.008646855439680507, -0.005614491919262783), ] - res = list(zip(mp.get_flux_freqs(self.trans), - mp.get_fluxes(self.trans), - mp.get_fluxes(self.refl))) - - res_decimated = list(zip(mp.get_flux_freqs(self.trans_decimated), - mp.get_fluxes(self.trans_decimated), - mp.get_fluxes(self.refl_decimated))) + res = list( + zip( + mp.get_flux_freqs(self.trans), + mp.get_fluxes(self.trans), + mp.get_fluxes(self.refl), + ) + ) + + res_decimated = list( + zip( + mp.get_flux_freqs(self.trans_decimated), + mp.get_fluxes(self.trans_decimated), + mp.get_fluxes(self.refl_decimated), + ) + ) tol = 1e-3 self.assertClose(np.array(expected), np.array(res[:20]), epsilon=tol) @@ -169,5 +216,5 @@ def test_bend_flux(self): self.run_bend_flux(True) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_binary_grating.py b/python/tests/test_binary_grating.py index 51b5a0e69..3f2961dad 100644 --- a/python/tests/test_binary_grating.py +++ b/python/tests/test_binary_grating.py @@ -1,290 +1,338 @@ -# -*- coding: utf-8 -*- - +import cmath +import math import unittest + +import numpy as np import parameterized + import meep as mp -import math -import cmath -import numpy as np class TestEigCoeffs(unittest.TestCase): - @classmethod - def setUpClass(cls): - cls.resolution = 30 # pixels/μm - - cls.dpml = 1.0 # PML thickness - cls.dsub = 1.0 # substrate thickness - cls.dpad = 1.0 # padding thickness between grating and PML - cls.gp = 6.0 # grating period - cls.gh = 0.5 # grating height - cls.gdc = 0.5 # grating duty cycle - - cls.sx = cls.dpml+cls.dsub+cls.gh+cls.dpad+cls.dpml - cls.sy = cls.gp - - cls.cell_size = mp.Vector3(cls.sx,cls.sy,0) - - # replace anisotropic PML with isotropic Absorber to - # attenuate parallel-directed fields of oblique source - cls.abs_layers = [mp.Absorber(thickness=cls.dpml,direction=mp.X)] - - wvl = 0.5 # center wavelength - cls.fcen = 1/wvl # center frequency - cls.df = 0.05*cls.fcen # frequency width - - cls.ng = 1.5 - cls.glass = mp.Medium(index=cls.ng) - - cls.geometry = [mp.Block(material=cls.glass, - size=mp.Vector3(cls.dpml+cls.dsub,mp.inf,mp.inf), - center=mp.Vector3(-0.5*cls.sx+0.5*(cls.dpml+cls.dsub),0,0)), - mp.Block(material=cls.glass, - size=mp.Vector3(cls.gh,cls.gdc*cls.gp,mp.inf), - center=mp.Vector3(-0.5*cls.sx+cls.dpml+cls.dsub+0.5*cls.gh,0,0))] - - - @parameterized.parameterized.expand([(0,), (10.7,)]) - def test_binary_grating_oblique(self, theta): - # rotation angle of incident planewave - # counterclockwise (CCW) about Z axis, 0 degrees along +X axis - theta_in = math.radians(theta) - - # k (in source medium) with correct length (plane of incidence: XY) - k = mp.Vector3(self.fcen*self.ng).rotate(mp.Vector3(0,0,1), theta_in) - - symmetries = [] - eig_parity = mp.ODD_Z - if theta_in == 0: - symmetries = [mp.Mirror(mp.Y)] - eig_parity += mp.EVEN_Y - - def pw_amp(k,x0): - def _pw_amp(x): - return cmath.exp(1j*2*math.pi*k.dot(x+x0)) - return _pw_amp - - src_pt = mp.Vector3(-0.5*self.sx+self.dpml,0,0) - sources = [mp.Source(mp.GaussianSource(self.fcen,fwidth=self.df), - component=mp.Ez, # S polarization - center=src_pt, - size=mp.Vector3(0,self.sy,0), - amp_func=pw_amp(k,src_pt))] - - sim = mp.Simulation(resolution=self.resolution, - cell_size=self.cell_size, - boundary_layers=self.abs_layers, - k_point=k, - default_material=self.glass, - sources=sources, - symmetries=symmetries) - - refl_pt = mp.Vector3(-0.5*self.sx+self.dpml+0.5*self.dsub,0,0) - refl_flux = sim.add_flux(self.fcen, - 0, - 1, - mp.FluxRegion(center=refl_pt, - size=mp.Vector3(0,self.sy,0))) - - sim.run(until_after_sources=mp.stop_when_dft_decayed()) - - input_flux = mp.get_fluxes(refl_flux) - input_flux_data = sim.get_flux_data(refl_flux) - - sim.reset_meep() - - sim = mp.Simulation(resolution=self.resolution, - cell_size=self.cell_size, - boundary_layers=self.abs_layers, - geometry=self.geometry, - k_point=k, - sources=sources, - symmetries=symmetries) - - refl_flux = sim.add_flux(self.fcen, - 0, - 1, - mp.FluxRegion(center=refl_pt, - size=mp.Vector3(0,self.sy,0))) - - sim.load_minus_flux_data(refl_flux,input_flux_data) - - tran_pt = mp.Vector3(0.5*self.sx-self.dpml-0.5*self.dpad,0,0) - tran_flux = sim.add_flux(self.fcen, - 0, - 1, - mp.FluxRegion(center=tran_pt, - size=mp.Vector3(0,self.sy,0))) - - sim.run(until_after_sources=mp.stop_when_dft_decayed()) - - # number of reflected orders - nm_r = np.floor((self.fcen*self.ng-k.y)*self.gp)-np.ceil((-self.fcen*self.ng-k.y)*self.gp) - if theta_in == 0: - nm_r = nm_r/2 # since eig_parity removes degeneracy in y-direction - nm_r = int(nm_r) - - res = sim.get_eigenmode_coefficients(refl_flux, - range(1,nm_r+1), - eig_parity=eig_parity) - r_coeffs = res.alpha - - Rsum = 0 - for nm in range(nm_r): - Rsum += abs(r_coeffs[nm,0,1])**2/input_flux[0] - - # number of transmitted orders - nm_t = np.floor((self.fcen-k.y)*self.gp)-np.ceil((-self.fcen-k.y)*self.gp) - if theta_in == 0: - nm_t = nm_t/2 # since eig_parity removes degeneracy in y-direction - nm_t = int(nm_t) - - res = sim.get_eigenmode_coefficients(tran_flux, - range(1,nm_t+1), - eig_parity=eig_parity) - t_coeffs = res.alpha - - Tsum = 0 - for nm in range(nm_t): - Tsum += abs(t_coeffs[nm,0,0])**2/input_flux[0] - - r_flux = mp.get_fluxes(refl_flux) - t_flux = mp.get_fluxes(tran_flux) - Rflux = -r_flux[0]/input_flux[0] - Tflux = t_flux[0]/input_flux[0] - - print("refl:, {}, {}".format(Rsum,Rflux)) - print("tran:, {}, {}".format(Tsum,Tflux)) - print("sum:, {}, {}".format(Rsum+Tsum,Rflux+Tflux)) - - self.assertAlmostEqual(Rsum,Rflux,places=2) - self.assertAlmostEqual(Tsum,Tflux,places=2) - self.assertAlmostEqual(Rsum+Tsum,1.00,places=2) - - - @parameterized.parameterized.expand([(13.2,"real/imag"), - (17.7,"complex"), - (21.2, "3d")]) - def test_binary_grating_special_kz(self, theta, kz_2d): - # rotation angle of incident planewave - # counterclockwise (CCW) about Y axis, 0 degrees along +X axis - theta_in = math.radians(theta) - - # k (in source medium) with correct length (plane of incidence: XZ) - k = mp.Vector3(self.fcen*self.ng).rotate(mp.Vector3(0,1,0), theta_in) - - symmetries = [mp.Mirror(mp.Y)] - - def pw_amp(k,x0): - def _pw_amp(x): - return cmath.exp(1j*2*math.pi*k.dot(x+x0)) - return _pw_amp - - src_pt = mp.Vector3(-0.5*self.sx+self.dpml,0,0) - sources = [mp.Source(mp.GaussianSource(self.fcen,fwidth=self.df), - component=mp.Ez, - center=src_pt, - size=mp.Vector3(0,self.sy,0), - amp_func=pw_amp(k,src_pt))] - - sim = mp.Simulation(resolution=self.resolution, - cell_size=self.cell_size, - boundary_layers=self.abs_layers, - k_point=k, - default_material=self.glass, - sources=sources, - symmetries=symmetries, - kz_2d=kz_2d) - - refl_pt = mp.Vector3(-0.5*self.sx+self.dpml+0.5*self.dsub,0,0) - refl_flux = sim.add_mode_monitor(self.fcen, - 0, - 1, - mp.FluxRegion(center=refl_pt, - size=mp.Vector3(0,self.sy,0))) - - sim.run(until_after_sources=mp.stop_when_dft_decayed()) - - input_flux = mp.get_fluxes(refl_flux) - input_flux_data = sim.get_flux_data(refl_flux) - - sim.reset_meep() - - sim = mp.Simulation(resolution=self.resolution, - cell_size=self.cell_size, - boundary_layers=self.abs_layers, - geometry=self.geometry, - k_point=k, - sources=sources, - symmetries=symmetries, - kz_2d=kz_2d) - - refl_flux = sim.add_mode_monitor(self.fcen, - 0, - 1, - mp.FluxRegion(center=refl_pt, - size=mp.Vector3(0,self.sy,0))) - - sim.load_minus_flux_data(refl_flux,input_flux_data) - - tran_pt = mp.Vector3(0.5*self.sx-self.dpml-0.5*self.dpad,0,0) - tran_flux = sim.add_mode_monitor(self.fcen, - 0, - 1, - mp.FluxRegion(center=tran_pt, - size=mp.Vector3(0,self.sy,0))) - - sim.run(until_after_sources=mp.stop_when_dft_decayed()) - - # number of reflected orders - nm_r = (np.ceil((np.sqrt((self.fcen*self.ng)**2-k.z**2)-k.y)*self.gp) - - np.floor((-np.sqrt((self.fcen*self.ng)**2-k.z**2)-k.y)*self.gp)) - nm_r = int(nm_r/2) - - Rsum = 0 - for nm in range(nm_r): - for S_pol in [False, True]: - res = sim.get_eigenmode_coefficients(refl_flux, - mp.DiffractedPlanewave([0,nm,0], - mp.Vector3(1,0,0), - 1 if S_pol else 0, - 0 if S_pol else 1)) + @classmethod + def setUpClass(cls): + cls.resolution = 30 # pixels/μm + + cls.dpml = 1.0 # PML thickness + cls.dsub = 1.0 # substrate thickness + cls.dpad = 1.0 # padding thickness between grating and PML + cls.gp = 6.0 # grating period + cls.gh = 0.5 # grating height + cls.gdc = 0.5 # grating duty cycle + + cls.sx = cls.dpml + cls.dsub + cls.gh + cls.dpad + cls.dpml + cls.sy = cls.gp + + cls.cell_size = mp.Vector3(cls.sx, cls.sy, 0) + + # replace anisotropic PML with isotropic Absorber to + # attenuate parallel-directed fields of oblique source + cls.abs_layers = [mp.Absorber(thickness=cls.dpml, direction=mp.X)] + + wvl = 0.5 # center wavelength + cls.fcen = 1 / wvl # center frequency + cls.df = 0.05 * cls.fcen # frequency width + + cls.ng = 1.5 + cls.glass = mp.Medium(index=cls.ng) + + cls.geometry = [ + mp.Block( + material=cls.glass, + size=mp.Vector3(cls.dpml + cls.dsub, mp.inf, mp.inf), + center=mp.Vector3(-0.5 * cls.sx + 0.5 * (cls.dpml + cls.dsub), 0, 0), + ), + mp.Block( + material=cls.glass, + size=mp.Vector3(cls.gh, cls.gdc * cls.gp, mp.inf), + center=mp.Vector3( + -0.5 * cls.sx + cls.dpml + cls.dsub + 0.5 * cls.gh, 0, 0 + ), + ), + ] + + @parameterized.parameterized.expand([(0,), (10.7,)]) + def test_binary_grating_oblique(self, theta): + # rotation angle of incident planewave + # counterclockwise (CCW) about Z axis, 0 degrees along +X axis + theta_in = math.radians(theta) + + # k (in source medium) with correct length (plane of incidence: XY) + k = mp.Vector3(self.fcen * self.ng).rotate(mp.Vector3(0, 0, 1), theta_in) + + symmetries = [] + eig_parity = mp.ODD_Z + if theta_in == 0: + symmetries = [mp.Mirror(mp.Y)] + eig_parity += mp.EVEN_Y + + def pw_amp(k, x0): + def _pw_amp(x): + return cmath.exp(1j * 2 * math.pi * k.dot(x + x0)) + + return _pw_amp + + src_pt = mp.Vector3(-0.5 * self.sx + self.dpml, 0, 0) + sources = [ + mp.Source( + mp.GaussianSource(self.fcen, fwidth=self.df), + component=mp.Ez, # S polarization + center=src_pt, + size=mp.Vector3(0, self.sy, 0), + amp_func=pw_amp(k, src_pt), + ) + ] + + sim = mp.Simulation( + resolution=self.resolution, + cell_size=self.cell_size, + boundary_layers=self.abs_layers, + k_point=k, + default_material=self.glass, + sources=sources, + symmetries=symmetries, + ) + + refl_pt = mp.Vector3(-0.5 * self.sx + self.dpml + 0.5 * self.dsub, 0, 0) + refl_flux = sim.add_flux( + self.fcen, + 0, + 1, + mp.FluxRegion(center=refl_pt, size=mp.Vector3(0, self.sy, 0)), + ) + + sim.run(until_after_sources=mp.stop_when_dft_decayed()) + + input_flux = mp.get_fluxes(refl_flux) + input_flux_data = sim.get_flux_data(refl_flux) + + sim.reset_meep() + + sim = mp.Simulation( + resolution=self.resolution, + cell_size=self.cell_size, + boundary_layers=self.abs_layers, + geometry=self.geometry, + k_point=k, + sources=sources, + symmetries=symmetries, + ) + + refl_flux = sim.add_flux( + self.fcen, + 0, + 1, + mp.FluxRegion(center=refl_pt, size=mp.Vector3(0, self.sy, 0)), + ) + + sim.load_minus_flux_data(refl_flux, input_flux_data) + + tran_pt = mp.Vector3(0.5 * self.sx - self.dpml - 0.5 * self.dpad, 0, 0) + tran_flux = sim.add_flux( + self.fcen, + 0, + 1, + mp.FluxRegion(center=tran_pt, size=mp.Vector3(0, self.sy, 0)), + ) + + sim.run(until_after_sources=mp.stop_when_dft_decayed()) + + # number of reflected orders + nm_r = np.floor((self.fcen * self.ng - k.y) * self.gp) - np.ceil( + (-self.fcen * self.ng - k.y) * self.gp + ) + if theta_in == 0: + nm_r = nm_r / 2 # since eig_parity removes degeneracy in y-direction + nm_r = int(nm_r) + + res = sim.get_eigenmode_coefficients( + refl_flux, range(1, nm_r + 1), eig_parity=eig_parity + ) r_coeffs = res.alpha - Rmode = abs(r_coeffs[0,0,1])**2/input_flux[0] - print("refl-order:, {}, {}, {}".format("s" if S_pol else "p",nm,Rmode)) - Rsum += Rmode if nm == 0 else 2*Rmode - - # number of transmitted orders - nm_t = (np.ceil((np.sqrt(self.fcen**2-k.z**2)-k.y)*self.gp) - - np.floor((-np.sqrt(self.fcen**2-k.z**2)-k.y)*self.gp)) - nm_t = int(nm_t/2) - - Tsum = 0 - for nm in range(nm_t): - for S_pol in [False, True]: - res = sim.get_eigenmode_coefficients(tran_flux, - mp.DiffractedPlanewave([0,nm,0], - mp.Vector3(1,0,0), - 1 if S_pol else 0, - 0 if S_pol else 1)) - t_coeffs = res.alpha - Tmode = abs(t_coeffs[0,0,0])**2/input_flux[0] - print("tran-order:, {}, {}, {}".format("s" if S_pol else "p",nm,Tmode)) - Tsum += Tmode if nm == 0 else 2*Tmode - - r_flux = mp.get_fluxes(refl_flux) - t_flux = mp.get_fluxes(tran_flux) - Rflux = -r_flux[0]/input_flux[0] - Tflux = t_flux[0]/input_flux[0] - - print("refl:, {}, {}".format(Rsum,Rflux)) - print("tran:, {}, {}".format(Tsum,Tflux)) - print("sum:, {}, {}".format(Rsum+Tsum,Rflux+Tflux)) - - self.assertAlmostEqual(Rsum,Rflux,places=2) - self.assertAlmostEqual(Tsum,Tflux,places=2) - self.assertAlmostEqual(Rsum+Tsum,1.00,places=2) + Rsum = 0 + for nm in range(nm_r): + Rsum += abs(r_coeffs[nm, 0, 1]) ** 2 / input_flux[0] + + # number of transmitted orders + nm_t = np.floor((self.fcen - k.y) * self.gp) - np.ceil( + (-self.fcen - k.y) * self.gp + ) + if theta_in == 0: + nm_t = nm_t / 2 # since eig_parity removes degeneracy in y-direction + nm_t = int(nm_t) + + res = sim.get_eigenmode_coefficients( + tran_flux, range(1, nm_t + 1), eig_parity=eig_parity + ) + t_coeffs = res.alpha -if __name__ == '__main__': - unittest.main() + Tsum = 0 + for nm in range(nm_t): + Tsum += abs(t_coeffs[nm, 0, 0]) ** 2 / input_flux[0] + + r_flux = mp.get_fluxes(refl_flux) + t_flux = mp.get_fluxes(tran_flux) + Rflux = -r_flux[0] / input_flux[0] + Tflux = t_flux[0] / input_flux[0] + + print(f"refl:, {Rsum}, {Rflux}") + print(f"tran:, {Tsum}, {Tflux}") + print(f"sum:, {Rsum + Tsum}, {Rflux + Tflux}") + + self.assertAlmostEqual(Rsum, Rflux, places=2) + self.assertAlmostEqual(Tsum, Tflux, places=2) + self.assertAlmostEqual(Rsum + Tsum, 1.00, places=2) + + @parameterized.parameterized.expand( + [(13.2, "real/imag"), (17.7, "complex"), (21.2, "3d")] + ) + def test_binary_grating_special_kz(self, theta, kz_2d): + # rotation angle of incident planewave + # counterclockwise (CCW) about Y axis, 0 degrees along +X axis + theta_in = math.radians(theta) + + # k (in source medium) with correct length (plane of incidence: XZ) + k = mp.Vector3(self.fcen * self.ng).rotate(mp.Vector3(0, 1, 0), theta_in) + + symmetries = [mp.Mirror(mp.Y)] + + def pw_amp(k, x0): + def _pw_amp(x): + return cmath.exp(1j * 2 * math.pi * k.dot(x + x0)) + + return _pw_amp + + src_pt = mp.Vector3(-0.5 * self.sx + self.dpml, 0, 0) + sources = [ + mp.Source( + mp.GaussianSource(self.fcen, fwidth=self.df), + component=mp.Ez, + center=src_pt, + size=mp.Vector3(0, self.sy, 0), + amp_func=pw_amp(k, src_pt), + ) + ] + + sim = mp.Simulation( + resolution=self.resolution, + cell_size=self.cell_size, + boundary_layers=self.abs_layers, + k_point=k, + default_material=self.glass, + sources=sources, + symmetries=symmetries, + kz_2d=kz_2d, + ) + + refl_pt = mp.Vector3(-0.5 * self.sx + self.dpml + 0.5 * self.dsub, 0, 0) + refl_flux = sim.add_mode_monitor( + self.fcen, + 0, + 1, + mp.FluxRegion(center=refl_pt, size=mp.Vector3(0, self.sy, 0)), + ) + + sim.run(until_after_sources=mp.stop_when_dft_decayed()) + + input_flux = mp.get_fluxes(refl_flux) + input_flux_data = sim.get_flux_data(refl_flux) + + sim.reset_meep() + + sim = mp.Simulation( + resolution=self.resolution, + cell_size=self.cell_size, + boundary_layers=self.abs_layers, + geometry=self.geometry, + k_point=k, + sources=sources, + symmetries=symmetries, + kz_2d=kz_2d, + ) + + refl_flux = sim.add_mode_monitor( + self.fcen, + 0, + 1, + mp.FluxRegion(center=refl_pt, size=mp.Vector3(0, self.sy, 0)), + ) + + sim.load_minus_flux_data(refl_flux, input_flux_data) + + tran_pt = mp.Vector3(0.5 * self.sx - self.dpml - 0.5 * self.dpad, 0, 0) + tran_flux = sim.add_mode_monitor( + self.fcen, + 0, + 1, + mp.FluxRegion(center=tran_pt, size=mp.Vector3(0, self.sy, 0)), + ) + + sim.run(until_after_sources=mp.stop_when_dft_decayed()) + + # number of reflected orders + nm_r = np.ceil( + (np.sqrt((self.fcen * self.ng) ** 2 - k.z**2) - k.y) * self.gp + ) - np.floor((-np.sqrt((self.fcen * self.ng) ** 2 - k.z**2) - k.y) * self.gp) + nm_r = int(nm_r / 2) + + Rsum = 0 + for nm in range(nm_r): + for S_pol in [False, True]: + res = sim.get_eigenmode_coefficients( + refl_flux, + mp.DiffractedPlanewave( + [0, nm, 0], + mp.Vector3(1, 0, 0), + 1 if S_pol else 0, + 0 if S_pol else 1, + ), + ) + r_coeffs = res.alpha + Rmode = abs(r_coeffs[0, 0, 1]) ** 2 / input_flux[0] + print( + "refl-order:, {}, {}, {}".format("s" if S_pol else "p", nm, Rmode) + ) + Rsum += Rmode if nm == 0 else 2 * Rmode + + # number of transmitted orders + nm_t = np.ceil((np.sqrt(self.fcen**2 - k.z**2) - k.y) * self.gp) - np.floor( + (-np.sqrt(self.fcen**2 - k.z**2) - k.y) * self.gp + ) + nm_t = int(nm_t / 2) + + Tsum = 0 + for nm in range(nm_t): + for S_pol in [False, True]: + res = sim.get_eigenmode_coefficients( + tran_flux, + mp.DiffractedPlanewave( + [0, nm, 0], + mp.Vector3(1, 0, 0), + 1 if S_pol else 0, + 0 if S_pol else 1, + ), + ) + t_coeffs = res.alpha + Tmode = abs(t_coeffs[0, 0, 0]) ** 2 / input_flux[0] + print( + "tran-order:, {}, {}, {}".format("s" if S_pol else "p", nm, Tmode) + ) + Tsum += Tmode if nm == 0 else 2 * Tmode + + r_flux = mp.get_fluxes(refl_flux) + t_flux = mp.get_fluxes(tran_flux) + Rflux = -r_flux[0] / input_flux[0] + Tflux = t_flux[0] / input_flux[0] + + print(f"refl:, {Rsum}, {Rflux}") + print(f"tran:, {Tsum}, {Tflux}") + print(f"sum:, {Rsum + Tsum}, {Rflux + Tflux}") + + self.assertAlmostEqual(Rsum, Rflux, places=2) + self.assertAlmostEqual(Tsum, Tflux, places=2) + self.assertAlmostEqual(Rsum + Tsum, 1.00, places=2) + + +if __name__ == "__main__": + unittest.main() diff --git a/python/tests/test_binary_partition_utils.py b/python/tests/test_binary_partition_utils.py index 5b6f72866..31d1f7996 100644 --- a/python/tests/test_binary_partition_utils.py +++ b/python/tests/test_binary_partition_utils.py @@ -1,18 +1,18 @@ import copy import unittest +import meep.binary_partition_utils as bpu +import numpy as np import parameterized import meep as mp -import meep.binary_partition_utils as bpu -import numpy as np PARTITION_NO_DUPLICATE_PROC_ID = mp.BinaryPartition( - data=[(mp.X, -2.), 0, [(mp.Y, 1.5), [(mp.X, 4.), 1, [(mp.Y, - 0.5), 4, 3]], 2]]) + data=[(mp.X, -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 4, 3]], 2]] +) PARTITION_DUPLICATE_PROC_ID = mp.BinaryPartition( - data=[(mp.X, -2.), 0, [(mp.Y, 1.5), [(mp.X, 4.), 1, [(mp.Y, - 0.5), 1, 3]], 0]]) + data=[(mp.X, -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 1, 3]], 0]] +) # Mocked chunk IDs since we are in a single-core environment CHUNK_OWNERS_NO_DUPLICATE_PROC_ID = np.array([0, 1, 4, 3, 2]) @@ -20,22 +20,25 @@ class BinaryPartitionUtilsTest(unittest.TestCase): - - @parameterized.parameterized.expand([ - (PARTITION_NO_DUPLICATE_PROC_ID, False), - (PARTITION_NO_DUPLICATE_PROC_ID.right, False), - (PARTITION_NO_DUPLICATE_PROC_ID.left, True), - (PARTITION_DUPLICATE_PROC_ID, False), - (PARTITION_DUPLICATE_PROC_ID.right, False), - (PARTITION_DUPLICATE_PROC_ID.left, True), - ]) + @parameterized.parameterized.expand( + [ + (PARTITION_NO_DUPLICATE_PROC_ID, False), + (PARTITION_NO_DUPLICATE_PROC_ID.right, False), + (PARTITION_NO_DUPLICATE_PROC_ID.left, True), + (PARTITION_DUPLICATE_PROC_ID, False), + (PARTITION_DUPLICATE_PROC_ID.right, False), + (PARTITION_DUPLICATE_PROC_ID.left, True), + ] + ) def test_is_leaf_node(self, partition, expected_leaf_status): self.assertEqual(bpu.is_leaf_node(partition), expected_leaf_status) - @parameterized.parameterized.expand([ - (PARTITION_NO_DUPLICATE_PROC_ID, CHUNK_OWNERS_NO_DUPLICATE_PROC_ID), - (PARTITION_DUPLICATE_PROC_ID, CHUNK_OWNERS_DUPLICATE_PROC_ID), - ]) + @parameterized.parameterized.expand( + [ + (PARTITION_NO_DUPLICATE_PROC_ID, CHUNK_OWNERS_NO_DUPLICATE_PROC_ID), + (PARTITION_DUPLICATE_PROC_ID, CHUNK_OWNERS_DUPLICATE_PROC_ID), + ] + ) def test_enumerate_leaf_nodes(self, partition, chunk_owners): leaf_nodes = list(bpu.enumerate_leaf_nodes(partition)) self.assertEqual(len(leaf_nodes), partition.numchunks()) @@ -44,216 +47,237 @@ def test_enumerate_leaf_nodes(self, partition, chunk_owners): def test_partition_has_duplicate_proc_ids(self): self.assertFalse( - bpu.partition_has_duplicate_proc_ids(PARTITION_NO_DUPLICATE_PROC_ID)) + bpu.partition_has_duplicate_proc_ids(PARTITION_NO_DUPLICATE_PROC_ID) + ) self.assertTrue( - bpu.partition_has_duplicate_proc_ids(PARTITION_DUPLICATE_PROC_ID)) + bpu.partition_has_duplicate_proc_ids(PARTITION_DUPLICATE_PROC_ID) + ) - @parameterized.parameterized.expand([ - ( + @parameterized.parameterized.expand( + [ + ( PARTITION_NO_DUPLICATE_PROC_ID, [0, 1, 2, 3, 4], - ), - ( + ), + ( PARTITION_DUPLICATE_PROC_ID, [0, 1, 2, 3, 4], - ), - ]) + ), + ] + ) def test_get_total_weight(self, partition, weights_by_proc_id): if not bpu.partition_has_duplicate_proc_ids(partition): self.assertEqual( bpu.get_total_weight(partition, weights_by_proc_id), - sum(weights_by_proc_id)) + sum(weights_by_proc_id), + ) self.assertEqual( bpu.get_total_weight(partition.right.left, weights_by_proc_id), - weights_by_proc_id[1] + weights_by_proc_id[4] + weights_by_proc_id[3]) + weights_by_proc_id[1] + weights_by_proc_id[4] + weights_by_proc_id[3], + ) else: with self.assertRaises(ValueError): bpu.get_total_weight(partition, weights_by_proc_id) - @parameterized.parameterized.expand([ - ( + @parameterized.parameterized.expand( + [ + ( PARTITION_NO_DUPLICATE_PROC_ID, [0, 1, 2, 3, 4], - ), - ( + ), + ( PARTITION_DUPLICATE_PROC_ID, [0, 1, 2, 3, 4], - ), - ]) + ), + ] + ) def test_get_left_right_total_weights(self, partition, weights_by_proc_id): proc_ids = [node.proc_id for node in bpu.enumerate_leaf_nodes(partition)] no_duplicates = len(set(proc_ids)) == len(proc_ids) if no_duplicates: self.assertEqual( bpu.get_left_right_total_weights(partition, weights_by_proc_id), - (bpu.get_total_weight(partition.left, weights_by_proc_id), - bpu.get_total_weight(partition.right, weights_by_proc_id))) + ( + bpu.get_total_weight(partition.left, weights_by_proc_id), + bpu.get_total_weight(partition.right, weights_by_proc_id), + ), + ) else: with self.assertRaises(ValueError): bpu.get_left_right_total_weights(partition, weights_by_proc_id) - @parameterized.parameterized.expand([ - ( + @parameterized.parameterized.expand( + [ + ( PARTITION_NO_DUPLICATE_PROC_ID, 2, [1500, 2400, 300, 100, 700], - ), - ( + ), + ( PARTITION_NO_DUPLICATE_PROC_ID, 3, [15000, 24000, 3000, 1000, 7000], - ), - ]) + ), + ] + ) def test_pixel_volume(self, partition, dims, expected_pixel_volumes): - cell_size = mp.Vector3(10.0, 5.0, 1.0) if dims == 3 else mp.Vector3( - 10.0, 5.0, 0.0) - sim = mp.Simulation( - cell_size=cell_size, resolution=10, chunk_layout=partition) + cell_size = ( + mp.Vector3(10.0, 5.0, 1.0) if dims == 3 else mp.Vector3(10.0, 5.0, 0.0) + ) + sim = mp.Simulation(cell_size=cell_size, resolution=10, chunk_layout=partition) sim.init_sim() chunk_volumes = sim.structure.get_chunk_volumes() - self.assertEqual([bpu.pixel_volume(vol) for vol in chunk_volumes], - expected_pixel_volumes) + self.assertEqual( + [bpu.pixel_volume(vol) for vol in chunk_volumes], expected_pixel_volumes + ) - @parameterized.parameterized.expand([ - (PARTITION_NO_DUPLICATE_PROC_ID, CHUNK_OWNERS_NO_DUPLICATE_PROC_ID, 3500), - (PARTITION_DUPLICATE_PROC_ID, CHUNK_OWNERS_DUPLICATE_PROC_ID, 3500), - ]) - def test_get_total_volume_2d(self, partition, chunk_owners, - expected_total_volume): + @parameterized.parameterized.expand( + [ + (PARTITION_NO_DUPLICATE_PROC_ID, CHUNK_OWNERS_NO_DUPLICATE_PROC_ID, 3500), + (PARTITION_DUPLICATE_PROC_ID, CHUNK_OWNERS_DUPLICATE_PROC_ID, 3500), + ] + ) + def test_get_total_volume_2d(self, partition, chunk_owners, expected_total_volume): sim = mp.Simulation( - cell_size=mp.Vector3(10.0, 5.0, 0.0), - resolution=10, - chunk_layout=partition) + cell_size=mp.Vector3(10.0, 5.0, 0.0), resolution=10, chunk_layout=partition + ) sim.init_sim() chunk_volumes = sim.structure.get_chunk_volumes() total_volume = sim.cell_size[0] * sim.cell_size[1] * sim.resolution**2 self.assertEqual( - bpu.get_total_volume(partition, chunk_volumes, chunk_owners), - total_volume) + bpu.get_total_volume(partition, chunk_volumes, chunk_owners), total_volume + ) if not bpu.partition_has_duplicate_proc_ids(partition): self.assertEqual( bpu.get_total_volume(partition.right, chunk_volumes, chunk_owners), - expected_total_volume) + expected_total_volume, + ) - @parameterized.parameterized.expand([ - (PARTITION_NO_DUPLICATE_PROC_ID, CHUNK_OWNERS_NO_DUPLICATE_PROC_ID, 35000), - (PARTITION_DUPLICATE_PROC_ID, CHUNK_OWNERS_DUPLICATE_PROC_ID, 35000), - ]) - def test_get_total_volume_3d(self, partition, chunk_owners, - expected_total_volume): + @parameterized.parameterized.expand( + [ + (PARTITION_NO_DUPLICATE_PROC_ID, CHUNK_OWNERS_NO_DUPLICATE_PROC_ID, 35000), + (PARTITION_DUPLICATE_PROC_ID, CHUNK_OWNERS_DUPLICATE_PROC_ID, 35000), + ] + ) + def test_get_total_volume_3d(self, partition, chunk_owners, expected_total_volume): sim = mp.Simulation( - cell_size=mp.Vector3(10.0, 5.0, 1.0), - resolution=10, - chunk_layout=partition) + cell_size=mp.Vector3(10.0, 5.0, 1.0), resolution=10, chunk_layout=partition + ) sim.init_sim() chunk_volumes = sim.structure.get_chunk_volumes() - total_volume = sim.cell_size[0] * sim.cell_size[1] * sim.cell_size[ - 2] * sim.resolution**3 + total_volume = ( + sim.cell_size[0] * sim.cell_size[1] * sim.cell_size[2] * sim.resolution**3 + ) self.assertEqual( - bpu.get_total_volume(partition, chunk_volumes, chunk_owners), - total_volume) + bpu.get_total_volume(partition, chunk_volumes, chunk_owners), total_volume + ) if not bpu.partition_has_duplicate_proc_ids(partition): self.assertEqual( bpu.get_total_volume(partition.right, chunk_volumes, chunk_owners), - expected_total_volume) + expected_total_volume, + ) - @parameterized.parameterized.expand([ - ( + @parameterized.parameterized.expand( + [ + ( PARTITION_NO_DUPLICATE_PROC_ID, CHUNK_OWNERS_NO_DUPLICATE_PROC_ID, 2, - ), - ( + ), + ( PARTITION_DUPLICATE_PROC_ID, CHUNK_OWNERS_DUPLICATE_PROC_ID, 2, - ), - ( + ), + ( PARTITION_NO_DUPLICATE_PROC_ID, CHUNK_OWNERS_NO_DUPLICATE_PROC_ID, 3, - ), - ( + ), + ( PARTITION_DUPLICATE_PROC_ID, CHUNK_OWNERS_DUPLICATE_PROC_ID, 3, - ), - ]) + ), + ] + ) def test_get_left_right_total_volumes(self, partition, chunk_owners, dims): - cell_size = mp.Vector3(10.0, 5.0, 1.0) if dims == 3 else mp.Vector3( - 10.0, 5.0, 0.0) - sim = mp.Simulation( - cell_size=cell_size, resolution=10, chunk_layout=partition) + cell_size = ( + mp.Vector3(10.0, 5.0, 1.0) if dims == 3 else mp.Vector3(10.0, 5.0, 0.0) + ) + sim = mp.Simulation(cell_size=cell_size, resolution=10, chunk_layout=partition) sim.init_sim() chunk_volumes = sim.structure.get_chunk_volumes() self.assertEqual( - bpu.get_left_right_total_volumes(partition, chunk_volumes, - chunk_owners), - (bpu.get_total_volume(partition.left, chunk_volumes, chunk_owners), - bpu.get_total_volume(partition.right, chunk_volumes, chunk_owners))) + bpu.get_left_right_total_volumes(partition, chunk_volumes, chunk_owners), + ( + bpu.get_total_volume(partition.left, chunk_volumes, chunk_owners), + bpu.get_total_volume(partition.right, chunk_volumes, chunk_owners), + ), + ) - @parameterized.parameterized.expand([ - ( + @parameterized.parameterized.expand( + [ + ( PARTITION_NO_DUPLICATE_PROC_ID, CHUNK_OWNERS_NO_DUPLICATE_PROC_ID, 2, - ), - ( + ), + ( PARTITION_DUPLICATE_PROC_ID, CHUNK_OWNERS_DUPLICATE_PROC_ID, 2, - ), - ( + ), + ( PARTITION_NO_DUPLICATE_PROC_ID, CHUNK_OWNERS_NO_DUPLICATE_PROC_ID, 3, - ), - ( + ), + ( PARTITION_DUPLICATE_PROC_ID, CHUNK_OWNERS_DUPLICATE_PROC_ID, 3, - ), - ]) + ), + ] + ) def test_get_grid_volumes_in_tree(self, partition, chunk_owners, dims): - cell_size = mp.Vector3(10.0, 5.0, 1.0) if dims == 3 else mp.Vector3( - 10.0, 5.0, 0.0) - sim = mp.Simulation( - cell_size=cell_size, resolution=10, chunk_layout=partition) + cell_size = ( + mp.Vector3(10.0, 5.0, 1.0) if dims == 3 else mp.Vector3(10.0, 5.0, 0.0) + ) + sim = mp.Simulation(cell_size=cell_size, resolution=10, chunk_layout=partition) sim.init_sim() chunk_volumes = sim.structure.get_chunk_volumes() - grid_volumes_in_tree = bpu.get_grid_volumes_in_tree(partition, - chunk_volumes, - chunk_owners) + grid_volumes_in_tree = bpu.get_grid_volumes_in_tree( + partition, chunk_volumes, chunk_owners + ) self.assertEqual(set(grid_volumes_in_tree), set(chunk_volumes)) no_duplicates = len(set(chunk_owners)) == len(chunk_owners) - grid_volumes_in_right_expected = chunk_volumes[ - 1:] if no_duplicates else chunk_volumes + grid_volumes_in_right_expected = ( + chunk_volumes[1:] if no_duplicates else chunk_volumes + ) grid_volumes_in_right = bpu.get_grid_volumes_in_tree( - partition.right, chunk_volumes, chunk_owners) + partition.right, chunk_volumes, chunk_owners + ) self.assertEqual( - set(grid_volumes_in_right), set(grid_volumes_in_right_expected)) + set(grid_volumes_in_right), set(grid_volumes_in_right_expected) + ) - @parameterized.parameterized.expand([ - ( + @parameterized.parameterized.expand( + [ + ( PARTITION_NO_DUPLICATE_PROC_ID, CHUNK_OWNERS_NO_DUPLICATE_PROC_ID, 2, - { - 0: 1500, - 1: 2400, - 4: 300, - 3: 100, - 2: 700 - }, - ), - ( + {0: 1500, 1: 2400, 4: 300, 3: 100, 2: 700}, + ), + ( PARTITION_DUPLICATE_PROC_ID, CHUNK_OWNERS_DUPLICATE_PROC_ID, 2, @@ -262,20 +286,14 @@ def test_get_grid_volumes_in_tree(self, partition, chunk_owners, dims): 1: 2700, 3: 100, }, - ), - ( + ), + ( PARTITION_NO_DUPLICATE_PROC_ID, CHUNK_OWNERS_NO_DUPLICATE_PROC_ID, 3, - { - 0: 15000, - 1: 24000, - 4: 3000, - 3: 1000, - 2: 7000 - }, - ), - ( + {0: 15000, 1: 24000, 4: 3000, 3: 1000, 2: 7000}, + ), + ( PARTITION_DUPLICATE_PROC_ID, CHUNK_OWNERS_DUPLICATE_PROC_ID, 3, @@ -284,95 +302,110 @@ def test_get_grid_volumes_in_tree(self, partition, chunk_owners, dims): 1: 27000, 3: 1000, }, - ), - ]) - def test_get_total_volume_per_process(self, partition, chunk_owners, dims, - expected_volumes_per_process): - cell_size = mp.Vector3(10.0, 5.0, 1.0) if dims == 3 else mp.Vector3( - 10.0, 5.0, 0.0) - sim = mp.Simulation( - cell_size=cell_size, resolution=10, chunk_layout=partition) + ), + ] + ) + def test_get_total_volume_per_process( + self, partition, chunk_owners, dims, expected_volumes_per_process + ): + cell_size = ( + mp.Vector3(10.0, 5.0, 1.0) if dims == 3 else mp.Vector3(10.0, 5.0, 0.0) + ) + sim = mp.Simulation(cell_size=cell_size, resolution=10, chunk_layout=partition) sim.init_sim() chunk_volumes = sim.structure.get_chunk_volumes() volumes_per_process = bpu.get_total_volume_per_process( - partition, chunk_volumes, chunk_owners) + partition, chunk_volumes, chunk_owners + ) self.assertEqual(volumes_per_process, expected_volumes_per_process) - @parameterized.parameterized.expand([ - ( + @parameterized.parameterized.expand( + [ + ( PARTITION_NO_DUPLICATE_PROC_ID, CHUNK_OWNERS_NO_DUPLICATE_PROC_ID, 2, (-5.0, 5.0, -2.5, 2.5, 0.0, 0.0), (-2.0, 5.0, -2.5, 2.5, 0.0, 0.0), - ), - ( + ), + ( PARTITION_DUPLICATE_PROC_ID, CHUNK_OWNERS_DUPLICATE_PROC_ID, 2, (-5.0, 5.0, -2.5, 2.5, 0.0, 0.0), (-5.0, 5.0, -2.5, 2.5, 0.0, 0.0), - ), - ( + ), + ( PARTITION_NO_DUPLICATE_PROC_ID, CHUNK_OWNERS_NO_DUPLICATE_PROC_ID, 3, (-5.0, 5.0, -2.5, 2.5, -0.5, 0.5), (-2.0, 5.0, -2.5, 2.5, -0.5, 0.5), - ), - ( + ), + ( PARTITION_DUPLICATE_PROC_ID, CHUNK_OWNERS_DUPLICATE_PROC_ID, 3, (-5.0, 5.0, -2.5, 2.5, -0.5, 0.5), (-5.0, 5.0, -2.5, 2.5, -0.5, 0.5), - ), - ]) - def test_get_box_ranges(self, partition, chunk_owners, dims, - expected_box_ranges, expected_right_box_ranges): - cell_size = mp.Vector3(10.0, 5.0, 1.0) if dims == 3 else mp.Vector3( - 10.0, 5.0, 0.0) - sim = mp.Simulation( - cell_size=cell_size, resolution=10, chunk_layout=partition) + ), + ] + ) + def test_get_box_ranges( + self, + partition, + chunk_owners, + dims, + expected_box_ranges, + expected_right_box_ranges, + ): + cell_size = ( + mp.Vector3(10.0, 5.0, 1.0) if dims == 3 else mp.Vector3(10.0, 5.0, 0.0) + ) + sim = mp.Simulation(cell_size=cell_size, resolution=10, chunk_layout=partition) sim.init_sim() chunk_volumes = sim.structure.get_chunk_volumes() self.assertEqual( bpu.get_box_ranges(partition, chunk_volumes, chunk_owners), - expected_box_ranges) + expected_box_ranges, + ) self.assertEqual( bpu.get_box_ranges(partition.right, chunk_volumes, chunk_owners), - expected_right_box_ranges) + expected_right_box_ranges, + ) - @parameterized.parameterized.expand([ - ( + @parameterized.parameterized.expand( + [ + ( copy.deepcopy(PARTITION_NO_DUPLICATE_PROC_ID), copy.deepcopy(PARTITION_NO_DUPLICATE_PROC_ID), True, - ), - ( + ), + ( copy.deepcopy(PARTITION_DUPLICATE_PROC_ID), copy.deepcopy(PARTITION_DUPLICATE_PROC_ID), True, - ), - ( + ), + ( copy.deepcopy(PARTITION_NO_DUPLICATE_PROC_ID), copy.deepcopy(PARTITION_DUPLICATE_PROC_ID), False, - ), - ( + ), + ( mp.BinaryPartition(data=[(mp.X, -2.5), 0, [(mp.X, 2.5), 1, 2]]), mp.BinaryPartition(data=[(mp.X, -2.5), 0, [(mp.X, 2.5), 1, 2]]), True, - ), - ( + ), + ( mp.BinaryPartition(data=[(mp.X, -2.5), 0, [(mp.X, 2.4), 1, 2]]), mp.BinaryPartition(data=[(mp.X, -2.5), 0, [(mp.X, 2.5), 1, 2]]), False, - ), - ]) + ), + ] + ) def test_partitions_are_equal(self, bp1, bp2, is_equal): self.assertEqual(bpu.partitions_are_equal(bp1, bp2), is_equal) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_cavity_arrayslice.py b/python/tests/test_cavity_arrayslice.py index 42f758b6f..b731a7c4c 100644 --- a/python/tests/test_cavity_arrayslice.py +++ b/python/tests/test_cavity_arrayslice.py @@ -1,15 +1,17 @@ -import meep as mp -from utils import ApproxComparisonTestCase import os import unittest + import numpy as np +from utils import ApproxComparisonTestCase + +import meep as mp class TestCavityArraySlice(ApproxComparisonTestCase): - data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'data')) - expected_1d = np.load(os.path.join(data_dir, 'cavity_arrayslice_1d.npy')) - expected_2d = np.load(os.path.join(data_dir, 'cavity_arrayslice_2d.npy')) + data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "data")) + expected_1d = np.load(os.path.join(data_dir, "cavity_arrayslice_1d.npy")) + expected_2d = np.load(os.path.join(data_dir, "cavity_arrayslice_2d.npy")) def setUp(self): @@ -22,16 +24,14 @@ def setUp(self): cell = mp.Vector3(sx, sy, 0) - blk = mp.Block(size=mp.Vector3(mp.inf, 1.2, mp.inf), - material=mp.Medium(epsilon=13)) + blk = mp.Block( + size=mp.Vector3(mp.inf, 1.2, mp.inf), material=mp.Medium(epsilon=13) + ) geometry = [blk] - for i in range(3): - geometry.append(mp.Cylinder(r, center=mp.Vector3(d / 2 + i))) - - for i in range(3): - geometry.append(mp.Cylinder(r, center=mp.Vector3(d / -2 - i))) + geometry.extend(mp.Cylinder(r, center=mp.Vector3(d / 2 + i)) for i in range(3)) + geometry.extend(mp.Cylinder(r, center=mp.Vector3(d / -2 - i)) for i in range(3)) sources = [mp.Source(mp.GaussianSource(0.25, fwidth=0.2), mp.Hz, mp.Vector3())] @@ -40,7 +40,7 @@ def setUp(self): geometry=geometry, sources=sources, boundary_layers=[mp.PML(dpml)], - resolution=20 + resolution=20, ) self.x_min = -0.25 * sx @@ -52,7 +52,9 @@ def setUp(self): self.center_1d = mp.Vector3((self.x_min + self.x_max) / 2) self.size_2d = mp.Vector3(self.x_max - self.x_min, self.y_max - self.y_min) - self.center_2d = mp.Vector3((self.x_min + self.x_max) / 2, (self.y_min + self.y_max) / 2) + self.center_2d = mp.Vector3( + (self.x_min + self.x_max) / 2, (self.y_min + self.y_max) / 2 + ) def test_1d_slice(self): self.sim.run(until_after_sources=0) @@ -70,7 +72,9 @@ def test_2d_slice(self): def test_1d_slice_user_array(self): self.sim.run(until_after_sources=0) - arr = np.zeros(126, dtype=np.float32 if mp.is_single_precision() else np.float64) + arr = np.zeros( + 126, dtype=np.float32 if mp.is_single_precision() else np.float64 + ) vol = mp.Volume(center=self.center_1d, size=self.size_1d) self.sim.get_array(mp.Hz, vol, arr=arr) tol = 1e-5 if mp.is_single_precision() else 1e-8 @@ -78,7 +82,9 @@ def test_1d_slice_user_array(self): def test_2d_slice_user_array(self): self.sim.run(until_after_sources=0) - arr = np.zeros((126, 38), dtype=np.float32 if mp.is_single_precision() else np.float64) + arr = np.zeros( + (126, 38), dtype=np.float32 if mp.is_single_precision() else np.float64 + ) vol = mp.Volume(center=self.center_2d, size=self.size_2d) self.sim.get_array(mp.Hz, vol, arr=arr) tol = 1e-5 if mp.is_single_precision() else 1e-8 @@ -106,16 +112,24 @@ def test_1d_complex_slice(self): self.sim.run(until_after_sources=0) vol = mp.Volume(center=self.center_1d, size=self.size_1d) hl_slice1d = self.sim.get_array(mp.Hz, vol, cmplx=True) - self.assertTrue(hl_slice1d.dtype == np.complex64 if mp.is_single_precision() else np.complex128) + self.assertTrue( + hl_slice1d.dtype == np.complex64 + if mp.is_single_precision() + else np.complex128 + ) self.assertTrue(hl_slice1d.shape[0] == 126) def test_2d_complex_slice(self): self.sim.run(until_after_sources=0) vol = mp.Volume(center=self.center_2d, size=self.size_2d) hl_slice2d = self.sim.get_array(mp.Hz, vol, cmplx=True) - self.assertTrue(hl_slice2d.dtype == np.complex64 if mp.is_single_precision() else np.complex128) + self.assertTrue( + hl_slice2d.dtype == np.complex64 + if mp.is_single_precision() + else np.complex128 + ) self.assertTrue(hl_slice2d.shape[0] == 126 and hl_slice2d.shape[1] == 38) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_cavity_farfield.py b/python/tests/test_cavity_farfield.py index 93de61f01..9d2d8da5c 100644 --- a/python/tests/test_cavity_farfield.py +++ b/python/tests/test_cavity_farfield.py @@ -1,13 +1,15 @@ -import meep as mp -from utils import ApproxComparisonTestCase import os import unittest + import h5py +from utils import ApproxComparisonTestCase + +import meep as mp class TestCavityFarfield(ApproxComparisonTestCase): - data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'data')) + data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "data")) def run_test(self, nfreqs): eps = 13 @@ -22,8 +24,13 @@ def run_test(self, nfreqs): cell = mp.Vector3(sx, sy, 0) - geometry = [mp.Block(center=mp.Vector3(), size=mp.Vector3(mp.inf, w, mp.inf), - material=mp.Medium(epsilon=eps))] + geometry = [ + mp.Block( + center=mp.Vector3(), + size=mp.Vector3(mp.inf, w, mp.inf), + material=mp.Medium(epsilon=eps), + ) + ] for i in range(N): geometry.append(mp.Cylinder(r, center=mp.Vector3(d / 2 + i))) @@ -35,55 +42,66 @@ def run_test(self, nfreqs): fcen = 0.25 df = 0.2 - sources = mp.Source(src=mp.GaussianSource(fcen, fwidth=df), component=mp.Hz, center=mp.Vector3()) + sources = mp.Source( + src=mp.GaussianSource(fcen, fwidth=df), component=mp.Hz, center=mp.Vector3() + ) symmetries = [mp.Mirror(mp.Y, phase=-1), mp.Mirror(mp.X, phase=-1)] d1 = 0.2 - sim = mp.Simulation(cell_size=cell, - geometry=geometry, - sources=[sources], - symmetries=symmetries, - boundary_layers=[pml_layers], - resolution=resolution) + sim = mp.Simulation( + cell_size=cell, + geometry=geometry, + sources=[sources], + symmetries=symmetries, + boundary_layers=[pml_layers], + resolution=resolution, + ) nearfield = sim.add_near2far( - fcen, 0.1, nfreqs, - mp.Near2FarRegion(mp.Vector3(0, 0.5 * w + d1), - size=mp.Vector3(2 * dpml - sx)), - mp.Near2FarRegion(mp.Vector3(-0.5 * sx + dpml, 0.5 * w + 0.5 * d1), - size=mp.Vector3(0, d1), - weight=-1.0), - mp.Near2FarRegion(mp.Vector3(0.5 * sx - dpml, 0.5 * w + 0.5 * d1), - size=mp.Vector3(0, d1)), - decimation_factor=1 + fcen, + 0.1, + nfreqs, + mp.Near2FarRegion( + mp.Vector3(0, 0.5 * w + d1), size=mp.Vector3(2 * dpml - sx) + ), + mp.Near2FarRegion( + mp.Vector3(-0.5 * sx + dpml, 0.5 * w + 0.5 * d1), + size=mp.Vector3(0, d1), + weight=-1.0, + ), + mp.Near2FarRegion( + mp.Vector3(0.5 * sx - dpml, 0.5 * w + 0.5 * d1), size=mp.Vector3(0, d1) + ), + decimation_factor=1, ) sim.run(until=200) d2 = 20 h = 4 - vol = mp.Volume(mp.Vector3(0, (0.5 * w) + d2 + (0.5 * h)), size=mp.Vector3(sx - 2 * dpml, h)) + vol = mp.Volume( + mp.Vector3(0, (0.5 * w) + d2 + (0.5 * h)), size=mp.Vector3(sx - 2 * dpml, h) + ) result = sim.get_farfields(nearfield, resolution, where=vol) - fname = 'cavity-farfield.h5' if nfreqs == 1 else 'cavity-farfield-4-freqs.h5' + fname = "cavity-farfield.h5" if nfreqs == 1 else "cavity-farfield-4-freqs.h5" ref_file = os.path.join(self.data_dir, fname) - with h5py.File(ref_file, 'r') as f: + with h5py.File(ref_file, "r") as f: # Get reference data into memory - ref_ex = mp.complexarray(f['ex.r'][()], f['ex.i'][()]) - ref_ey = mp.complexarray(f['ey.r'][()], f['ey.i'][()]) - ref_ez = mp.complexarray(f['ez.r'][()], f['ez.i'][()]) - ref_hx = mp.complexarray(f['hx.r'][()], f['hx.i'][()]) - ref_hy = mp.complexarray(f['hy.r'][()], f['hy.i'][()]) - ref_hz = mp.complexarray(f['hz.r'][()], f['hz.i'][()]) + ref_ex = mp.complexarray(f["ex.r"][()], f["ex.i"][()]) + ref_ey = mp.complexarray(f["ey.r"][()], f["ey.i"][()]) + ref_ez = mp.complexarray(f["ez.r"][()], f["ez.i"][()]) + ref_hx = mp.complexarray(f["hx.r"][()], f["hx.i"][()]) + ref_hy = mp.complexarray(f["hy.r"][()], f["hy.i"][()]) + ref_hz = mp.complexarray(f["hz.r"][()], f["hz.i"][()]) tol = 1e-5 if mp.is_single_precision() else 1e-7 - self.assertClose(ref_ex, result['Ex'], epsilon=tol) - self.assertClose(ref_ey, result['Ey'], epsilon=tol) - self.assertClose(ref_ez, result['Ez'], epsilon=tol) - self.assertClose(ref_hx, result['Hx'], epsilon=tol) - self.assertClose(ref_hy, result['Hy'], epsilon=tol) - self.assertClose(ref_hz, result['Hz'], epsilon=tol) - + self.assertClose(ref_ex, result["Ex"], epsilon=tol) + self.assertClose(ref_ey, result["Ey"], epsilon=tol) + self.assertClose(ref_ez, result["Ez"], epsilon=tol) + self.assertClose(ref_hx, result["Hx"], epsilon=tol) + self.assertClose(ref_hy, result["Hy"], epsilon=tol) + self.assertClose(ref_hz, result["Hz"], epsilon=tol) def test_cavity_farfield(self): self.run_test(nfreqs=1) @@ -92,5 +110,5 @@ def test_cavity_farfield_four_freqs(self): self.run_test(nfreqs=4) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_chunk_balancer.py b/python/tests/test_chunk_balancer.py index 36a85f40c..4c25bd4f8 100644 --- a/python/tests/test_chunk_balancer.py +++ b/python/tests/test_chunk_balancer.py @@ -1,13 +1,12 @@ -import meep as mp -import numpy as np - -import parameterized import unittest import meep.binary_partition_utils as bpu - -from meep.timing_measurements import MeepTimingMeasurements, TIMING_MEASUREMENT_IDS +import numpy as np +import parameterized from meep.chunk_balancer import ChunkBalancer +from meep.timing_measurements import TIMING_MEASUREMENT_IDS, MeepTimingMeasurements + +import meep as mp class MockSimulation(mp.Simulation): @@ -30,17 +29,15 @@ def __init__(self, *args, **kwargs): def _structure_get_chunk_owners(self): # Hacky workaround to make this test work on single-core systems - proc_ids = [] - for leaf in bpu.enumerate_leaf_nodes(self.chunk_layout): - # it seems that grid volumes are enumerated - # in the same order as enumerate_leaf_nodes() - proc_ids.append(leaf.proc_id) + proc_ids = [ + leaf.proc_id for leaf in bpu.enumerate_leaf_nodes(self.chunk_layout) + ] + return np.array(proc_ids) def init_sim(self): super().init_sim() - setattr(self.structure, "get_chunk_owners", - self._structure_get_chunk_owners) + setattr(self.structure, "get_chunk_owners", self._structure_get_chunk_owners) def time_spent_on(self, time_sink: int): # We're going to pretend the amount of time spent is ~volume so that @@ -75,51 +72,49 @@ def time_spent_on(self, time_sink: int): TEST_SIM_1 = lambda: MockSimulation( cell_size=mp.Vector3(10.0, 5.0, 0), resolution=20, - chunk_layout=mp.BinaryPartition(data=[ - (mp.X, -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 4, 3]], 2] - ])) + chunk_layout=mp.BinaryPartition( + data=[(mp.X, -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 4, 3]], 2]] + ), +) TEST_SIM_2 = lambda: MockSimulation( cell_size=mp.Vector3(10.0, 5.0, 3.0), resolution=10, - chunk_layout=mp.BinaryPartition(data=[ - (mp.X, -2.0), 0, [(mp.Y, 1.0), [(mp.X, 3.0), 1, [(mp.Y, 0.5), 4, 3]], 2] - ])) + chunk_layout=mp.BinaryPartition( + data=[(mp.X, -2.0), 0, [(mp.Y, 1.0), [(mp.X, 3.0), 1, [(mp.Y, 0.5), 4, 3]], 2]] + ), +) TEST_SIM_3 = lambda: MockSimulation( cell_size=mp.Vector3(6.0, 4.0, 0), resolution=10, - chunk_layout=mp.BinaryPartition(data=[(mp.X, -2.0), 0, [(mp.X, 2.0), 1, 2]]) + chunk_layout=mp.BinaryPartition(data=[(mp.X, -2.0), 0, [(mp.X, 2.0), 1, 2]]), ) TEST_SIM_4 = lambda: MockSimulation( cell_size=mp.Vector3(6.0, 4.0, 0), resolution=10, chunk_layout=mp.BinaryPartition( - data=[(mp.X, -2.0), 0, - [(mp.X, -0.5), 1, [(mp.X, 1.0), 2, [(mp.X, 2.0), 3, 4]]]])) + data=[(mp.X, -2.0), 0, [(mp.X, -0.5), 1, [(mp.X, 1.0), 2, [(mp.X, 2.0), 3, 4]]]] + ), +) TEST_SIM_DUPLICATE_PROC_ID = lambda: MockSimulation( cell_size=mp.Vector3(10.0, 5.0, 0), resolution=10, - chunk_layout=mp.BinaryPartition(data=[ - (mp.X, -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 2, 1]], 2] - ])) + chunk_layout=mp.BinaryPartition( + data=[(mp.X, -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 2, 1]], 2]] + ), +) TEST_CHUNK_DATA_1 = { - "chunk_layout": - mp.BinaryPartition(data=[(mp.X, -2.5), 0, [(mp.X, 2.5), 1, 2]]), - "cell_size": - mp.Vector3(6.0, 4.0, 0), + "chunk_layout": mp.BinaryPartition(data=[(mp.X, -2.5), 0, [(mp.X, 2.5), 1, 2]]), + "cell_size": mp.Vector3(6.0, 4.0, 0), "time_stepping": [1.0, 1.0, 1.0], - "new_chunk_layout": - mp.BinaryPartition(data=[(mp.X, -2.5), 0, [(mp.X, 2.5), 1, 2]]), + "new_chunk_layout": mp.BinaryPartition(data=[(mp.X, -2.5), 0, [(mp.X, 2.5), 1, 2]]), } TEST_CHUNK_DATA_2 = { - "chunk_layout": - mp.BinaryPartition(data=[(mp.X, -2.5), 0, [(mp.X, 2.5), 1, 2]]), - "cell_size": - mp.Vector3(6.0, 4.0, 0), + "chunk_layout": mp.BinaryPartition(data=[(mp.X, -2.5), 0, [(mp.X, 2.5), 1, 2]]), + "cell_size": mp.Vector3(6.0, 4.0, 0), "time_stepping": [3.0 - 2.5, 2.5 + 2.5, 3.0 - 2.5], - "new_chunk_layout": - mp.BinaryPartition(data=[(mp.X, -1.0), 0, [(mp.X, 1.0), 1, 2]]), + "new_chunk_layout": mp.BinaryPartition(data=[(mp.X, -1.0), 0, [(mp.X, 1.0), 1, 2]]), } TEST_CHUNK_DATA_3 = { "chunk_layout": mp.BinaryPartition(data=[(mp.X, 2.0), 0, 1]), @@ -134,43 +129,40 @@ def time_spent_on(self, time_sink: int): "new_chunk_layout": mp.BinaryPartition(data=[(mp.X, 0.0), 0, 1]), } TEST_CHUNK_DATA_5 = { - "chunk_layout": - mp.BinaryPartition(data=[( - mp.X, - -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 4, 3]], 2]]), - "cell_size": - mp.Vector3(10.0, 5.0, 0), + "chunk_layout": mp.BinaryPartition( + data=[(mp.X, -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 4, 3]], 2]] + ), + "cell_size": mp.Vector3(10.0, 5.0, 0), "time_stepping": [1.0, 1.0, 1.0, 1.0, 1.0], - "new_chunk_layout": - mp.BinaryPartition(data=[( - mp.X, - -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 4, 3]], 2]]), + "new_chunk_layout": mp.BinaryPartition( + data=[(mp.X, -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 4, 3]], 2]] + ), } TEST_CHUNK_DATA_6 = { - "chunk_layout": - mp.BinaryPartition(data=[( - mp.X, - -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 4, 3]], 2]]), - "cell_size": - mp.Vector3(10.0, 5.0, 0), + "chunk_layout": mp.BinaryPartition( + data=[(mp.X, -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 4, 3]], 2]] + ), + "cell_size": mp.Vector3(10.0, 5.0, 0), "time_stepping": [1500.0, 2400.0, 700.0, 100.0, 300.0], - "new_chunk_layout": - mp.BinaryPartition( - data=[(mp.X, -3.0), 0, - [(mp.Y, 1.25 - ), [(mp.X, -0.3333333333333335), 1, [(mp.Y, - -0.625), 4, 3]], 2]]), + "new_chunk_layout": mp.BinaryPartition( + data=[ + (mp.X, -3.0), + 0, + [(mp.Y, 1.25), [(mp.X, -0.3333333333333335), 1, [(mp.Y, -0.625), 4, 3]], 2], + ] + ), } class MockSimulationTest(unittest.TestCase): - - @parameterized.parameterized.expand([ - (TEST_SIM_1, [6000.0, 9600.0, 2800.0, 400.0, 1200.0]), - (TEST_SIM_2, [45000.0, 52500.0, 31500.0, 3000.0, 18000.0]), - (TEST_SIM_3, [400.0, 1600.0, 400.0]), - (TEST_SIM_4, [400.0, 600.0, 600.0, 400.0, 400.0]), - ]) + @parameterized.parameterized.expand( + [ + (TEST_SIM_1, [6000.0, 9600.0, 2800.0, 400.0, 1200.0]), + (TEST_SIM_2, [45000.0, 52500.0, 31500.0, 3000.0, 18000.0]), + (TEST_SIM_3, [400.0, 1600.0, 400.0]), + (TEST_SIM_4, [400.0, 600.0, 600.0, 400.0, 400.0]), + ] + ) def test_time_spent_on(self, test_sim_constructor, expected_stepping_times): test_sim = test_sim_constructor() test_sim.init_sim() @@ -178,20 +170,25 @@ def test_time_spent_on(self, test_sim_constructor, expected_stepping_times): for time_sink in TIMING_MEASUREMENT_IDS.values(): if time_sink == TIMING_MEASUREMENT_IDS["time_stepping"]: self.assertListEqual( - list(test_sim.time_spent_on(time_sink)), expected_stepping_times) + list(test_sim.time_spent_on(time_sink)), expected_stepping_times + ) else: self.assertListEqual( list(test_sim.time_spent_on(time_sink)), - [0.0] * len(expected_stepping_times)) - - @parameterized.parameterized.expand([ - (TEST_SIM_1, [0, 1, 4, 3, 2]), - (TEST_SIM_2, [0, 1, 4, 3, 2]), - (TEST_SIM_3, [0, 1, 2]), - (TEST_SIM_4, [0, 1, 2, 3, 4]), - ]) - def test_structure_get_chunk_owners(self, test_sim_constructor, - expected_chunk_owners): + [0.0] * len(expected_stepping_times), + ) + + @parameterized.parameterized.expand( + [ + (TEST_SIM_1, [0, 1, 4, 3, 2]), + (TEST_SIM_2, [0, 1, 4, 3, 2]), + (TEST_SIM_3, [0, 1, 2]), + (TEST_SIM_4, [0, 1, 2, 3, 4]), + ] + ) + def test_structure_get_chunk_owners( + self, test_sim_constructor, expected_chunk_owners + ): test_sim = test_sim_constructor() test_sim.init_sim() @@ -201,11 +198,12 @@ def test_structure_get_chunk_owners(self, test_sim_constructor, class ChunkBalancerTest(unittest.TestCase): - - @parameterized.parameterized.expand([ - (TEST_SIM_1, False), - (TEST_SIM_DUPLICATE_PROC_ID, True), - ]) + @parameterized.parameterized.expand( + [ + (TEST_SIM_1, False), + (TEST_SIM_DUPLICATE_PROC_ID, True), + ] + ) def test_validate_sim(self, test_sim_constructor, should_raise_exception): test_sim = test_sim_constructor() test_sim.init_sim() @@ -218,31 +216,33 @@ def test_validate_sim(self, test_sim_constructor, should_raise_exception): else: chunk_balancer._validate_sim(test_sim) - @parameterized.parameterized.expand([ - (TEST_SIM_1,), - (TEST_SIM_2,), - (TEST_SIM_3,), - (TEST_SIM_4,), - ]) + @parameterized.parameterized.expand( + [ + (TEST_SIM_1,), + (TEST_SIM_2,), + (TEST_SIM_3,), + (TEST_SIM_4,), + ] + ) def test_chunk_layout_improvement(self, test_sim_constructor): """Tests that chunk_balancer improves balance after 1 iteration.""" test_sim = test_sim_constructor() test_sim.init_sim() old_timing_measurements = MeepTimingMeasurements.new_from_simulation( - test_sim, -1) + test_sim, -1 + ) chunk_balancer = ChunkBalancer() chunk_balancer.adjust_chunk_layout(test_sim, sensitivity=1.0) new_timing_measurements = MeepTimingMeasurements.new_from_simulation( - test_sim, -1) + test_sim, -1 + ) - old_step_times = np.array( - old_timing_measurements.measurements["time_stepping"]) - new_step_times = np.array( - new_timing_measurements.measurements["time_stepping"]) + old_step_times = np.array(old_timing_measurements.measurements["time_stepping"]) + new_step_times = np.array(new_timing_measurements.measurements["time_stepping"]) old_max_time = np.max(old_step_times) new_max_time = np.max(new_step_times) @@ -253,12 +253,14 @@ def test_chunk_layout_improvement(self, test_sim_constructor): self.assertLess(new_max_time, old_max_time) self.assertGreater(new_min_time, old_min_time) - @parameterized.parameterized.expand([ - (TEST_SIM_1,), - (TEST_SIM_2,), - (TEST_SIM_3,), - (TEST_SIM_4,), - ]) + @parameterized.parameterized.expand( + [ + (TEST_SIM_1,), + (TEST_SIM_2,), + (TEST_SIM_3,), + (TEST_SIM_4,), + ] + ) def test_chunk_layout_convergence(self, test_sim_constructor): """Tests that chunk_balancer converges to load balanced state.""" test_sim = test_sim_constructor() @@ -272,31 +274,35 @@ def test_chunk_layout_convergence(self, test_sim_constructor): chunk_balancer.adjust_chunk_layout(test_sim, sensitivity=0.5) new_timing_measurements = MeepTimingMeasurements.new_from_simulation( - test_sim, -1) + test_sim, -1 + ) new_step_times = np.array( - new_timing_measurements.measurements["time_stepping"]) + new_timing_measurements.measurements["time_stepping"] + ) # Check that new stepping times have converged to close to the mean value tolerance = 0.05 mean_step_time = np.mean(new_step_times) - self.assertTrue( - np.allclose(mean_step_time, new_step_times, rtol=tolerance)) - - @parameterized.parameterized.expand([ - (TEST_CHUNK_DATA_1,), - (TEST_CHUNK_DATA_2,), - (TEST_CHUNK_DATA_3,), - (TEST_CHUNK_DATA_4,), - (TEST_CHUNK_DATA_5,), - (TEST_CHUNK_DATA_6,), - ]) + self.assertTrue(np.allclose(mean_step_time, new_step_times, rtol=tolerance)) + + @parameterized.parameterized.expand( + [ + (TEST_CHUNK_DATA_1,), + (TEST_CHUNK_DATA_2,), + (TEST_CHUNK_DATA_3,), + (TEST_CHUNK_DATA_4,), + (TEST_CHUNK_DATA_5,), + (TEST_CHUNK_DATA_6,), + ] + ) def test_split_pos_adjustment(self, test_chunk_data): chunk_layout = test_chunk_data["chunk_layout"] sim = MockSimulation( cell_size=test_chunk_data["cell_size"], resolution=10, - chunk_layout=chunk_layout) + chunk_layout=chunk_layout, + ) sim.init_sim() chunk_volumes = sim.structure.get_chunk_volumes() chunk_owners = sim.structure.get_chunk_owners() @@ -310,20 +316,23 @@ def test_split_pos_adjustment(self, test_chunk_data): measurements[name] = test_chunk_data["time_stepping"] else: measurements[name] = [0] * num_procs - timing_measurements = MeepTimingMeasurements(measurements, -1, None, None, - None, None, None) + timing_measurements = MeepTimingMeasurements( + measurements, -1, None, None, None, None, None + ) new_chunk_layout = chunk_balancer.compute_new_chunk_layout( timing_measurements, chunk_layout, chunk_volumes, chunk_owners, - sensitivity=1.0) + sensitivity=1.0, + ) expected_chunk_layout = test_chunk_data["new_chunk_layout"] self.assertTrue( - bpu.partitions_are_equal(new_chunk_layout, expected_chunk_layout)) + bpu.partitions_are_equal(new_chunk_layout, expected_chunk_layout) + ) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_chunk_layout.py b/python/tests/test_chunk_layout.py index 91a8082f1..b437025bf 100644 --- a/python/tests/test_chunk_layout.py +++ b/python/tests/test_chunk_layout.py @@ -1,40 +1,41 @@ -import meep as mp import copy import unittest +import meep as mp + -def traverse_tree(bp=None,min_corner=None,max_corner=None): +def traverse_tree(bp=None, min_corner=None, max_corner=None): process_ids = [] chunk_areas = [] - def _traverse_tree(bp=None,min_corner=None,max_corner=None): - if ((min_corner.x > max_corner.x) or (min_corner.y > max_corner.y)): + def _traverse_tree(bp=None, min_corner=None, max_corner=None): + if (min_corner.x > max_corner.x) or (min_corner.y > max_corner.y): raise RuntimeError("min_corner/max_corner have been incorrectly defined.") ## reached a leaf - if (bp.left is None and bp.right is None): + if bp.left is None and bp.right is None: process_ids.append(bp.proc_id) - chunk_area = (max_corner.x-min_corner.x)*(max_corner.y-min_corner.y) + chunk_area = (max_corner.x - min_corner.x) * (max_corner.y - min_corner.y) chunk_areas.append(chunk_area) ## traverse the left branch - if (bp.left is not None): + if bp.left is not None: new_max_corner = copy.deepcopy(max_corner) if bp.split_dir == mp.X: new_max_corner.x = bp.split_pos else: new_max_corner.y = bp.split_pos - _traverse_tree(bp.left,min_corner,new_max_corner) + _traverse_tree(bp.left, min_corner, new_max_corner) ## traverse the right branch - if (bp.right is not None): + if bp.right is not None: new_min_corner = copy.deepcopy(min_corner) if bp.split_dir == mp.X: new_min_corner.x = bp.split_pos else: new_min_corner.y = bp.split_pos - _traverse_tree(bp.right,new_min_corner,max_corner) + _traverse_tree(bp.right, new_min_corner, max_corner) _traverse_tree(bp=bp, min_corner=min_corner, max_corner=max_corner) @@ -42,40 +43,57 @@ def _traverse_tree(bp=None,min_corner=None,max_corner=None): class TestChunkLayoutBinaryPartition(unittest.TestCase): - def test_chunk_layout_binary_partition(self): - chunk_layout = mp.BinaryPartition(data=[ (mp.X,-2.0), 0, [ (mp.Y,1.5), [ (mp.X,3.0), 1, [ (mp.Y,-0.5), 4, 3 ] ], 2 ] ]) + chunk_layout = mp.BinaryPartition( + data=[ + (mp.X, -2.0), + 0, + [(mp.Y, 1.5), [(mp.X, 3.0), 1, [(mp.Y, -0.5), 4, 3]], 2], + ] + ) - cell_size = mp.Vector3(10.0,5.0,0) + cell_size = mp.Vector3(10.0, 5.0, 0) - sim = mp.Simulation(cell_size=cell_size, - resolution=10, - chunk_layout=chunk_layout) + sim = mp.Simulation( + cell_size=cell_size, resolution=10, chunk_layout=chunk_layout + ) sim.init_sim() owners = sim.structure.get_chunk_owners() - areas = [ v.surroundings().full_volume() for v in sim.structure.get_chunk_volumes() ] + areas = [ + v.surroundings().full_volume() for v in sim.structure.get_chunk_volumes() + ] - process_ids, chunk_areas = traverse_tree(chunk_layout,-0.5*cell_size,0.5*cell_size) + process_ids, chunk_areas = traverse_tree( + chunk_layout, -0.5 * cell_size, 0.5 * cell_size + ) - self.assertListEqual([int(f) for f in owners],[f % mp.count_processors() for f in process_ids]) - self.assertListEqual(areas,chunk_areas) + self.assertListEqual( + [int(f) for f in owners], [f % mp.count_processors() for f in process_ids] + ) + self.assertListEqual(areas, chunk_areas) def test_meep_default_chunk_layout(self): - cell_size = mp.Vector3(10.0,5.0,0) - sim = mp.Simulation(cell_size=cell_size, - resolution=10) + cell_size = mp.Vector3(10.0, 5.0, 0) + sim = mp.Simulation(cell_size=cell_size, resolution=10) sim.init_sim() owners = sim.structure.get_chunk_owners() - areas = [ v.surroundings().full_volume() for v in sim.structure.get_chunk_volumes() ] + areas = [ + v.surroundings().full_volume() for v in sim.structure.get_chunk_volumes() + ] chunk_layout = sim.chunk_layout - process_ids, chunk_areas = traverse_tree(chunk_layout,-0.5*cell_size,0.5*cell_size) + process_ids, chunk_areas = traverse_tree( + chunk_layout, -0.5 * cell_size, 0.5 * cell_size + ) + + self.assertListEqual( + [int(f) for f in owners], [f % mp.count_processors() for f in process_ids] + ) + self.assertListEqual(areas, chunk_areas) - self.assertListEqual([int(f) for f in owners],[f % mp.count_processors() for f in process_ids]) - self.assertListEqual(areas,chunk_areas) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_chunks.py b/python/tests/test_chunks.py index 2af803b07..a8cdd61ce 100644 --- a/python/tests/test_chunks.py +++ b/python/tests/test_chunks.py @@ -1,9 +1,9 @@ -import meep as mp import unittest +import meep as mp -class TestChunks(unittest.TestCase): +class TestChunks(unittest.TestCase): @classmethod def setUpClass(cls): cls.temp_dir = mp.make_output_directory() @@ -17,7 +17,7 @@ def test_chunks(self): cell = mp.Vector3(sxy, sxy, 0) fcen = 1.0 # pulse center frequency - df = 0.1 # pulse width (in frequency) + df = 0.1 # pulse width (in frequency) sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), mp.Ez, mp.Vector3())] @@ -25,51 +25,87 @@ def test_chunks(self): pml_layers = [mp.PML(dpml)] resolution = 10 - sim = mp.Simulation(cell_size=cell, - boundary_layers=pml_layers, - sources=sources, - resolution=resolution, - split_chunks_evenly=False) + sim = mp.Simulation( + cell_size=cell, + boundary_layers=pml_layers, + sources=sources, + resolution=resolution, + split_chunks_evenly=False, + ) sim.use_output_directory(self.temp_dir) - top = mp.FluxRegion(center=mp.Vector3(0,+0.5*sxy-dpml), size=mp.Vector3(sxy-2*dpml,0), weight=+1.0) - bot = mp.FluxRegion(center=mp.Vector3(0,-0.5*sxy+dpml), size=mp.Vector3(sxy-2*dpml,0), weight=-1.0) - rgt = mp.FluxRegion(center=mp.Vector3(+0.5*sxy-dpml,0), size=mp.Vector3(0,sxy-2*dpml), weight=+1.0) - lft = mp.FluxRegion(center=mp.Vector3(-0.5*sxy+dpml,0), size=mp.Vector3(0,sxy-2*dpml), weight=-1.0) + top = mp.FluxRegion( + center=mp.Vector3(0, +0.5 * sxy - dpml), + size=mp.Vector3(sxy - 2 * dpml, 0), + weight=+1.0, + ) + bot = mp.FluxRegion( + center=mp.Vector3(0, -0.5 * sxy + dpml), + size=mp.Vector3(sxy - 2 * dpml, 0), + weight=-1.0, + ) + rgt = mp.FluxRegion( + center=mp.Vector3(+0.5 * sxy - dpml, 0), + size=mp.Vector3(0, sxy - 2 * dpml), + weight=+1.0, + ) + lft = mp.FluxRegion( + center=mp.Vector3(-0.5 * sxy + dpml, 0), + size=mp.Vector3(0, sxy - 2 * dpml), + weight=-1.0, + ) tot_flux = sim.add_flux(fcen, 0, 1, top, bot, rgt, lft, decimation_factor=1) - sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mp.Vector3(), 1e-5)) + sim.run( + until_after_sources=mp.stop_when_fields_decayed( + 50, mp.Ez, mp.Vector3(), 1e-5 + ) + ) - sim.save_flux('tot_flux', tot_flux) + sim.save_flux("tot_flux", tot_flux) sim1 = sim - geometry = [mp.Block(center=mp.Vector3(), - size=mp.Vector3(sxy, sxy, mp.inf), - material=mp.Medium(index=3.5)), - mp.Block(center=mp.Vector3(), - size=mp.Vector3(sxy-2*dpml, sxy-2*dpml, mp.inf), - material=mp.air)] - - sim = mp.Simulation(cell_size=cell, - geometry=geometry, - boundary_layers=pml_layers, - sources=sources, - resolution=resolution, - chunk_layout=sim1) + geometry = [ + mp.Block( + center=mp.Vector3(), + size=mp.Vector3(sxy, sxy, mp.inf), + material=mp.Medium(index=3.5), + ), + mp.Block( + center=mp.Vector3(), + size=mp.Vector3(sxy - 2 * dpml, sxy - 2 * dpml, mp.inf), + material=mp.air, + ), + ] + + sim = mp.Simulation( + cell_size=cell, + geometry=geometry, + boundary_layers=pml_layers, + sources=sources, + resolution=resolution, + chunk_layout=sim1, + ) sim.use_output_directory(self.temp_dir) tot_flux = sim.add_flux(fcen, 0, 1, top, bot, rgt, lft, decimation_factor=1) - sim.load_minus_flux('tot_flux', tot_flux) + sim.load_minus_flux("tot_flux", tot_flux) - sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mp.Vector3(), 1e-5)) + sim.run( + until_after_sources=mp.stop_when_fields_decayed( + 50, mp.Ez, mp.Vector3(), 1e-5 + ) + ) places = 3 if mp.is_single_precision() else 7 - self.assertAlmostEqual(86.90826609300862, mp.get_fluxes(tot_flux)[0], places=places) + self.assertAlmostEqual( + 86.90826609300862, mp.get_fluxes(tot_flux)[0], places=places + ) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_conductivity.py b/python/tests/test_conductivity.py index 2aa9a7616..f5018eefc 100644 --- a/python/tests/test_conductivity.py +++ b/python/tests/test_conductivity.py @@ -1,11 +1,13 @@ import unittest + import numpy as np + import meep as mp dB_cm_to_dB_um = 1e-4 -class TestConductivity(unittest.TestCase): +class TestConductivity(unittest.TestCase): def wvg_flux(self, res, att_coeff): """ Computes the Poynting flux in a single-mode waveguide at two @@ -14,87 +16,105 @@ def wvg_flux(self, res, att_coeff): coefficient att_coeff (dB/cm). """ - cell_size = mp.Vector3(14.,14.) + cell_size = mp.Vector3(14.0, 14.0) - pml_layers = [mp.PML(thickness=2.)] + pml_layers = [mp.PML(thickness=2.0)] - w = 1. # width of waveguide + w = 1.0 # width of waveguide - fsrc = 0.15 # frequency (in vacuum) + fsrc = 0.15 # frequency (in vacuum) # note: MPB can only compute modes of lossless material systems. # The imaginary part of ε is ignored and the launched # waveguide mode is therefore inaccurate. For small values # of imag(ε) (which is proportional to att_coeff), this # inaccuracy tends to be insignificant. - sources = [mp.EigenModeSource(src=mp.GaussianSource(fsrc,fwidth=0.2*fsrc), - center=mp.Vector3(-5.), - size=mp.Vector3(y=10.), - eig_parity=mp.EVEN_Y+mp.ODD_Z)] + sources = [ + mp.EigenModeSource( + src=mp.GaussianSource(fsrc, fwidth=0.2 * fsrc), + center=mp.Vector3(-5.0), + size=mp.Vector3(y=10.0), + eig_parity=mp.EVEN_Y + mp.ODD_Z, + ) + ] # ref: https://en.wikipedia.org/wiki/Mathematical_descriptions_of_opacity # Note that this is the loss of a planewave, which is only approximately # the loss of a waveguide mode. In principle, we could compute the latter # semi-analytically if we wanted to run this unit test to greater accuracy # (e.g. to test convergence with resolution). - n_eff = np.sqrt(12.) + 1j * (1/fsrc) * (dB_cm_to_dB_um * att_coeff) / (4 * np.pi) + n_eff = np.sqrt(12.0) + 1j * (1 / fsrc) * (dB_cm_to_dB_um * att_coeff) / ( + 4 * np.pi + ) eps_eff = n_eff * n_eff # ref: https://meep.readthedocs.io/en/latest/Materials/#conductivity-and-complex sigma_D = 2 * np.pi * fsrc * np.imag(eps_eff) / np.real(eps_eff) - geometry = [mp.Block(center=mp.Vector3(), - size=mp.Vector3(mp.inf,w,mp.inf), - material=mp.Medium(epsilon=np.real(eps_eff), - D_conductivity=sigma_D))] - - sim = mp.Simulation(cell_size=cell_size, - resolution=res, - boundary_layers=pml_layers, - sources=sources, - geometry=geometry, - symmetries=[mp.Mirror(mp.Y)]) - - tran1 = sim.add_flux(fsrc, - 0, - 1, - mp.FluxRegion(center=mp.Vector3(x=0.), size=mp.Vector3(y=10.))) - - tran2 = sim.add_flux(fsrc, - 0, - 1, - mp.FluxRegion(center=mp.Vector3(x=5.), size=mp.Vector3(y=10.))) + geometry = [ + mp.Block( + center=mp.Vector3(), + size=mp.Vector3(mp.inf, w, mp.inf), + material=mp.Medium(epsilon=np.real(eps_eff), D_conductivity=sigma_D), + ) + ] + + sim = mp.Simulation( + cell_size=cell_size, + resolution=res, + boundary_layers=pml_layers, + sources=sources, + geometry=geometry, + symmetries=[mp.Mirror(mp.Y)], + ) + + tran1 = sim.add_flux( + fsrc, 0, 1, mp.FluxRegion(center=mp.Vector3(x=0.0), size=mp.Vector3(y=10.0)) + ) + + tran2 = sim.add_flux( + fsrc, 0, 1, mp.FluxRegion(center=mp.Vector3(x=5.0), size=mp.Vector3(y=10.0)) + ) sim.run(until_after_sources=20) return mp.get_fluxes(tran1)[0], mp.get_fluxes(tran2)[0] - def test_conductivity(self): - res = 25. # pixels/μm + res = 25.0 # pixels/μm # compute the incident flux for a lossless waveguide - incident_flux1, incident_flux2 = self.wvg_flux(res, 0.) - self.assertAlmostEqual(incident_flux1/incident_flux2, 1., places=2) - print("incident_flux:, {} (measured), 1.0 (expected)".format(incident_flux2/incident_flux1)) + incident_flux1, incident_flux2 = self.wvg_flux(res, 0.0) + self.assertAlmostEqual(incident_flux1 / incident_flux2, 1.0, places=2) + print( + f"incident_flux:, {incident_flux2 / incident_flux1} (measured), 1.0 (expected)" + ) # compute the flux for a lossy waveguide - att_coeff = 37.46 # dB/cm + att_coeff = 37.46 # dB/cm attenuated_flux1, attenuated_flux2 = self.wvg_flux(res, att_coeff) - L1 = 5. + L1 = 5.0 expected_att1 = np.exp(-att_coeff * dB_cm_to_dB_um * L1) - self.assertAlmostEqual(attenuated_flux1/incident_flux2, expected_att1, places=2) - print("flux:, {}, {:.6f} (measured), {:.6f} (expected)".format(L1, - attenuated_flux1/incident_flux2, - expected_att1)) - - L2 = 10. + self.assertAlmostEqual( + attenuated_flux1 / incident_flux2, expected_att1, places=2 + ) + print( + "flux:, {}, {:.6f} (measured), {:.6f} (expected)".format( + L1, attenuated_flux1 / incident_flux2, expected_att1 + ) + ) + + L2 = 10.0 expected_att2 = np.exp(-att_coeff * dB_cm_to_dB_um * L2) - self.assertAlmostEqual(attenuated_flux2/incident_flux2, expected_att2, places=2) - print("flux:, {}, {:.6f} (measured), {:.6f} (expected)".format(L2, - attenuated_flux2/incident_flux2, - expected_att2)) + self.assertAlmostEqual( + attenuated_flux2 / incident_flux2, expected_att2, places=2 + ) + print( + "flux:, {}, {:.6f} (measured), {:.6f} (expected)".format( + L2, attenuated_flux2 / incident_flux2, expected_att2 + ) + ) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_cyl_ellipsoid.py b/python/tests/test_cyl_ellipsoid.py index 330cfb8da..18e6209a4 100644 --- a/python/tests/test_cyl_ellipsoid.py +++ b/python/tests/test_cyl_ellipsoid.py @@ -1,9 +1,12 @@ import unittest + import meep as mp + def dummy_eps(vec): return 1.0 + class TestCylEllipsoid(unittest.TestCase): ref_Ez = -8.29555720049629e-5 @@ -22,9 +25,11 @@ def init(self): c = mp.Cylinder(radius=3, material=mp.Medium(index=3.5)) e = mp.Ellipsoid(size=mp.Vector3(1, 2, mp.inf)) - sources = mp.Source(src=mp.GaussianSource(1, fwidth=0.1), - component=self.src_cmpt, - center=mp.Vector3()) + sources = mp.Source( + src=mp.GaussianSource(1, fwidth=0.1), + component=self.src_cmpt, + center=mp.Vector3(), + ) if self.src_cmpt == mp.Ez: symmetries = [mp.Mirror(mp.X), mp.Mirror(mp.Y)] @@ -32,28 +37,33 @@ def init(self): if self.src_cmpt == mp.Hz: symmetries = [mp.Mirror(mp.X, -1), mp.Mirror(mp.Y, -1)] - self.sim = mp.Simulation(cell_size=mp.Vector3(10, 10), - geometry=[c, e], - boundary_layers=[mp.PML(1.0)], - sources=[sources], - symmetries=symmetries, - resolution=100) + self.sim = mp.Simulation( + cell_size=mp.Vector3(10, 10), + geometry=[c, e], + boundary_layers=[mp.PML(1.0)], + sources=[sources], + symmetries=symmetries, + resolution=100, + ) self.sim.use_output_directory(self.temp_dir) def print_stuff(sim_obj): v = mp.Vector3(4.13, 3.75, 0) p = self.sim.get_field_point(self.src_cmpt, v) - print("t, Ez: {} {}+{}i".format(self.sim.round_time(), p.real, p.imag)) + print(f"t, Ez: {self.sim.round_time()} {p.real}+{p.imag}i") + self.print_stuff = print_stuff def run_simulation(self): - self.sim.run(mp.at_beginning(mp.output_epsilon), - mp.at_every(0.25, self.print_stuff), - mp.at_end(self.print_stuff), - mp.at_end(mp.output_efield_z), - until=23) + self.sim.run( + mp.at_beginning(mp.output_epsilon), + mp.at_every(0.25, self.print_stuff), + mp.at_end(self.print_stuff), + mp.at_end(mp.output_efield_z), + until=23, + ) ref_out_field = self.ref_Ez if self.src_cmpt == mp.Ez else self.ref_Hz out_field = self.sim.fields.get_field(self.src_cmpt, mp.vec(4.13, 3.75)).real @@ -74,5 +84,5 @@ def test_hz_field(self): self.run_simulation() -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_dft_energy.py b/python/tests/test_dft_energy.py index db43946ea..8577c5f52 100644 --- a/python/tests/test_dft_energy.py +++ b/python/tests/test_dft_energy.py @@ -1,4 +1,5 @@ import unittest + import meep as mp # compute group velocity of a waveguide mode using two different methods @@ -7,33 +8,60 @@ class TestDftEnergy(unittest.TestCase): - def test_dft_energy(self): resolution = 20 cell = mp.Vector3(10, 5) - geom = [mp.Block(size=mp.Vector3(mp.inf, 1, mp.inf), material=mp.Medium(epsilon=12))] + geom = [ + mp.Block(size=mp.Vector3(mp.inf, 1, mp.inf), material=mp.Medium(epsilon=12)) + ] pml = [mp.PML(1)] - fsrc = 0.15 - sources = [mp.EigenModeSource(src=mp.GaussianSource(frequency=fsrc, fwidth=0.2*fsrc), - center=mp.Vector3(-3), size=mp.Vector3(y=5), - eig_band=1, eig_parity=mp.ODD_Z+mp.EVEN_Y, - eig_match_freq=True)] - - sim = mp.Simulation(resolution=resolution, cell_size=cell, geometry=geom, - boundary_layers=pml, sources=sources, symmetries=[mp.Mirror(direction=mp.Y)]) - - flux = sim.add_flux(fsrc, 0, 1, mp.FluxRegion(center=mp.Vector3(3), size=mp.Vector3(y=5)), - decimation_factor=1) - energy = sim.add_energy(fsrc, 0, 1, mp.EnergyRegion(center=mp.Vector3(3), size=mp.Vector3(y=5)), - decimation_factor=1) - energy_decimated = sim.add_energy(fsrc, 0, 1, - mp.EnergyRegion(center=mp.Vector3(3), size=mp.Vector3(y=5)), - decimation_factor=10) + fsrc = 0.15 + sources = [ + mp.EigenModeSource( + src=mp.GaussianSource(frequency=fsrc, fwidth=0.2 * fsrc), + center=mp.Vector3(-3), + size=mp.Vector3(y=5), + eig_band=1, + eig_parity=mp.ODD_Z + mp.EVEN_Y, + eig_match_freq=True, + ) + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell, + geometry=geom, + boundary_layers=pml, + sources=sources, + symmetries=[mp.Mirror(direction=mp.Y)], + ) + + flux = sim.add_flux( + fsrc, + 0, + 1, + mp.FluxRegion(center=mp.Vector3(3), size=mp.Vector3(y=5)), + decimation_factor=1, + ) + energy = sim.add_energy( + fsrc, + 0, + 1, + mp.EnergyRegion(center=mp.Vector3(3), size=mp.Vector3(y=5)), + decimation_factor=1, + ) + energy_decimated = sim.add_energy( + fsrc, + 0, + 1, + mp.EnergyRegion(center=mp.Vector3(3), size=mp.Vector3(y=5)), + decimation_factor=10, + ) sim.run(until_after_sources=100) - res = sim.get_eigenmode_coefficients(flux, [1], eig_parity=mp.ODD_Z+mp.EVEN_Y) + res = sim.get_eigenmode_coefficients(flux, [1], eig_parity=mp.ODD_Z + mp.EVEN_Y) mode_vg = res.vgrp[0] - poynting_flux = mp.get_fluxes(flux)[0] + poynting_flux = mp.get_fluxes(flux)[0] e_energy = mp.get_electric_energy(energy)[0] ratio_vg = (0.5 * poynting_flux) / e_energy m_energy = mp.get_magnetic_energy(energy)[0] @@ -48,5 +76,5 @@ def test_dft_energy(self): self.assertAlmostEqual(m_energy, m_energy_decimated, places=1) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_dft_fields.py b/python/tests/test_dft_fields.py index 3b190adbe..30de0f038 100644 --- a/python/tests/test_dft_fields.py +++ b/python/tests/test_dft_fields.py @@ -1,12 +1,14 @@ +import os import unittest + import h5py import numpy as np -import meep as mp from utils import ApproxComparisonTestCase -import os -class TestDFTFields(ApproxComparisonTestCase): +import meep as mp + +class TestDFTFields(ApproxComparisonTestCase): @classmethod def setUpClass(cls): cls.temp_dir = mp.make_output_directory() @@ -27,9 +29,10 @@ def init(self): pml_layers = [mp.PML(self.dpml)] geometry = [ - mp.Cylinder(r + w, material=mp.Medium(epsilon=n * n)), + mp.Cylinder(r + w, material=mp.Medium(epsilon=n**2)), mp.Cylinder(r, material=mp.vacuum), ] + self.fcen = 0.118 self.df = 0.1 @@ -43,6 +46,7 @@ def init(self): sources=sources, boundary_layers=pml_layers, ) + def test_use_centered_grid(self): sim = self.init() sim.init_sim() @@ -53,14 +57,20 @@ def test_get_dft_array(self): sim = self.init() sim.init_sim() dft_fields = sim.add_dft_fields([mp.Ez], self.fcen, 0, 1) - fr = mp.FluxRegion(mp.Vector3(), size=mp.Vector3(self.sxy, self.sxy), direction=mp.X) + fr = mp.FluxRegion( + mp.Vector3(), size=mp.Vector3(self.sxy, self.sxy), direction=mp.X + ) dft_flux = sim.add_flux(self.fcen, 0, 1, fr) # volumes with zero thickness in x and y directions to test collapsing # of empty dimensions in DFT array and HDF5 output routines - thin_x_volume = mp.Volume(center=mp.Vector3(0.35*self.sxy), size=mp.Vector3(y=0.8*self.sxy)) + thin_x_volume = mp.Volume( + center=mp.Vector3(0.35 * self.sxy), size=mp.Vector3(y=0.8 * self.sxy) + ) thin_x_flux = sim.add_dft_fields([mp.Ez], self.fcen, 0, 1, where=thin_x_volume) - thin_y_volume = mp.Volume(center=mp.Vector3(y=0.25*self.sxy), size=mp.Vector3(x=self.sxy)) + thin_y_volume = mp.Volume( + center=mp.Vector3(y=0.25 * self.sxy), size=mp.Vector3(x=self.sxy) + ) thin_y_flux = sim.add_flux(self.fcen, 0, 1, mp.FluxRegion(volume=thin_y_volume)) sim.run(until_after_sources=100) @@ -71,14 +81,14 @@ def test_get_dft_array(self): np.testing.assert_equal(thin_x_array.ndim, 1) np.testing.assert_equal(thin_y_array.ndim, 1) - sim.output_dft(thin_x_flux, os.path.join(self.temp_dir, 'thin-x-flux')) - sim.output_dft(thin_y_flux, os.path.join(self.temp_dir, 'thin-y-flux')) + sim.output_dft(thin_x_flux, os.path.join(self.temp_dir, "thin-x-flux")) + sim.output_dft(thin_y_flux, os.path.join(self.temp_dir, "thin-y-flux")) - with h5py.File(os.path.join(self.temp_dir, 'thin-x-flux.h5'), 'r') as thin_x: - thin_x_h5 = mp.complexarray(thin_x['ez_0.r'][()], thin_x['ez_0.i'][()]) + with h5py.File(os.path.join(self.temp_dir, "thin-x-flux.h5"), "r") as thin_x: + thin_x_h5 = mp.complexarray(thin_x["ez_0.r"][()], thin_x["ez_0.i"][()]) - with h5py.File(os.path.join(self.temp_dir, 'thin-y-flux.h5'), 'r') as thin_y: - thin_y_h5 = mp.complexarray(thin_y['ez_0.r'][()], thin_y['ez_0.i'][()]) + with h5py.File(os.path.join(self.temp_dir, "thin-y-flux.h5"), "r") as thin_y: + thin_y_h5 = mp.complexarray(thin_y["ez_0.r"][()], thin_y["ez_0.i"][()]) tol = 1e-6 self.assertClose(thin_x_array, thin_x_h5, epsilon=tol) @@ -88,12 +98,14 @@ def test_get_dft_array(self): fields_arr = sim.get_dft_array(dft_fields, mp.Ez, 0) flux_arr = sim.get_dft_array(dft_flux, mp.Ez, 0) - sim.output_dft(dft_fields, os.path.join(self.temp_dir, 'dft-fields')) - sim.output_dft(dft_flux, os.path.join(self.temp_dir, 'dft-flux')) + sim.output_dft(dft_fields, os.path.join(self.temp_dir, "dft-fields")) + sim.output_dft(dft_flux, os.path.join(self.temp_dir, "dft-flux")) - with h5py.File(os.path.join(self.temp_dir, 'dft-fields.h5'), 'r') as fields, h5py.File(os.path.join(self.temp_dir, 'dft-flux.h5'), 'r') as flux: - exp_fields = mp.complexarray(fields['ez_0.r'][()], fields['ez_0.i'][()]) - exp_flux = mp.complexarray(flux['ez_0.r'][()], flux['ez_0.i'][()]) + with h5py.File( + os.path.join(self.temp_dir, "dft-fields.h5"), "r" + ) as fields, h5py.File(os.path.join(self.temp_dir, "dft-flux.h5"), "r") as flux: + exp_fields = mp.complexarray(fields["ez_0.r"][()], fields["ez_0.i"][()]) + exp_flux = mp.complexarray(flux["ez_0.r"][()], flux["ez_0.i"][()]) tol = 1e-6 self.assertClose(exp_fields, fields_arr, epsilon=tol) @@ -102,13 +114,12 @@ def test_get_dft_array(self): def test_decimated_dft_fields_are_almost_equal_to_undecimated_fields(self): sim = self.init() sim.init_sim() - undecimated_field = sim.add_dft_fields([mp.Ez], self.fcen, 0, 1, - decimation_factor=1) - decimated_field = sim.add_dft_fields([mp.Ez], - self.fcen, - 0, - 1, - decimation_factor=4) + undecimated_field = sim.add_dft_fields( + [mp.Ez], self.fcen, 0, 1, decimation_factor=1 + ) + decimated_field = sim.add_dft_fields( + [mp.Ez], self.fcen, 0, 1, decimation_factor=4 + ) sim.run(until_after_sources=100) @@ -117,5 +128,5 @@ def test_decimated_dft_fields_are_almost_equal_to_undecimated_fields(self): self.assertClose(expected_dft, actual_dft, epsilon=1e-3) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_diffracted_planewave.py b/python/tests/test_diffracted_planewave.py index 7c0d8b3c0..ee5c7ecdc 100644 --- a/python/tests/test_diffracted_planewave.py +++ b/python/tests/test_diffracted_planewave.py @@ -1,148 +1,163 @@ -import unittest -import meep as mp -import math import cmath +import math +import unittest + import numpy as np +import meep as mp # Computes the mode coefficient of the transmitted orders of # a binary grating given an incident planewave and verifies # that the results are the same when using either a band number # or `DiffractedPlanewave` object in `get_eigenmode_coefficients`. -class TestDiffractedPlanewave(unittest.TestCase): - @classmethod - def setUp(cls): - cls.resolution = 50 # pixels/um - cls.dpml = 1.0 # PML thickness - cls.dsub = 3.0 # substrate thickness - cls.dpad = 3.0 # length of padding between grating and PML - - cls.wvl = 0.5 # center wavelength - cls.fcen = 1/cls.wvl # center frequency - - cls.ng = 1.5 - cls.glass = mp.Medium(index=cls.ng) - - cls.pml_layers = [mp.PML(thickness=cls.dpml,direction=mp.X)] - - - def run_binary_grating_diffraction(self,gp,gh,gdc,theta): - sx = self.dpml+self.dsub+gh+self.dpad+self.dpml - sy = gp - cell_size = mp.Vector3(sx,sy,0) - - # rotation angle of incident planewave - # counter clockwise (CCW) about Z axis, 0 degrees along +X axis - theta_in = math.radians(theta) - - # k (in source medium) with correct length (plane of incidence: XY) - k = mp.Vector3(self.fcen*self.ng).rotate(mp.Vector3(z=1), theta_in) - - eig_parity = mp.ODD_Z - if theta == 0: - k = mp.Vector3() - eig_parity += mp.EVEN_Y - symmetries = [mp.Mirror(direction=mp.Y)] - else: - symmetries = [] - - def pw_amp(k,x0): - def _pw_amp(x): - return cmath.exp(1j*2*math.pi*k.dot(x+x0)) - return _pw_amp - - src_pt = mp.Vector3(-0.5*sx+self.dpml,0,0) - sources = [mp.Source(mp.GaussianSource(self.fcen,fwidth=0.1*self.fcen), - component=mp.Ez, - center=src_pt, - size=mp.Vector3(0,sy,0), - amp_func=pw_amp(k,src_pt))] - - geometry = [mp.Block(material=self.glass, - size=mp.Vector3(self.dpml+self.dsub,mp.inf,mp.inf), - center=mp.Vector3(-0.5*sx+0.5*(self.dpml+self.dsub),0,0)), - mp.Block(material=self.glass, - size=mp.Vector3(gh,gdc*gp,mp.inf), - center=mp.Vector3(-0.5*sx+self.dpml+self.dsub+0.5*gh,0,0))] - - sim = mp.Simulation(resolution=self.resolution, - cell_size=cell_size, - boundary_layers=self.pml_layers, - geometry=geometry, - k_point=k, - sources=sources, - symmetries=symmetries) - - tran_pt = mp.Vector3(0.5*sx-self.dpml,0,0) - tran_flux = sim.add_mode_monitor(self.fcen, - 0, - 1, - mp.FluxRegion(center=tran_pt, - size=mp.Vector3(0,sy,0))) - - sim.run(until_after_sources=mp.stop_when_fields_decayed(20,mp.Ez,src_pt,1e-6)) - - m_plus = int(np.floor((self.fcen-k.y)*gp)) - m_minus = int(np.ceil((-self.fcen-k.y)*gp)) - - if theta == 0: - orders = range(m_plus) - else: - # ordering of the modes computed by MPB is according to *decreasing* - # values of kx (i.e., closest to propagation direction of 0° or +x) - ms = range(m_minus,m_plus+1) - kx = lambda m: np.power(self.fcen,2) - np.power(k.y+m/gp,2) - kxs = [kx(m) for m in ms] - ids = np.flip(np.argsort(kxs)) - orders = [ms[d] for d in ids] - - for band,order in enumerate(orders): - res = sim.get_eigenmode_coefficients(tran_flux, - [band+1], - eig_parity=eig_parity) - tran_ref = abs(res.alpha[0,0,0])**2 - if theta == 0: - tran_ref = 0.5*tran_ref - vg_ref = res.vgrp[0] - kdom_ref = res.kdom[0] - - res = sim.get_eigenmode_coefficients(tran_flux, - mp.DiffractedPlanewave((0,order,0), - mp.Vector3(0,1,0), - 1, - 0)) - tran_dp = abs(res.alpha[0,0,0])**2 - if (theta == 0) and (order == 0): - tran_dp = 0.5*tran_dp - vg_dp = res.vgrp[0] - kdom_dp = res.kdom[0] - - err = abs(tran_ref-tran_dp)/tran_ref - print("tran:, {:2d} (band), {:2d} (order), " - "{:10.8f} (band num.), {:10.8f} (diff. pw.), " - "{:10.8f} (error)".format(band,order,tran_ref,tran_dp,err)) - - self.assertAlmostEqual(vg_ref,vg_dp,places=4) - self.assertAlmostEqual(tran_ref,tran_dp,places=4) - if theta == 0: - self.assertAlmostEqual(abs(kdom_ref.x),kdom_dp.x,places=5) - self.assertAlmostEqual(abs(kdom_ref.y),kdom_dp.y,places=5) - self.assertAlmostEqual(abs(kdom_ref.z),kdom_dp.z,places=5) - else: - self.assertAlmostEqual(kdom_ref.x,kdom_dp.x,places=5) - self.assertAlmostEqual(kdom_ref.y,kdom_dp.y,places=5) - self.assertAlmostEqual(kdom_ref.z,kdom_dp.z,places=5) - - print("PASSED.") - - def test_diffracted_planewave(self): - self.run_binary_grating_diffraction(2.6,0.4,0.6,0) - self.run_binary_grating_diffraction(2.6,0.4,0.6,13.4) - - # self.run_binary_grating_diffraction(10.0,0.5,0.5,0) - # self.run_binary_grating_diffraction(10.0,0.5,0.5,10.7) - -if __name__ == '__main__': - unittest.main() +class TestDiffractedPlanewave(unittest.TestCase): + @classmethod + def setUp(cls): + cls.resolution = 50 # pixels/um + cls.dpml = 1.0 # PML thickness + cls.dsub = 3.0 # substrate thickness + cls.dpad = 3.0 # length of padding between grating and PML + + cls.wvl = 0.5 # center wavelength + cls.fcen = 1 / cls.wvl # center frequency + + cls.ng = 1.5 + cls.glass = mp.Medium(index=cls.ng) + + cls.pml_layers = [mp.PML(thickness=cls.dpml, direction=mp.X)] + + def run_binary_grating_diffraction(self, gp, gh, gdc, theta): + sx = self.dpml + self.dsub + gh + self.dpad + self.dpml + sy = gp + cell_size = mp.Vector3(sx, sy, 0) + + # rotation angle of incident planewave + # counter clockwise (CCW) about Z axis, 0 degrees along +X axis + theta_in = math.radians(theta) + + # k (in source medium) with correct length (plane of incidence: XY) + k = mp.Vector3(self.fcen * self.ng).rotate(mp.Vector3(z=1), theta_in) + + eig_parity = mp.ODD_Z + if theta == 0: + k = mp.Vector3() + eig_parity += mp.EVEN_Y + symmetries = [mp.Mirror(direction=mp.Y)] + else: + symmetries = [] + + def pw_amp(k, x0): + def _pw_amp(x): + return cmath.exp(1j * 2 * math.pi * k.dot(x + x0)) + + return _pw_amp + + src_pt = mp.Vector3(-0.5 * sx + self.dpml, 0, 0) + sources = [ + mp.Source( + mp.GaussianSource(self.fcen, fwidth=0.1 * self.fcen), + component=mp.Ez, + center=src_pt, + size=mp.Vector3(0, sy, 0), + amp_func=pw_amp(k, src_pt), + ) + ] + + geometry = [ + mp.Block( + material=self.glass, + size=mp.Vector3(self.dpml + self.dsub, mp.inf, mp.inf), + center=mp.Vector3(-0.5 * sx + 0.5 * (self.dpml + self.dsub), 0, 0), + ), + mp.Block( + material=self.glass, + size=mp.Vector3(gh, gdc * gp, mp.inf), + center=mp.Vector3(-0.5 * sx + self.dpml + self.dsub + 0.5 * gh, 0, 0), + ), + ] + + sim = mp.Simulation( + resolution=self.resolution, + cell_size=cell_size, + boundary_layers=self.pml_layers, + geometry=geometry, + k_point=k, + sources=sources, + symmetries=symmetries, + ) + + tran_pt = mp.Vector3(0.5 * sx - self.dpml, 0, 0) + tran_flux = sim.add_mode_monitor( + self.fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0, sy, 0)) + ) + + sim.run( + until_after_sources=mp.stop_when_fields_decayed(20, mp.Ez, src_pt, 1e-6) + ) + + m_plus = int(np.floor((self.fcen - k.y) * gp)) + m_minus = int(np.ceil((-self.fcen - k.y) * gp)) + + if theta == 0: + orders = range(m_plus) + else: + # ordering of the modes computed by MPB is according to *decreasing* + # values of kx (i.e., closest to propagation direction of 0° or +x) + ms = range(m_minus, m_plus + 1) + kx = lambda m: np.power(self.fcen, 2) - np.power(k.y + m / gp, 2) + kxs = [kx(m) for m in ms] + ids = np.flip(np.argsort(kxs)) + orders = [ms[d] for d in ids] + + for band, order in enumerate(orders): + res = sim.get_eigenmode_coefficients( + tran_flux, [band + 1], eig_parity=eig_parity + ) + tran_ref = abs(res.alpha[0, 0, 0]) ** 2 + if theta == 0: + tran_ref = 0.5 * tran_ref + vg_ref = res.vgrp[0] + kdom_ref = res.kdom[0] + + res = sim.get_eigenmode_coefficients( + tran_flux, + mp.DiffractedPlanewave((0, order, 0), mp.Vector3(0, 1, 0), 1, 0), + ) + tran_dp = abs(res.alpha[0, 0, 0]) ** 2 + if (theta == 0) and (order == 0): + tran_dp = 0.5 * tran_dp + vg_dp = res.vgrp[0] + kdom_dp = res.kdom[0] + + err = abs(tran_ref - tran_dp) / tran_ref + print( + "tran:, {:2d} (band), {:2d} (order), " + "{:10.8f} (band num.), {:10.8f} (diff. pw.), " + "{:10.8f} (error)".format(band, order, tran_ref, tran_dp, err) + ) + + self.assertAlmostEqual(vg_ref, vg_dp, places=4) + self.assertAlmostEqual(tran_ref, tran_dp, places=4) + if theta == 0: + self.assertAlmostEqual(abs(kdom_ref.x), kdom_dp.x, places=5) + self.assertAlmostEqual(abs(kdom_ref.y), kdom_dp.y, places=5) + self.assertAlmostEqual(abs(kdom_ref.z), kdom_dp.z, places=5) + else: + self.assertAlmostEqual(kdom_ref.x, kdom_dp.x, places=5) + self.assertAlmostEqual(kdom_ref.y, kdom_dp.y, places=5) + self.assertAlmostEqual(kdom_ref.z, kdom_dp.z, places=5) + + print("PASSED.") + + def test_diffracted_planewave(self): + self.run_binary_grating_diffraction(2.6, 0.4, 0.6, 0) + self.run_binary_grating_diffraction(2.6, 0.4, 0.6, 13.4) + + # self.run_binary_grating_diffraction(10.0,0.5,0.5,0) + # self.run_binary_grating_diffraction(10.0,0.5,0.5,10.7) + + +if __name__ == "__main__": + unittest.main() diff --git a/python/tests/test_dispersive_eigenmode.py b/python/tests/test_dispersive_eigenmode.py index 5fce1d96d..80b40ed93 100644 --- a/python/tests/test_dispersive_eigenmode.py +++ b/python/tests/test_dispersive_eigenmode.py @@ -1,35 +1,36 @@ - # dispersive_eigenmode.py - Tests the meep eigenmode features (eigenmode source, # eigenmode decomposition, and get_eigenmode) with dispersive materials. # TODO: # * check materials with off diagonal components # * check magnetic profiles # * once imaginary component is supported, check that - -import meep as mp -from utils import ApproxComparisonTestCase +import os import unittest -import numpy as np + import h5py -import os +import numpy as np +from utils import ApproxComparisonTestCase + +import meep as mp + class TestDispersiveEigenmode(ApproxComparisonTestCase): # ----------------------------------------- # # ----------- Helper Functions ------------ # # ----------------------------------------- # # Directly cals the C++ chi1 routine - def call_chi1(self,material,frequency): + def call_chi1(self, material, frequency): - sim = mp.Simulation(cell_size=mp.Vector3(1,1,1), - default_material=material, - resolution=20) + sim = mp.Simulation( + cell_size=mp.Vector3(1, 1, 1), default_material=material, resolution=20 + ) sim.init_sim() - v3 = mp.py_v3_to_vec(sim.dimensions, mp.Vector3(0,0,0), sim.is_cylindrical) - chi1inv = np.zeros((3,3),dtype=np.complex128) - for i, com in enumerate([mp.Ex,mp.Ey,mp.Ez]): - for k, dir in enumerate([mp.X,mp.Y,mp.Z]): - chi1inv[i,k] = sim.structure.get_chi1inv(com,dir,v3,frequency) + v3 = mp.py_v3_to_vec(sim.dimensions, mp.Vector3(0, 0, 0), sim.is_cylindrical) + chi1inv = np.zeros((3, 3), dtype=np.complex128) + for i, com in enumerate([mp.Ex, mp.Ey, mp.Ez]): + for k, dir in enumerate([mp.X, mp.Y, mp.Z]): + chi1inv[i, k] = sim.structure.get_chi1inv(com, dir, v3, frequency) n = np.real(np.sqrt(np.linalg.inv(chi1inv.astype(np.complex128)))) n_actual = np.real(np.sqrt(material.epsilon(frequency).astype(np.complex128))) @@ -45,35 +46,38 @@ def setUpClass(cls): def tearDownClass(cls): mp.delete_directory(cls.temp_dir) - def verify_output_and_slice(self,material,frequency): + def verify_output_and_slice(self, material, frequency): # Since the slice routines average the diagonals, we need to do that too: chi1 = material.epsilon(frequency).astype(np.complex128) chi1inv = np.linalg.inv(chi1) chi1inv = np.diag(chi1inv) N = chi1inv.size - n = np.sqrt(N/np.sum(chi1inv)) - - sim = mp.Simulation(cell_size=mp.Vector3(2,2,2), - default_material=material, - resolution=20, - eps_averaging=False - ) + n = np.sqrt(N / np.sum(chi1inv)) + + sim = mp.Simulation( + cell_size=mp.Vector3(2, 2, 2), + default_material=material, + resolution=20, + eps_averaging=False, + ) sim.use_output_directory(self.temp_dir) sim.init_sim() # Check to make sure the get_slice routine is working with frequency - n_slice = np.sqrt(np.max(sim.get_epsilon(frequency=frequency,snap=True))) - self.assertAlmostEqual(n,n_slice, places=4) + n_slice = np.sqrt(np.max(sim.get_epsilon(frequency=frequency, snap=True))) + self.assertAlmostEqual(n, n_slice, places=4) # Check to make sure h5 output is working with frequency - filename = os.path.join(self.temp_dir, - sim.get_filename_prefix() + '-eps-000000.00.h5') - mp.output_epsilon(sim,frequency=frequency) + filename = os.path.join( + self.temp_dir, f"{sim.get_filename_prefix()}-eps-000000.00.h5" + ) + + mp.output_epsilon(sim, frequency=frequency) n_h5 = 0 mp.all_wait() - with h5py.File(filename, 'r') as f: - n_h5 = np.sqrt(np.max(mp.complexarray(f['eps.r'][()],f['eps.i'][()]))) - self.assertAlmostEqual(n,n_h5, places=4) + with h5py.File(filename, "r") as f: + n_h5 = np.sqrt(np.max(mp.complexarray(f["eps.r"][()], f["eps.i"][()]))) + self.assertAlmostEqual(n, n_h5, places=4) # ----------------------------------------- # # ----------- Test Routines --------------- # @@ -83,76 +87,78 @@ def test_chi1_routine(self): # fields and structure classes by comparing their output to the # python epsilon output. - from meep.materials import Si, Ag, LiNbO3, Au + from meep.materials import Ag, Au, LiNbO3, Si # Check Silicon w0 = Si.valid_freq_range.min w1 = Si.valid_freq_range.max - self.call_chi1(Si,w0) - self.call_chi1(Si,w1) + self.call_chi1(Si, w0) + self.call_chi1(Si, w1) # Check Silver w0 = Ag.valid_freq_range.min w1 = Ag.valid_freq_range.max - self.call_chi1(Ag,w0) - self.call_chi1(Ag,w1) + self.call_chi1(Ag, w0) + self.call_chi1(Ag, w1) # Check Gold w0 = Au.valid_freq_range.min w1 = Au.valid_freq_range.max - self.call_chi1(Au,w0) - self.call_chi1(Au,w1) + self.call_chi1(Au, w0) + self.call_chi1(Au, w1) # Check Lithium Niobate (X,X) w0 = LiNbO3.valid_freq_range.min w1 = LiNbO3.valid_freq_range.max - self.call_chi1(LiNbO3,w0) - self.call_chi1(LiNbO3,w1) + self.call_chi1(LiNbO3, w0) + self.call_chi1(LiNbO3, w1) # Now let's rotate LN import copy + rotLiNbO3 = copy.deepcopy(LiNbO3) - rotLiNbO3.rotate(mp.Vector3(1,1,1),np.radians(34)) - self.call_chi1(rotLiNbO3,w0) - self.call_chi1(rotLiNbO3,w1) + rotLiNbO3.rotate(mp.Vector3(1, 1, 1), np.radians(34)) + self.call_chi1(rotLiNbO3, w0) + self.call_chi1(rotLiNbO3, w1) def test_get_with_dispersion(self): # Checks the get_array_slice and output_fields method # with dispersive materials. - from meep.materials import Si, Ag, LiNbO3, Au + from meep.materials import Ag, Au, LiNbO3, Si # Check Silicon w0 = Si.valid_freq_range.min w1 = Si.valid_freq_range.max - self.verify_output_and_slice(Si,w0) - self.verify_output_and_slice(Si,w1) + self.verify_output_and_slice(Si, w0) + self.verify_output_and_slice(Si, w1) # Check Silver w0 = Ag.valid_freq_range.min w1 = Ag.valid_freq_range.max - self.verify_output_and_slice(Ag,w0) - self.verify_output_and_slice(Ag,w1) + self.verify_output_and_slice(Ag, w0) + self.verify_output_and_slice(Ag, w1) # Check Gold w0 = Au.valid_freq_range.min w1 = Au.valid_freq_range.max - self.verify_output_and_slice(Au,w0) - self.verify_output_and_slice(Au,w1) + self.verify_output_and_slice(Au, w0) + self.verify_output_and_slice(Au, w1) # Check Lithium Niobate w0 = LiNbO3.valid_freq_range.min w1 = LiNbO3.valid_freq_range.max - self.verify_output_and_slice(LiNbO3,w0) - self.verify_output_and_slice(LiNbO3,w1) + self.verify_output_and_slice(LiNbO3, w0) + self.verify_output_and_slice(LiNbO3, w1) # Now let's rotate LN import copy + rotLiNbO3 = copy.deepcopy(LiNbO3) - rotLiNbO3.rotate(mp.Vector3(1,1,1),np.radians(34)) - self.verify_output_and_slice(rotLiNbO3,w0) - self.verify_output_and_slice(rotLiNbO3,w1) + rotLiNbO3.rotate(mp.Vector3(1, 1, 1), np.radians(34)) + self.verify_output_and_slice(rotLiNbO3, w0) + self.verify_output_and_slice(rotLiNbO3, w1) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_divide_mpi_processes.py b/python/tests/test_divide_mpi_processes.py index 574f0e834..43ec2ba6d 100644 --- a/python/tests/test_divide_mpi_processes.py +++ b/python/tests/test_divide_mpi_processes.py @@ -1,55 +1,64 @@ import unittest + import meep as mp + @unittest.skipIf(mp.count_processors() < 2, "MPI specific test") class TestDivideParallelProcesses(unittest.TestCase): - - def test_divide_parallel_processes(self): + def test_divide_parallel_processes(self): resolution = 20 sxy = 4 dpml = 1 - cell = mp.Vector3(sxy+2*dpml,sxy+2*dpml) + cell = mp.Vector3(sxy + 2 * dpml, sxy + 2 * dpml) pml_layers = [mp.PML(dpml)] n = mp.divide_parallel_processes(2) - fcen = 1.0/(n+1) - - sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen), - center=mp.Vector3(), - component=mp.Ez)] - - symmetries = [mp.Mirror(mp.X), - mp.Mirror(mp.Y)] - - self.sim = mp.Simulation(cell_size=cell, - resolution=resolution, - sources=sources, - symmetries=symmetries, - boundary_layers=pml_layers) - - - flux_box = self.sim.add_flux(fcen, 0, 1, - mp.FluxRegion(mp.Vector3(y=0.5*sxy), size=mp.Vector3(sxy)), - mp.FluxRegion(mp.Vector3(y=-0.5*sxy), size=mp.Vector3(sxy), weight=-1), - mp.FluxRegion(mp.Vector3(0.5*sxy), size=mp.Vector3(y=sxy)), - mp.FluxRegion(mp.Vector3(-0.5*sxy), size=mp.Vector3(y=sxy), weight=-1), - decimation_factor=1) + fcen = 1.0 / (n + 1) + + sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=0.2 * fcen), + center=mp.Vector3(), + component=mp.Ez, + ) + ] + + symmetries = [mp.Mirror(mp.X), mp.Mirror(mp.Y)] + + self.sim = mp.Simulation( + cell_size=cell, + resolution=resolution, + sources=sources, + symmetries=symmetries, + boundary_layers=pml_layers, + ) + + flux_box = self.sim.add_flux( + fcen, + 0, + 1, + mp.FluxRegion(mp.Vector3(y=0.5 * sxy), size=mp.Vector3(sxy)), + mp.FluxRegion(mp.Vector3(y=-0.5 * sxy), size=mp.Vector3(sxy), weight=-1), + mp.FluxRegion(mp.Vector3(0.5 * sxy), size=mp.Vector3(y=sxy)), + mp.FluxRegion(mp.Vector3(-0.5 * sxy), size=mp.Vector3(y=sxy), weight=-1), + decimation_factor=1, + ) self.sim.run(until_after_sources=30) tot_flux = mp.get_fluxes(flux_box)[0] - + tot_fluxes = mp.merge_subgroup_data(tot_flux) - fcens = mp.merge_subgroup_data(fcen) + fcens = mp.merge_subgroup_data(fcen) - self.assertEqual(fcens[0],1) - self.assertEqual(fcens[1],0.5) + self.assertEqual(fcens[0], 1) + self.assertEqual(fcens[1], 0.5) places = 4 if mp.is_single_precision() else 7 self.assertAlmostEqual(tot_fluxes[0], 9.8628728533, places=places) self.assertAlmostEqual(tot_fluxes[1], 19.6537275387, places=places) - -if __name__ == '__main__': - unittest.main() + +if __name__ == "__main__": + unittest.main() diff --git a/python/tests/test_dump_load.py b/python/tests/test_dump_load.py index 744e0c4de..c97712733 100644 --- a/python/tests/test_dump_load.py +++ b/python/tests/test_dump_load.py @@ -4,11 +4,13 @@ import sys import unittest import warnings + import h5py import numpy as np -import meep as mp from utils import ApproxComparisonTestCase +import meep as mp + try: unicode except NameError: @@ -17,40 +19,51 @@ class TestLoadDump(ApproxComparisonTestCase): - fname_base = re.sub(r'\.py$', '', os.path.split(sys.argv[0])[1]) - fname = fname_base + '-ez-000200.00.h5' + fname_base = re.sub(r"\.py$", "", os.path.split(sys.argv[0])[1]) + fname = fname_base + "-ez-000200.00.h5" def setUp(self): - print("Running {}".format(self._testMethodName)) + print(f"Running {self._testMethodName}") @classmethod def setUpClass(cls): cls.temp_dir = mp.make_output_directory() - print("Saving temp files to dir: {}".format(cls.temp_dir)) + print(f"Saving temp files to dir: {cls.temp_dir}") @classmethod def tearDownClass(cls): mp.delete_directory(cls.temp_dir) # Tests various combinations of dumping/loading structure & chunk layout in 2d. - def _load_dump_structure_2d(self, chunk_file=False, chunk_sim=False, single_parallel_file=True): + def _load_dump_structure_2d( + self, chunk_file=False, chunk_sim=False, single_parallel_file=True + ): from meep.materials import Al + resolution = 50 cell = mp.Vector3(5, 5) - sources = mp.Source(src=mp.GaussianSource(1, fwidth=0.2), center=mp.Vector3(), component=mp.Ez) + sources = mp.Source( + src=mp.GaussianSource(1, fwidth=0.2), center=mp.Vector3(), component=mp.Ez + ) one_by_one = mp.Vector3(1, 1, mp.inf) - geometry = [mp.Block(material=Al, center=mp.Vector3(), size=one_by_one), - mp.Block(material=mp.Medium(epsilon=13), center=mp.Vector3(1), size=one_by_one)] + geometry = [ + mp.Block(material=Al, center=mp.Vector3(), size=one_by_one), + mp.Block( + material=mp.Medium(epsilon=13), center=mp.Vector3(1), size=one_by_one + ), + ] pml_layers = [mp.PML(0.5)] symmetries = [mp.Mirror(mp.Y)] - sim1 = mp.Simulation(resolution=resolution, - cell_size=cell, - boundary_layers=pml_layers, - geometry=geometry, - symmetries=symmetries, - sources=[sources]) + sim1 = mp.Simulation( + resolution=resolution, + cell_size=cell, + boundary_layers=pml_layers, + geometry=geometry, + symmetries=symmetries, + sources=[sources], + ) sample_point = mp.Vector3(0.12, -0.29) ref_field_points = [] @@ -61,25 +74,37 @@ def get_ref_field_point(sim): sim1.run(mp.at_every(5, get_ref_field_point), until=50) - dump_dirname = os.path.join(self.temp_dir, 'test_load_dump_structure') - sim1.dump(dump_dirname, dump_structure=True, dump_fields=False, single_parallel_file=single_parallel_file) + dump_dirname = os.path.join(self.temp_dir, "test_load_dump_structure") + sim1.dump( + dump_dirname, + dump_structure=True, + dump_fields=False, + single_parallel_file=single_parallel_file, + ) dump_chunk_fname = None chunk_layout = None if chunk_file: - dump_chunk_fname = os.path.join(dump_dirname, 'chunk_layout.h5') + dump_chunk_fname = os.path.join(dump_dirname, "chunk_layout.h5") sim1.dump_chunk_layout(dump_chunk_fname) chunk_layout = dump_chunk_fname if chunk_sim: chunk_layout = sim1 - sim = mp.Simulation(resolution=resolution, - cell_size=cell, - boundary_layers=pml_layers, - sources=[sources], - symmetries=symmetries, - chunk_layout=chunk_layout) - sim.load(dump_dirname, load_structure=True, load_fields=False, single_parallel_file=single_parallel_file) + sim = mp.Simulation( + resolution=resolution, + cell_size=cell, + boundary_layers=pml_layers, + sources=[sources], + symmetries=symmetries, + chunk_layout=chunk_layout, + ) + sim.load( + dump_dirname, + load_structure=True, + load_fields=False, + single_parallel_file=single_parallel_file, + ) field_points = [] def get_field_point(sim): @@ -105,25 +130,38 @@ def test_load_dump_chunk_layout_sim_2d(self): self._load_dump_structure_2d(chunk_sim=True) # Tests various combinations of dumping/loading structure & chunk layout in 3d. - def _load_dump_structure_3d(self, chunk_file=False, chunk_sim=False, single_parallel_file=True): + def _load_dump_structure_3d( + self, chunk_file=False, chunk_sim=False, single_parallel_file=True + ): from meep.materials import aSi + resolution = 15 cell = mp.Vector3(2.3, 2.1, 2.7) - sources = mp.Source(src=mp.GaussianSource(2.5, fwidth=0.1), center=mp.Vector3(), component=mp.Hy) + sources = mp.Source( + src=mp.GaussianSource(2.5, fwidth=0.1), center=mp.Vector3(), component=mp.Hy + ) one_by_one_by_one = mp.Vector3(1, 1, 1) - geometry = [mp.Block(material=mp.Medium(index=2.3), center=mp.Vector3(), size=one_by_one_by_one), - mp.Block(material=aSi, center=mp.Vector3(1), size=one_by_one_by_one)] + geometry = [ + mp.Block( + material=mp.Medium(index=2.3), + center=mp.Vector3(), + size=one_by_one_by_one, + ), + mp.Block(material=aSi, center=mp.Vector3(1), size=one_by_one_by_one), + ] default_material = mp.Medium(index=1.4) boundary_layers = [mp.Absorber(0.2)] k_point = mp.Vector3(0.4, -1.3, 0.7) - sim1 = mp.Simulation(resolution=resolution, - cell_size=cell, - k_point=k_point, - geometry=geometry, - boundary_layers=boundary_layers, - default_material=default_material, - sources=[sources]) + sim1 = mp.Simulation( + resolution=resolution, + cell_size=cell, + k_point=k_point, + geometry=geometry, + boundary_layers=boundary_layers, + default_material=default_material, + sources=[sources], + ) sample_point = mp.Vector3(0.73, -0.33, 0.61) ref_field_points = [] @@ -134,25 +172,37 @@ def get_ref_field_point(sim): sim1.run(mp.at_every(5, get_ref_field_point), until=50) - dump_dirname = os.path.join(self.temp_dir, 'test_load_dump_structure') - sim1.dump(dump_dirname, dump_structure=True, dump_fields=False, single_parallel_file=single_parallel_file) + dump_dirname = os.path.join(self.temp_dir, "test_load_dump_structure") + sim1.dump( + dump_dirname, + dump_structure=True, + dump_fields=False, + single_parallel_file=single_parallel_file, + ) dump_chunk_fname = None chunk_layout = None if chunk_file: - dump_chunk_fname = os.path.join(dump_dirname, 'chunk_layout.h5') + dump_chunk_fname = os.path.join(dump_dirname, "chunk_layout.h5") sim1.dump_chunk_layout(dump_chunk_fname) chunk_layout = dump_chunk_fname if chunk_sim: chunk_layout = sim1 - sim = mp.Simulation(resolution=resolution, - cell_size=cell, - sources=[sources], - k_point=k_point, - boundary_layers=boundary_layers, - chunk_layout=chunk_layout) - sim.load(dump_dirname, load_structure=True, load_fields=False, single_parallel_file=single_parallel_file) + sim = mp.Simulation( + resolution=resolution, + cell_size=cell, + sources=[sources], + k_point=k_point, + boundary_layers=boundary_layers, + chunk_layout=chunk_layout, + ) + sim.load( + dump_dirname, + load_structure=True, + load_fields=False, + single_parallel_file=single_parallel_file, + ) field_points = [] def get_field_point(sim): @@ -181,68 +231,103 @@ def test_load_dump_chunk_layout_sim_3d(self): def _load_dump_fields_2d(self, single_parallel_file=True): resolution = 50 cell = mp.Vector3(5, 5) - sources = mp.Source(src=mp.GaussianSource(1, fwidth=0.4), center=mp.Vector3(), component=mp.Ez) + sources = mp.Source( + src=mp.GaussianSource(1, fwidth=0.4), center=mp.Vector3(), component=mp.Ez + ) one_by_one = mp.Vector3(1, 1, mp.inf) - geometry = [mp.Block(material=mp.Medium(index=3.2), center=mp.Vector3(), size=one_by_one), - mp.Block(material=mp.Medium(epsilon=13), center=mp.Vector3(1), size=one_by_one)] + geometry = [ + mp.Block( + material=mp.Medium(index=3.2), center=mp.Vector3(), size=one_by_one + ), + mp.Block( + material=mp.Medium(epsilon=13), center=mp.Vector3(1), size=one_by_one + ), + ] pml_layers = [mp.PML(0.5)] symmetries = [mp.Mirror(mp.Y)] - sim1 = mp.Simulation(resolution=resolution, - cell_size=cell, - boundary_layers=pml_layers, - geometry=geometry, - symmetries=symmetries, - sources=[sources]) - - mon_dft = sim1.add_dft_fields([mp.Ez], - 1.1, 0.1, 3, - center=mp.Vector3(1.2,0.4), - size=mp.Vector3(1.5,0.3), - yee_grid=True) + sim1 = mp.Simulation( + resolution=resolution, + cell_size=cell, + boundary_layers=pml_layers, + geometry=geometry, + symmetries=symmetries, + sources=[sources], + ) + + mon_dft = sim1.add_dft_fields( + [mp.Ez], + 1.1, + 0.1, + 3, + center=mp.Vector3(1.2, 0.4), + size=mp.Vector3(1.5, 0.3), + yee_grid=True, + ) sample_point = mp.Vector3(0.12, -0.29) - dump_dirname = os.path.join(self.temp_dir, 'test_load_dump_fields') + dump_dirname = os.path.join(self.temp_dir, "test_load_dump_fields") os.makedirs(dump_dirname, exist_ok=True) ref_field_points = {} + def get_ref_field_point(sim): p = sim.get_field_point(mp.Ez, sample_point) ref_field_points[sim.meep_time()] = p.real # First run until t=15 and save structure/fields sim1.run(mp.at_every(1, get_ref_field_point), until=15) - sim1.dump(dump_dirname, dump_structure=True, dump_fields=True, single_parallel_file=single_parallel_file) - + sim1.dump( + dump_dirname, + dump_structure=True, + dump_fields=True, + single_parallel_file=single_parallel_file, + ) # Then continue running another 5 until t=20 sim1.run(mp.at_every(1, get_ref_field_point), until=5) sim1_mon_dft = sim1.get_dft_array(mon_dft, mp.Ez, 2) # Now create a new simulation and try restoring state. - sim = mp.Simulation(resolution=resolution, - cell_size=cell, - boundary_layers=pml_layers, - sources=[sources], - symmetries=symmetries, - chunk_layout=sim1) + sim = mp.Simulation( + resolution=resolution, + cell_size=cell, + boundary_layers=pml_layers, + sources=[sources], + symmetries=symmetries, + chunk_layout=sim1, + ) # Just restore structure first. - sim.load(dump_dirname, load_structure=True, load_fields=False, single_parallel_file=single_parallel_file) + sim.load( + dump_dirname, + load_structure=True, + load_fields=False, + single_parallel_file=single_parallel_file, + ) field_points = {} - mon_dft = sim.add_dft_fields([mp.Ez], - 1.1, 0.1, 3, - center=mp.Vector3(1.2,0.4), - size=mp.Vector3(1.5,0.3), - yee_grid=True) + mon_dft = sim.add_dft_fields( + [mp.Ez], + 1.1, + 0.1, + 3, + center=mp.Vector3(1.2, 0.4), + size=mp.Vector3(1.5, 0.3), + yee_grid=True, + ) def get_field_point(sim): p = sim.get_field_point(mp.Ez, sample_point) field_points[sim.meep_time()] = p.real # Now load the fields (at t=15) and then continue to t=20 - sim.load(dump_dirname, load_structure=False, load_fields=True, single_parallel_file=single_parallel_file) + sim.load( + dump_dirname, + load_structure=False, + load_fields=True, + single_parallel_file=single_parallel_file, + ) sim.run(mp.at_every(1, get_field_point), until=5) for t, v in field_points.items(): @@ -262,68 +347,107 @@ def test_load_dump_fields_sharded_2d(self): def _load_dump_fields_3d(self, single_parallel_file=True): resolution = 15 cell = mp.Vector3(2.6, 2.2, 2.3) - sources = mp.Source(src=mp.GaussianSource(1, fwidth=0.4), center=mp.Vector3(), component=mp.Hx) + sources = mp.Source( + src=mp.GaussianSource(1, fwidth=0.4), center=mp.Vector3(), component=mp.Hx + ) one_by_one_by_one = mp.Vector3(1, 1, 1) - geometry = [mp.Block(material=mp.Medium(index=2.4), center=mp.Vector3(), size=one_by_one_by_one), - mp.Block(material=mp.Medium(epsilon=7.9), center=mp.Vector3(1), size=one_by_one_by_one)] + geometry = [ + mp.Block( + material=mp.Medium(index=2.4), + center=mp.Vector3(), + size=one_by_one_by_one, + ), + mp.Block( + material=mp.Medium(epsilon=7.9), + center=mp.Vector3(1), + size=one_by_one_by_one, + ), + ] pml_layers = [mp.PML(0.5)] - symmetries = [mp.Mirror(mp.Y,phase=-1),mp.Mirror(mp.Z,phase=-1)] - - sim1 = mp.Simulation(resolution=resolution, - cell_size=cell, - boundary_layers=pml_layers, - geometry=geometry, - symmetries=symmetries, - sources=[sources]) - - mon_dft = sim1.add_dft_fields([mp.Hx], - 0.9, 0.05, 4, - center=mp.Vector3(0.5,0.4,0.2), - size=mp.Vector3(1.5,0.3,0.2), - yee_grid=True) + symmetries = [mp.Mirror(mp.Y, phase=-1), mp.Mirror(mp.Z, phase=-1)] + + sim1 = mp.Simulation( + resolution=resolution, + cell_size=cell, + boundary_layers=pml_layers, + geometry=geometry, + symmetries=symmetries, + sources=[sources], + ) + + mon_dft = sim1.add_dft_fields( + [mp.Hx], + 0.9, + 0.05, + 4, + center=mp.Vector3(0.5, 0.4, 0.2), + size=mp.Vector3(1.5, 0.3, 0.2), + yee_grid=True, + ) sample_point = mp.Vector3(0.37, -0.42, 0.55) - dump_dirname = os.path.join(self.temp_dir, 'test_load_dump_fields') + dump_dirname = os.path.join(self.temp_dir, "test_load_dump_fields") os.makedirs(dump_dirname, exist_ok=True) ref_field_points = {} + def get_ref_field_point(sim): p = sim.get_field_point(mp.Hx, sample_point) ref_field_points[sim.meep_time()] = p.real # First run until t=15 and save structure/fields sim1.run(mp.at_every(1, get_ref_field_point), until=15) - sim1.dump(dump_dirname, dump_structure=True, dump_fields=True, single_parallel_file=single_parallel_file) - + sim1.dump( + dump_dirname, + dump_structure=True, + dump_fields=True, + single_parallel_file=single_parallel_file, + ) # Then continue running another 5 until t=20 sim1.run(mp.at_every(1, get_ref_field_point), until=5) sim1_mon_dft = sim1.get_dft_array(mon_dft, mp.Hx, 3) # Now create a new simulation and try restoring state. - sim = mp.Simulation(resolution=resolution, - cell_size=cell, - boundary_layers=pml_layers, - sources=[sources], - symmetries=symmetries, - chunk_layout=sim1) + sim = mp.Simulation( + resolution=resolution, + cell_size=cell, + boundary_layers=pml_layers, + sources=[sources], + symmetries=symmetries, + chunk_layout=sim1, + ) # Just restore structure first. - sim.load(dump_dirname, load_structure=True, load_fields=False, single_parallel_file=single_parallel_file) + sim.load( + dump_dirname, + load_structure=True, + load_fields=False, + single_parallel_file=single_parallel_file, + ) field_points = {} - mon_dft = sim.add_dft_fields([mp.Hx], - 0.9, 0.05, 4, - center=mp.Vector3(0.5,0.4,0.2), - size=mp.Vector3(1.5,0.3,0.2), - yee_grid=True) + mon_dft = sim.add_dft_fields( + [mp.Hx], + 0.9, + 0.05, + 4, + center=mp.Vector3(0.5, 0.4, 0.2), + size=mp.Vector3(1.5, 0.3, 0.2), + yee_grid=True, + ) def get_field_point(sim): p = sim.get_field_point(mp.Hx, sample_point) field_points[sim.meep_time()] = p.real # Now load the fields (at t=15) and then continue to t=20 - sim.load(dump_dirname, load_structure=False, load_fields=True, single_parallel_file=single_parallel_file) + sim.load( + dump_dirname, + load_structure=False, + load_fields=True, + single_parallel_file=single_parallel_file, + ) sim.run(mp.at_every(1, get_field_point), until=5) for t, v in field_points.items(): @@ -345,27 +469,39 @@ def test_load_dump_fields_sharded_3d(self): def test_dump_fails_for_non_null_polarization_state(self): resolution = 50 cell = mp.Vector3(5, 5) - sources = mp.Source(src=mp.GaussianSource(1, fwidth=0.4), center=mp.Vector3(), component=mp.Ez) + sources = mp.Source( + src=mp.GaussianSource(1, fwidth=0.4), center=mp.Vector3(), component=mp.Ez + ) one_by_one = mp.Vector3(1, 1, mp.inf) from meep.materials import Al - geometry = [mp.Block(material=Al, center=mp.Vector3(), size=one_by_one), - mp.Block(material=mp.Medium(epsilon=13), center=mp.Vector3(1), size=one_by_one)] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell, - boundary_layers=[], - geometry=geometry, - symmetries=[], - sources=[sources]) - dump_dirname = os.path.join(self.temp_dir, 'test_load_dump_fields') + geometry = [ + mp.Block(material=Al, center=mp.Vector3(), size=one_by_one), + mp.Block( + material=mp.Medium(epsilon=13), center=mp.Vector3(1), size=one_by_one + ), + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell, + boundary_layers=[], + geometry=geometry, + symmetries=[], + sources=[sources], + ) + + dump_dirname = os.path.join(self.temp_dir, "test_load_dump_fields") os.makedirs(dump_dirname, exist_ok=True) sim.run(until=1) # NOTE: We do not yet support checkpoint/restore when there is a # non-null polarization_state - with self.assertRaisesRegex(RuntimeError, 'meep: non-null polarization_state in fields::dump'): - sim.dump(dump_dirname, dump_structure=True, dump_fields=True) + with self.assertRaisesRegex( + RuntimeError, "meep: non-null polarization_state in fields::dump" + ): + sim.dump(dump_dirname, dump_structure=True, dump_fields=True) + -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_eigfreq.py b/python/tests/test_eigfreq.py index f73fe73ba..3ceb6ee1d 100644 --- a/python/tests/test_eigfreq.py +++ b/python/tests/test_eigfreq.py @@ -1,42 +1,55 @@ -import meep as mp import unittest -class TestEigfreq(unittest.TestCase): +import meep as mp + - @unittest.skipIf(mp.is_single_precision(), "double-precision floating point specific test") +class TestEigfreq(unittest.TestCase): + @unittest.skipIf( + mp.is_single_precision(), "double-precision floating point specific test" + ) def test_eigfreq(self): - w = 1.2 # width of waveguide - r = 0.36 # radius of holes - d = 1.4 # defect spacing (ordinary spacing = 1) - N = 3 # number of holes on either side of defect - sy = 6 # size of cell in y direction (perpendicular to wvg.) - pad = 2 # padding between last hole and PML edge - dpml = 1 # PML thickness - sx = 2*(pad+dpml+N)+d-1 # size of cell in x direction - - geometry = [mp.Block(size=mp.Vector3(mp.inf,w,mp.inf), material=mp.Medium(epsilon=13))] + w = 1.2 # width of waveguide + r = 0.36 # radius of holes + d = 1.4 # defect spacing (ordinary spacing = 1) + N = 3 # number of holes on either side of defect + sy = 6 # size of cell in y direction (perpendicular to wvg.) + pad = 2 # padding between last hole and PML edge + dpml = 1 # PML thickness + sx = 2 * (pad + dpml + N) + d - 1 # size of cell in x direction + + geometry = [ + mp.Block(size=mp.Vector3(mp.inf, w, mp.inf), material=mp.Medium(epsilon=13)) + ] for i in range(N): - geometry.append(mp.Cylinder(r, center=mp.Vector3(d/2+i))) - geometry.append(mp.Cylinder(r, center=mp.Vector3(-(d/2+i)))) + geometry.append(mp.Cylinder(r, center=mp.Vector3(d / 2 + i))) + geometry.append(mp.Cylinder(r, center=mp.Vector3(-(d / 2 + i)))) fcen = 0.25 df = 0.2 - src = [mp.Source(mp.GaussianSource(fcen, fwidth=df), - component=mp.Hz, - center=mp.Vector3(0), - size=mp.Vector3(0,0))] - - sim = mp.Simulation(cell_size=mp.Vector3(sx,sy), force_complex_fields=True, - geometry=geometry, - boundary_layers=[mp.PML(1.0)], - sources=src, - symmetries=[mp.Mirror(mp.X, phase=-1), mp.Mirror(mp.Y, phase=-1)], - resolution=20) + src = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=mp.Hz, + center=mp.Vector3(0), + size=mp.Vector3(0, 0), + ) + ] + + sim = mp.Simulation( + cell_size=mp.Vector3(sx, sy), + force_complex_fields=True, + geometry=geometry, + boundary_layers=[mp.PML(1.0)], + sources=src, + symmetries=[mp.Mirror(mp.X, phase=-1), mp.Mirror(mp.Y, phase=-1)], + resolution=20, + ) sim.init_sim() eigfreq = sim.solve_eigfreq(tol=1e-6) self.assertAlmostEqual(eigfreq.real, 0.23445413142440263, places=5) self.assertAlmostEqual(eigfreq.imag, -0.0003147775697388, places=5) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_faraday_rotation.py b/python/tests/test_faraday_rotation.py index 7c0f337a2..0e9a33695 100644 --- a/python/tests/test_faraday_rotation.py +++ b/python/tests/test_faraday_rotation.py @@ -1,43 +1,61 @@ import unittest + import numpy as np + import meep as mp + ## Farady rotation rate for gyrotropic Lorentzian medium def kgyro_lorentzian(freq, epsn, f0, gamma, sigma, b0): - dfsq = (f0**2 - 1j*freq*gamma - freq**2) - eperp = epsn + sigma * f0**2 * dfsq / (dfsq**2 - (freq*b0)**2) - eta = sigma * f0**2 * freq * b0 / (dfsq**2 - (freq*b0)**2) - return 2*np.pi*freq * np.sqrt(0.5*(eperp - np.sqrt(eperp**2 - eta**2))) + dfsq = f0**2 - 1j * freq * gamma - freq**2 + eperp = epsn + sigma * f0**2 * dfsq / (dfsq**2 - (freq * b0) ** 2) + eta = sigma * f0**2 * freq * b0 / (dfsq**2 - (freq * b0) ** 2) + return 2 * np.pi * freq * np.sqrt(0.5 * (eperp - np.sqrt(eperp**2 - eta**2))) + ## Farady rotation rate for gyrotropic Drude medium def kgyro_drude(freq, epsn, f0, gamma, sigma, b0): - dfsq = - 1j*freq*gamma - freq**2 - eperp = epsn + sigma * f0**2 * dfsq / (dfsq**2 - (freq*b0)**2) - eta = sigma * f0**2 * freq * b0 / (dfsq**2 - (freq*b0)**2) - return 2*np.pi*freq * np.sqrt(0.5*(eperp - np.sqrt(eperp**2 - eta**2))) + dfsq = -1j * freq * gamma - freq**2 + eperp = epsn + sigma * f0**2 * dfsq / (dfsq**2 - (freq * b0) ** 2) + eta = sigma * f0**2 * freq * b0 / (dfsq**2 - (freq * b0) ** 2) + return 2 * np.pi * freq * np.sqrt(0.5 * (eperp - np.sqrt(eperp**2 - eta**2))) + ## Farady rotation rate for Landau-Lifshitz-Gilbert medium def kgyro_llg(freq, epsn, f0, gamma, sigma, alpha): - df1 = f0 - 1j*freq*alpha - df2 = freq + 1j*gamma - eperp = epsn + sigma * df1/(df1**2 - df2**2) + df1 = f0 - 1j * freq * alpha + df2 = freq + 1j * gamma + eperp = epsn + sigma * df1 / (df1**2 - df2**2) eta = sigma * df2 / (df1**2 - df2**2) - return 2*np.pi*freq * np.sqrt(0.5*(eperp - np.sqrt(eperp**2 - eta**2))) + return 2 * np.pi * freq * np.sqrt(0.5 * (eperp - np.sqrt(eperp**2 - eta**2))) + class TestFaradayRotation(unittest.TestCase): ## Simulate a linearly polarized plane wave traveling along the gyrotropy axis. ## Extract Faraday rotation angle by comparing the Ex and Ey amplitudes, and ## compare to a theoretical result corresponding to rotation rate KPRED. ## The default acceptable tolerance TOL is 1.5 degrees. - def check_rotation(self, mat, L, fsrc, zsrc, resolution, tmax, zout, kpred, tol=1.5): + def check_rotation( + self, mat, L, fsrc, zsrc, resolution, tmax, zout, kpred, tol=1.5 + ): cell = mp.Vector3(0, 0, L) pml_layers = [mp.PML(thickness=1.0, direction=mp.Z)] - sources = [mp.Source(mp.ContinuousSource(frequency=fsrc), - component=mp.Ex, center=mp.Vector3(0, 0, zsrc))] - - self.sim = mp.Simulation(cell_size=cell, geometry=[], sources=sources, - boundary_layers=pml_layers, - default_material=mat, resolution=resolution) + sources = [ + mp.Source( + mp.ContinuousSource(frequency=fsrc), + component=mp.Ex, + center=mp.Vector3(0, 0, zsrc), + ) + ] + + self.sim = mp.Simulation( + cell_size=cell, + geometry=[], + sources=sources, + boundary_layers=pml_layers, + default_material=mat, + resolution=resolution, + ) record_Ex, record_Ey, record_t = [], [], [] @@ -46,17 +64,19 @@ def record_ex_ey(sim): record_Ey.append(sim.get_field_point(mp.Ey, mp.Vector3(0, 0, zout))) record_t.append(sim.meep_time()) - self.sim.run(mp.after_time(0.5*tmax, mp.at_every(1e-6, record_ex_ey)), until=tmax) + self.sim.run( + mp.after_time(0.5 * tmax, mp.at_every(1e-6, record_ex_ey)), until=tmax + ) ex_rel = np.amax(abs(np.fft.fft(record_Ex))) ey_rel = np.amax(abs(np.fft.fft(record_Ey))) - result = np.arctan2(ey_rel, ex_rel) * 180/np.pi + result = np.arctan2(ey_rel, ex_rel) * 180 / np.pi Ex_theory = np.abs(np.cos(kpred * (zout - zsrc)).real) Ey_theory = np.abs(np.sin(kpred * (zout - zsrc)).real) - expected = np.arctan2(Ey_theory, Ex_theory) * 180/np.pi + expected = np.arctan2(Ey_theory, Ex_theory) * 180 / np.pi - print("Rotation angle (in degrees): {}, expected {}\n".format(result, expected)) + print(f"Rotation angle (in degrees): {result}, expected {expected}\n") np.testing.assert_allclose(expected, result, atol=tol) def test_faraday_rotation(self): @@ -65,34 +85,47 @@ def test_faraday_rotation(self): resolution = 24 ## Test gyrotropic Lorentzian medium - epsn, f0, gamma, sn, b0 = 1.5, 1.0, 1e-3, 0.1, 0.15 - susc = [mp.GyrotropicLorentzianSusceptibility(frequency=f0, gamma=gamma, sigma=sn, - bias=mp.Vector3(0, 0, b0))] + epsn, f0, gamma, sn, b0 = 1.5, 1.0, 1e-3, 0.1, 0.15 + susc = [ + mp.GyrotropicLorentzianSusceptibility( + frequency=f0, gamma=gamma, sigma=sn, bias=mp.Vector3(0, 0, b0) + ) + ] mat = mp.Medium(epsilon=epsn, mu=1, E_susceptibilities=susc) k = kgyro_lorentzian(freq, epsn, f0, gamma, sn, b0) - print('=' * 24) + print("=" * 24) print("Testing Faraday rotation for gyrotropic Lorentzian model...") self.check_rotation(mat, L, freq, zsrc, resolution, tmax, zout, k) ## Test gyrotropic Drude medium - susc = [mp.GyrotropicDrudeSusceptibility(frequency=f0, gamma=gamma, sigma=sn, - bias=mp.Vector3(0, 0, b0))] + susc = [ + mp.GyrotropicDrudeSusceptibility( + frequency=f0, gamma=gamma, sigma=sn, bias=mp.Vector3(0, 0, b0) + ) + ] mat = mp.Medium(epsilon=epsn, mu=1, E_susceptibilities=susc) k = kgyro_drude(freq, epsn, f0, gamma, sn, b0) - print('=' * 24) + print("=" * 24) print("Testing Faraday rotation for gyrotropic Drude model...") self.check_rotation(mat, L, freq, zsrc, resolution, tmax, zout, k) ## Test Landau-Lifshitz-Gilbert medium alpha = 1e-5 - susc = [mp.GyrotropicSaturatedSusceptibility(frequency=f0, gamma=gamma, sigma=sn, - alpha=alpha, - bias=mp.Vector3(0, 0, 1.0))] + susc = [ + mp.GyrotropicSaturatedSusceptibility( + frequency=f0, + gamma=gamma, + sigma=sn, + alpha=alpha, + bias=mp.Vector3(0, 0, 1.0), + ) + ] mat = mp.Medium(epsilon=epsn, mu=1, E_susceptibilities=susc) k = kgyro_llg(freq, epsn, f0, gamma, sn, alpha) - print('=' * 24) + print("=" * 24) print("Testing Faraday rotation for Landau-Lifshitz-Gilbert model...") self.check_rotation(mat, L, freq, zsrc, resolution, tmax, zout, k) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_field_functions.py b/python/tests/test_field_functions.py index 33cdc41af..00acbe3ae 100644 --- a/python/tests/test_field_functions.py +++ b/python/tests/test_field_functions.py @@ -1,6 +1,7 @@ -import meep as mp import unittest +import meep as mp + def f(r, ex, hz, eps): return (r.x * r.norm() + ex) - (eps * hz) @@ -33,16 +34,19 @@ def init(self): fcen = 1.0 df = 1.0 - sources = mp.Source(src=mp.GaussianSource(fcen, fwidth=df), center=mp.Vector3(), - component=mp.Ez) + sources = mp.Source( + src=mp.GaussianSource(fcen, fwidth=df), center=mp.Vector3(), component=mp.Ez + ) symmetries = [mp.Mirror(mp.X), mp.Mirror(mp.Y)] - return mp.Simulation(resolution=resolution, - cell_size=cell, - boundary_layers=[pml_layers], - sources=[sources], - symmetries=symmetries) + return mp.Simulation( + resolution=resolution, + cell_size=cell, + boundary_layers=[pml_layers], + sources=[sources], + symmetries=symmetries, + ) def init2(self): n = 3.4 @@ -55,7 +59,7 @@ def init2(self): geometry = [ mp.Cylinder(radius=r + w, height=mp.inf, material=mp.Medium(index=n)), - mp.Cylinder(radius=r, height=mp.inf, material=mp.air) + mp.Cylinder(radius=r, height=mp.inf, material=mp.air), ] pml_layers = [mp.PML(dpml)] @@ -63,17 +67,24 @@ def init2(self): fcen = 0.118 df = 0.010 - sources = [mp.Source(src=mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, - center=mp.Vector3(r + 0.1))] + sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=df), + component=mp.Ez, + center=mp.Vector3(r + 0.1), + ) + ] symmetries = [mp.Mirror(mp.Y)] - return mp.Simulation(cell_size=cell, - resolution=resolution, - geometry=geometry, - boundary_layers=pml_layers, - sources=sources, - symmetries=symmetries) + return mp.Simulation( + cell_size=cell, + resolution=resolution, + geometry=geometry, + boundary_layers=pml_layers, + sources=sources, + symmetries=symmetries, + ) def test_integrate_field_function(self): sim = self.init() @@ -107,5 +118,6 @@ def test_max_abs_field_function(self): res = sim.max_abs_field_function(self.cs, f, self.vol) self.assertAlmostEqual(res, 0.27593732304637586) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_force.py b/python/tests/test_force.py index 5a3078bb2..a38b4c9ee 100644 --- a/python/tests/test_force.py +++ b/python/tests/test_force.py @@ -1,9 +1,9 @@ import unittest + import meep as mp class TestForce(unittest.TestCase): - def setUp(self): resolution = 20 @@ -11,21 +11,30 @@ def setUp(self): pml_layers = mp.PML(1.0) fcen = 1.0 df = 1.0 - sources = mp.Source(src=mp.GaussianSource(fcen, fwidth=df), center=mp.Vector3(), - component=mp.Ez) + sources = mp.Source( + src=mp.GaussianSource(fcen, fwidth=df), center=mp.Vector3(), component=mp.Ez + ) - self.sim = mp.Simulation(resolution=resolution, - cell_size=cell, - boundary_layers=[pml_layers], - sources=[sources]) + self.sim = mp.Simulation( + resolution=resolution, + cell_size=cell, + boundary_layers=[pml_layers], + sources=[sources], + ) fr = mp.ForceRegion(mp.Vector3(y=1.27), direction=mp.Y, size=mp.Vector3(4.38)) self.myforce = self.sim.add_force(fcen, 0, 1, fr, decimation_factor=1) - self.myforce_decimated = self.sim.add_force(fcen, 0, 1, fr, decimation_factor=10) + self.myforce_decimated = self.sim.add_force( + fcen, 0, 1, fr, decimation_factor=10 + ) def test_force(self): - self.sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mp.Vector3(), 1e-6)) + self.sim.run( + until_after_sources=mp.stop_when_fields_decayed( + 50, mp.Ez, mp.Vector3(), 1e-6 + ) + ) # Test store and load of force as numpy array fdata = self.sim.get_force_data(self.myforce) @@ -37,8 +46,10 @@ def test_force(self): self.assertAlmostEqual(f[0], -0.11039089113393187) places = 6 if mp.is_single_precision() else 7 - self.assertAlmostEqual(f[0], mp.get_forces(self.myforce_decimated)[0], places=places) + self.assertAlmostEqual( + f[0], mp.get_forces(self.myforce_decimated)[0], places=places + ) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_fragment_stats.py b/python/tests/test_fragment_stats.py index 61055ab22..2bbfe0bb3 100644 --- a/python/tests/test_fragment_stats.py +++ b/python/tests/test_fragment_stats.py @@ -1,29 +1,42 @@ import unittest + import meep as mp -def make_dft_vecs(flx_reg=None, n2f_reg=None, frc_reg=None, fldc=None, flds=None, fldw=None, fld_cmp=None): - dft_vecs = { - 'flux_regions': flx_reg, - 'n2f_regions': n2f_reg, - 'force_regions': frc_reg, - 'fields_center': fldc, - 'fields_size': flds, - 'fields_where': fldw, - 'fields_components': fld_cmp +def make_dft_vecs( + flx_reg=None, + n2f_reg=None, + frc_reg=None, + fldc=None, + flds=None, + fldw=None, + fld_cmp=None, +): + return { + "flux_regions": flx_reg, + "n2f_regions": n2f_reg, + "force_regions": frc_reg, + "fields_center": fldc, + "fields_size": flds, + "fields_where": fldw, + "fields_components": fld_cmp, } - return dft_vecs def make_sim(cell, res, pml, dims, create_gv=True, k_point=False): - sim = mp.Simulation(cell_size=cell, resolution=res, boundary_layers=pml, dimensions=dims, k_point=k_point) + sim = mp.Simulation( + cell_size=cell, + resolution=res, + boundary_layers=pml, + dimensions=dims, + k_point=k_point, + ) if create_gv: sim._create_grid_volume(False) return sim class TestFragmentStats(unittest.TestCase): - def check_stats(self, fragment, a_eps, a_mu, nonlin, susc, cond): self.assertEqual(fragment.num_anisotropic_eps_pixels, a_eps) self.assertEqual(fragment.num_anisotropic_mu_pixels, a_mu) @@ -31,40 +44,65 @@ def check_stats(self, fragment, a_eps, a_mu, nonlin, susc, cond): self.assertEqual(fragment.num_susceptibility_pixels, susc) self.assertEqual(fragment.num_nonzero_conductivity_pixels, cond) - def get_fragment_stats(self, block_size, cell_size, dims, box_center=mp.Vector3(), dft_vecs=None, - def_mat=mp.air, sym=[], geom=None, pml=[]): + def get_fragment_stats( + self, + block_size, + cell_size, + dims, + box_center=mp.Vector3(), + dft_vecs=None, + def_mat=mp.air, + sym=[], + geom=None, + pml=[], + ): mat = mp.Medium( epsilon=12, epsilon_offdiag=mp.Vector3(z=1), mu_offdiag=mp.Vector3(x=20), E_chi2_diag=mp.Vector3(1, 1), H_chi3_diag=mp.Vector3(z=1), - E_susceptibilities=[mp.LorentzianSusceptibility(), mp.NoisyLorentzianSusceptibility()], + E_susceptibilities=[ + mp.LorentzianSusceptibility(), + mp.NoisyLorentzianSusceptibility(), + ], H_susceptibilities=[mp.DrudeSusceptibility()], D_conductivity_diag=mp.Vector3(y=1), - B_conductivity_diag=mp.Vector3(x=1, z=1) + B_conductivity_diag=mp.Vector3(x=1, z=1), ) if geom is None: geom = [mp.Block(size=block_size, center=box_center, material=mat)] - sim = mp.Simulation(cell_size=cell_size, resolution=10, geometry=geom, dimensions=dims, - default_material=def_mat, symmetries=sym, boundary_layers=pml) + sim = mp.Simulation( + cell_size=cell_size, + resolution=10, + geometry=geom, + dimensions=dims, + default_material=def_mat, + symmetries=sym, + boundary_layers=pml, + ) if dft_vecs: - if dft_vecs['flux_regions']: - sim.add_flux(1, 0.5, 5, *dft_vecs['flux_regions']) - if dft_vecs['n2f_regions']: - sim.add_near2far(1, 0.5, 7, *dft_vecs['n2f_regions']) - if dft_vecs['force_regions']: - sim.add_force(1, 0.5, 9, *dft_vecs['force_regions']) - if dft_vecs['fields_components']: - sim.add_dft_fields(dft_vecs['fields_components'], 0, 1, 5, where=dft_vecs['fields_where'], - center=dft_vecs['fields_center'], size=dft_vecs['fields_size']) + if dft_vecs["flux_regions"]: + sim.add_flux(1, 0.5, 5, *dft_vecs["flux_regions"]) + if dft_vecs["n2f_regions"]: + sim.add_near2far(1, 0.5, 7, *dft_vecs["n2f_regions"]) + if dft_vecs["force_regions"]: + sim.add_force(1, 0.5, 9, *dft_vecs["force_regions"]) + if dft_vecs["fields_components"]: + sim.add_dft_fields( + dft_vecs["fields_components"], + 0, + 1, + 5, + where=dft_vecs["fields_where"], + center=dft_vecs["fields_center"], + size=dft_vecs["fields_size"], + ) gv = sim._create_grid_volume(False) - stats = sim._compute_fragment_stats(gv) - - return stats + return sim._compute_fragment_stats(gv) def _test_1d(self, sym, pml=[]): # A z=30 cell, with a size 10 block in the middle. @@ -73,18 +111,22 @@ def _test_1d(self, sym, pml=[]): dft_vecs = make_dft_vecs( [mp.FluxRegion(mp.Vector3(z=-10), size=mp.Vector3(z=10))], [mp.Near2FarRegion(mp.Vector3(), size=mp.Vector3(z=10))], - [mp.ForceRegion(mp.Vector3(z=10), direction=mp.X, size=mp.Vector3(z=10))] + [mp.ForceRegion(mp.Vector3(z=10), direction=mp.X, size=mp.Vector3(z=10))], ) - fs = self.get_fragment_stats(mp.Vector3(z=10), mp.Vector3(z=30), 1, dft_vecs=dft_vecs, sym=sym, pml=pml) + fs = self.get_fragment_stats( + mp.Vector3(z=10), mp.Vector3(z=30), 1, dft_vecs=dft_vecs, sym=sym, pml=pml + ) sym_factor = 2 if sym else 1 - self.check_stats(fs, - a_eps=300 / sym_factor, - a_mu=300 / sym_factor, - nonlin=300 / sym_factor, - susc=300 / sym_factor, - cond=300 / sym_factor) + self.check_stats( + fs, + a_eps=300 / sym_factor, + a_mu=300 / sym_factor, + nonlin=300 / sym_factor, + susc=300 / sym_factor, + cond=300 / sym_factor, + ) # Check DFT regions self.assertEqual(fs.num_dft_pixels, 40800) @@ -113,11 +155,15 @@ def test_1d_with_partial_fragment(self): # dft_flux with 2 volumes, 1 covering the first 10 units and one covering # half of the second 10 - dft_vecs = make_dft_vecs(flx_reg=[ - mp.FluxRegion(mp.Vector3(z=-9), mp.Vector3(z=8)), - mp.FluxRegion(mp.Vector3(z=-2.5), mp.Vector3(z=5)) - ]) - fs = self.get_fragment_stats(mp.Vector3(z=16), mp.Vector3(z=26), 1, dft_vecs=dft_vecs) + dft_vecs = make_dft_vecs( + flx_reg=[ + mp.FluxRegion(mp.Vector3(z=-9), mp.Vector3(z=8)), + mp.FluxRegion(mp.Vector3(z=-2.5), mp.Vector3(z=5)), + ] + ) + fs = self.get_fragment_stats( + mp.Vector3(z=16), mp.Vector3(z=26), 1, dft_vecs=dft_vecs + ) self.check_stats(fs, a_eps=260, a_mu=260, nonlin=480, susc=480, cond=480) # Check dft stats @@ -127,13 +173,21 @@ def test_1d_dft_fields(self): # A z=30 cell with a block covering the middle 10 units. # dft_fields covering first 10 units - dft_vecs = make_dft_vecs(fldc=mp.Vector3(z=-10), flds=mp.Vector3(z=10), fld_cmp=[mp.X, mp.Y]) - fs = self.get_fragment_stats(mp.Vector3(z=10), mp.Vector3(z=30), 1, dft_vecs=dft_vecs) + dft_vecs = make_dft_vecs( + fldc=mp.Vector3(z=-10), flds=mp.Vector3(z=10), fld_cmp=[mp.X, mp.Y] + ) + fs = self.get_fragment_stats( + mp.Vector3(z=10), mp.Vector3(z=30), 1, dft_vecs=dft_vecs + ) self.assertEqual(fs.num_dft_pixels, 4000) # Same test with volume instead of center and size - dft_vecs = make_dft_vecs(fldw=mp.Volume(mp.Vector3(z=-10), mp.Vector3(z=10)), fld_cmp=[mp.X, mp.Y]) - fs = self.get_fragment_stats(mp.Vector3(z=10), mp.Vector3(z=30), 1, dft_vecs=dft_vecs) + dft_vecs = make_dft_vecs( + fldw=mp.Volume(mp.Vector3(z=-10), mp.Vector3(z=10)), fld_cmp=[mp.X, mp.Y] + ) + fs = self.get_fragment_stats( + mp.Vector3(z=10), mp.Vector3(z=30), 1, dft_vecs=dft_vecs + ) self.assertEqual(fs.num_dft_pixels, 4000) def _test_2d(self, sym, pml=[]): @@ -143,10 +197,20 @@ def _test_2d(self, sym, pml=[]): dft_vecs = make_dft_vecs( [mp.FluxRegion(mp.Vector3(-10, 10), size=mp.Vector3(10, 10))], [mp.Near2FarRegion(mp.Vector3(0, 10), size=mp.Vector3(10, 10))], - [mp.ForceRegion(mp.Vector3(10, 10), direction=mp.X, size=mp.Vector3(10, 10))] + [ + mp.ForceRegion( + mp.Vector3(10, 10), direction=mp.X, size=mp.Vector3(10, 10) + ) + ], + ) + fs = self.get_fragment_stats( + mp.Vector3(10, 10), + mp.Vector3(30, 30), + 2, + dft_vecs=dft_vecs, + sym=sym, + pml=pml, ) - fs = self.get_fragment_stats(mp.Vector3(10, 10), mp.Vector3(30, 30), 2, - dft_vecs=dft_vecs, sym=sym, pml=pml) # Check fragment boxes self.assertEqual(fs.box.low.x, -15) @@ -156,12 +220,14 @@ def _test_2d(self, sym, pml=[]): # Middle fragment contains entire block sym_factor = 4 if sym else 1 - self.check_stats(fs, - a_eps=90000 / sym_factor, - a_mu=90000 / sym_factor, - nonlin=30000 / sym_factor, - susc=30000 / sym_factor, - cond=30000 / sym_factor) + self.check_stats( + fs, + a_eps=90000 / sym_factor, + a_mu=90000 / sym_factor, + nonlin=30000 / sym_factor, + susc=30000 / sym_factor, + cond=30000 / sym_factor, + ) # Check DFT regions self.assertEqual(fs.num_dft_pixels, 2040000) @@ -174,14 +240,17 @@ def test_2d_with_symmetry(self): self._test_2d([mp.Mirror(mp.X), mp.Mirror(mp.Y)]) def test_2d_with_pml_all_sides(self): - self._test_2d([], pml=[mp.PML(1, mp.Y), mp.PML(2, mp.X, mp.Low), mp.PML(3, mp.X, mp.High)]) + self._test_2d( + [], pml=[mp.PML(1, mp.Y), mp.PML(2, mp.X, mp.Low), mp.PML(3, mp.X, mp.High)] + ) self.assertEqual(self.fs.num_1d_pml_pixels, 19000) self.assertEqual(self.fs.num_2d_pml_pixels, 1000) self.assertEqual(self.fs.num_3d_pml_pixels, 0) def test_2d_with_absorbers(self): - fs = self.get_fragment_stats(mp.Vector3(10, 10), mp.Vector3(30, 30), 2, - geom=[], pml=[mp.Absorber(1)]) + fs = self.get_fragment_stats( + mp.Vector3(10, 10), mp.Vector3(30, 30), 2, geom=[], pml=[mp.Absorber(1)] + ) self.assertEqual(fs.num_1d_pml_pixels, 0) self.assertEqual(fs.num_2d_pml_pixels, 0) self.assertEqual(fs.num_3d_pml_pixels, 0) @@ -192,17 +261,29 @@ def test_2d_dft_fields(self): # dft_fields covering 20 by 20 area in center of cell. Test with volume, and center/size cmpts = [mp.Ex, mp.Ey, mp.Ez] - dft_fields_size_center = make_dft_vecs(fldc=mp.Vector3(), flds=mp.Vector3(20, 20), fld_cmp=cmpts) - dft_fields_where = make_dft_vecs(fldw=mp.Volume(mp.Vector3(), mp.Vector3(20, 20)), fld_cmp=cmpts) + dft_fields_size_center = make_dft_vecs( + fldc=mp.Vector3(), flds=mp.Vector3(20, 20), fld_cmp=cmpts + ) + dft_fields_where = make_dft_vecs( + fldw=mp.Volume(mp.Vector3(), mp.Vector3(20, 20)), fld_cmp=cmpts + ) for dft_vec in [dft_fields_size_center, dft_fields_where]: - fs = self.get_fragment_stats(mp.Vector3(10, 10), mp.Vector3(30, 30), 2, dft_vecs=dft_vec) - self.assertEqual(fs.num_dft_pixels, 300000 + 4*75000 + 4*150000) + fs = self.get_fragment_stats( + mp.Vector3(10, 10), mp.Vector3(30, 30), 2, dft_vecs=dft_vec + ) + self.assertEqual(fs.num_dft_pixels, 300000 + 4 * 75000 + 4 * 150000) def test_2d_pml_and_absorber(self): - blayers = [mp.PML(1, mp.Y, mp.High), mp.PML(2, mp.Y, mp.Low), - mp.Absorber(1, mp.X, mp.High), mp.Absorber(3, mp.X, mp.Low)] - fs = self.get_fragment_stats(mp.Vector3(), mp.Vector3(30, 30), 2, pml=blayers, geom=[]) + blayers = [ + mp.PML(1, mp.Y, mp.High), + mp.PML(2, mp.Y, mp.Low), + mp.Absorber(1, mp.X, mp.High), + mp.Absorber(3, mp.X, mp.Low), + ] + fs = self.get_fragment_stats( + mp.Vector3(), mp.Vector3(30, 30), 2, pml=blayers, geom=[] + ) self.assertEqual(fs.num_nonzero_conductivity_pixels, 12000) self.assertEqual(fs.num_1d_pml_pixels, 9000) self.assertEqual(fs.num_2d_pml_pixels, 0) @@ -216,18 +297,32 @@ def _test_3d(self, sym, pml=[]): dft_vecs = make_dft_vecs( [mp.FluxRegion(mp.Vector3(-10, -10, -10), size=mp.Vector3(10, 10, 10))], [mp.Near2FarRegion(mp.Vector3(-10, -10, 0), size=mp.Vector3(10, 10, 10))], - [mp.ForceRegion(mp.Vector3(-10, -10, 10), direction=mp.X, size=mp.Vector3(10, 10, 10))] + [ + mp.ForceRegion( + mp.Vector3(-10, -10, 10), + direction=mp.X, + size=mp.Vector3(10, 10, 10), + ) + ], + ) + fs = self.get_fragment_stats( + mp.Vector3(10, 10, 10), + mp.Vector3(30, 30, 30), + 3, + dft_vecs=dft_vecs, + sym=sym, + pml=pml, ) - fs = self.get_fragment_stats(mp.Vector3(10, 10, 10), mp.Vector3(30, 30, 30), 3, - dft_vecs=dft_vecs, sym=sym, pml=pml) sym_factor = 8 if sym else 1 - self.check_stats(fs, - a_eps=27000000 / sym_factor, - a_mu=27000000 / sym_factor, - nonlin=3000000 / sym_factor, - susc=3000000 / sym_factor, - cond=3000000 / sym_factor) + self.check_stats( + fs, + a_eps=27000000 / sym_factor, + a_mu=27000000 / sym_factor, + nonlin=3000000 / sym_factor, + susc=3000000 / sym_factor, + cond=3000000 / sym_factor, + ) # Check DFT regions self.assertEqual(fs.num_dft_pixels, 102000000) @@ -240,16 +335,25 @@ def test_3d_with_symmetry(self): self._test_3d([mp.Mirror(mp.X), mp.Mirror(mp.Y), mp.Mirror(mp.Z)]) def test_3d_with_pml(self): - self._test_3d([], pml=[mp.PML(1, mp.Y, mp.High), mp.PML(2, mp.Y, mp.Low), mp.PML(3, mp.X), - mp.PML(1, mp.Z, mp.High), mp.PML(2, mp.Z, mp.Low)]) + self._test_3d( + [], + pml=[ + mp.PML(1, mp.Y, mp.High), + mp.PML(2, mp.Y, mp.Low), + mp.PML(3, mp.X), + mp.PML(1, mp.Z, mp.High), + mp.PML(2, mp.Z, mp.Low), + ], + ) self.assertEqual(self.fs.num_1d_pml_pixels, 8262000) self.assertEqual(self.fs.num_2d_pml_pixels, 1188000) self.assertEqual(self.fs.num_3d_pml_pixels, 54000) def test_3d_with_absorbers(self): - fs = self.get_fragment_stats(mp.Vector3(), mp.Vector3(30, 30, 30), 3, - geom=[], pml=[mp.Absorber(1)]) + fs = self.get_fragment_stats( + mp.Vector3(), mp.Vector3(30, 30, 30), 3, geom=[], pml=[mp.Absorber(1)] + ) self.assertEqual(fs.num_1d_pml_pixels, 0) self.assertEqual(fs.num_2d_pml_pixels, 0) self.assertEqual(fs.num_3d_pml_pixels, 0) @@ -262,15 +366,25 @@ def test_cyl(self): dft_vecs = make_dft_vecs( [mp.FluxRegion(mp.Vector3(-10, z=10), size=mp.Vector3(10, z=10))], [mp.Near2FarRegion(mp.Vector3(0, z=10), size=mp.Vector3(10, z=10))], - [mp.ForceRegion(mp.Vector3(10, z=10), direction=mp.X, size=mp.Vector3(10, z=10))] + [ + mp.ForceRegion( + mp.Vector3(10, z=10), direction=mp.X, size=mp.Vector3(10, z=10) + ) + ], + ) + fs = self.get_fragment_stats( + mp.Vector3(10, 0, 10), + mp.Vector3(30, 0, 30), + mp.CYLINDRICAL, + dft_vecs=dft_vecs, ) - fs = self.get_fragment_stats(mp.Vector3(10, 0, 10), mp.Vector3(30, 0, 30), - mp.CYLINDRICAL, dft_vecs=dft_vecs) self.assertEqual(fs.box.low.x, -15) self.assertEqual(fs.box.low.z, -15) self.assertEqual(fs.box.high.x, 15) self.assertEqual(fs.box.high.z, 15) - self.check_stats(fs, a_eps=90000, a_mu=90000, nonlin=30000, susc=30000, cond=30000) + self.check_stats( + fs, a_eps=90000, a_mu=90000, nonlin=30000, susc=30000, cond=30000 + ) self.assertEqual(fs.num_dft_pixels, 2040000) def test_no_geometry(self): @@ -280,13 +394,20 @@ def test_no_geometry(self): mu_offdiag=mp.Vector3(x=20), E_chi2_diag=mp.Vector3(1, 1), H_chi3_diag=mp.Vector3(x=1), - E_susceptibilities=[mp.LorentzianSusceptibility(), mp.NoisyLorentzianSusceptibility()], + E_susceptibilities=[ + mp.LorentzianSusceptibility(), + mp.NoisyLorentzianSusceptibility(), + ], H_susceptibilities=[mp.DrudeSusceptibility()], D_conductivity_diag=mp.Vector3(y=1), - B_conductivity_diag=mp.Vector3(x=1, z=1) + B_conductivity_diag=mp.Vector3(x=1, z=1), + ) + fs = self.get_fragment_stats( + mp.Vector3(), mp.Vector3(10, 10), 2, def_mat=mat, geom=[] + ) + self.check_stats( + fs, a_eps=10000, a_mu=10000, nonlin=30000, susc=30000, cond=30000 ) - fs = self.get_fragment_stats(mp.Vector3(), mp.Vector3(10, 10), 2, def_mat=mat, geom=[]) - self.check_stats(fs, a_eps=10000, a_mu=10000, nonlin=30000, susc=30000, cond=30000) def test_1d_cell_smaller_than_minimum_fragment_size(self): fs = self.get_fragment_stats(mp.Vector3(z=1), mp.Vector3(z=1), 1) @@ -314,7 +435,6 @@ def test_3d_cell_smaller_than_minimum_fragment_size(self): class TestPMLToVolList(unittest.TestCase): - def check1d(self, vol, expected_min, expected_max): min_vec = vol.get_min_corner() max_vec = vol.get_max_corner() @@ -367,7 +487,9 @@ def test_1d_high_side(self): self.check1d(v1[0], 4, 5) def test_1d_two_sides_different_thickness(self): - sim = make_sim(mp.Vector3(z=10), 10, [mp.PML(1, side=mp.High), mp.PML(2, side=mp.Low)], 1) + sim = make_sim( + mp.Vector3(z=10), 10, [mp.PML(1, side=mp.High), mp.PML(2, side=mp.Low)], 1 + ) v1, v2, v3 = sim._boundary_layers_to_vol_list(sim.boundary_layers) self.assertFalse(v2) @@ -401,7 +523,7 @@ def test_2d_all_sides_different_thickness_in_X(self): pmls = [ mp.PML(thickness=1, direction=mp.Y), mp.PML(thickness=3, direction=mp.X, side=mp.High), - mp.PML(thickness=2, direction=mp.X, side=mp.Low) + mp.PML(thickness=2, direction=mp.X, side=mp.Low), ] sim = make_sim(mp.Vector3(10, 10), 10, pmls, 2) v1, v2, v3 = sim._boundary_layers_to_vol_list(sim.boundary_layers) @@ -557,7 +679,6 @@ def test_cylindrical_all_directions_all_sides(self): @unittest.skipIf(mp.count_processors() != 2, "MPI specific test") class TestChunkCommunicationArea(unittest.TestCase): - def test_2d_periodic(self): sim = make_sim(mp.Vector3(10, 6), 10, [mp.PML(1)], 2, k_point=mp.Vector3(1, 1)) max_comm = sim.get_max_chunk_communication_area() @@ -566,7 +687,9 @@ def test_2d_periodic(self): self.assertEqual(avg_comm, 220) def test_3d_periodic(self): - sim = make_sim(mp.Vector3(10, 8, 6), 10, [mp.PML(1)], 3, k_point=mp.Vector3(1, 1, 1)) + sim = make_sim( + mp.Vector3(10, 8, 6), 10, [mp.PML(1)], 3, k_point=mp.Vector3(1, 1, 1) + ) max_comm = sim.get_max_chunk_communication_area() avg_comm = sim.get_avg_chunk_communication_area() self.assertEqual(max_comm, 2360) @@ -587,5 +710,5 @@ def test_3d(self): self.assertEqual(avg_comm, 480) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_gaussianbeam.py b/python/tests/test_gaussianbeam.py index 862543e7e..b3bf83c63 100644 --- a/python/tests/test_gaussianbeam.py +++ b/python/tests/test_gaussianbeam.py @@ -1,60 +1,86 @@ -import unittest -import meep as mp import math +import unittest + import numpy as np -class TestGaussianBeamSource(unittest.TestCase): +import meep as mp + +class TestGaussianBeamSource(unittest.TestCase): def gaussian_beam(self, rot_angle): s = 14 resolution = 25 dpml = 2 - cell_size = mp.Vector3(s,s) + cell_size = mp.Vector3(s, s) boundary_layers = [mp.PML(thickness=dpml)] - beam_x0 = mp.Vector3(0,7.0) # beam focus (relative to source center) - beam_kdir = mp.Vector3(0,1,0).rotate(mp.Vector3(0,0,1),math.radians(rot_angle)) # beam propagation direction + beam_x0 = mp.Vector3(0, 7.0) # beam focus (relative to source center) + beam_kdir = mp.Vector3(0, 1, 0).rotate( + mp.Vector3(0, 0, 1), math.radians(rot_angle) + ) # beam propagation direction beam_w0 = 0.8 # beam waist radius - beam_E0 = mp.Vector3(0,0,1) - beam_x0 = beam_x0.rotate(mp.Vector3(0,0,1),math.radians(rot_angle)) + beam_E0 = mp.Vector3(0, 0, 1) + beam_x0 = beam_x0.rotate(mp.Vector3(0, 0, 1), math.radians(rot_angle)) fcen = 1 src_x = 0 - src_y = -0.5*s+dpml+1.0 - sources = [mp.GaussianBeamSource(src=mp.GaussianSource(fcen,fwidth=0.2*fcen), - center=mp.Vector3(src_x,src_y), - size=mp.Vector3(s), - beam_x0=beam_x0, - beam_kdir=beam_kdir, - beam_w0=beam_w0, - beam_E0=beam_E0)] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=boundary_layers, - sources=sources) - - cell_dft_fields = sim.add_dft_fields([mp.Ez], fcen, 0, 1, center=mp.Vector3(), size=mp.Vector3(s-2*dpml,s-2*dpml)) + src_y = -0.5 * s + dpml + 1.0 + sources = [ + mp.GaussianBeamSource( + src=mp.GaussianSource(fcen, fwidth=0.2 * fcen), + center=mp.Vector3(src_x, src_y), + size=mp.Vector3(s), + beam_x0=beam_x0, + beam_kdir=beam_kdir, + beam_w0=beam_w0, + beam_E0=beam_E0, + ) + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=boundary_layers, + sources=sources, + ) + + cell_dft_fields = sim.add_dft_fields( + [mp.Ez], + fcen, + 0, + 1, + center=mp.Vector3(), + size=mp.Vector3(s - 2 * dpml, s - 2 * dpml), + ) sim.run(until_after_sources=50) Ez_cell = sim.get_dft_array(cell_dft_fields, mp.Ez, 0) - [x,y,z,w] = sim.get_array_metadata(dft_cell=cell_dft_fields) + [x, y, z, w] = sim.get_array_metadata(dft_cell=cell_dft_fields) tol = 0.05 - idx_x = np.nonzero((np.squeeze(x) > (src_x+beam_x0.x-tol)) & (np.squeeze(x) < (src_x+beam_x0.x+tol))) - idx_y = np.nonzero((np.squeeze(y) > (src_y+beam_x0.y-tol)) & (np.squeeze(y) < (src_y+beam_x0.y+tol))) + idx_x = np.nonzero( + (np.squeeze(x) > (src_x + beam_x0.x - tol)) + & (np.squeeze(x) < (src_x + beam_x0.x + tol)) + ) + idx_y = np.nonzero( + (np.squeeze(y) > (src_y + beam_x0.y - tol)) + & (np.squeeze(y) < (src_y + beam_x0.y + tol)) + ) - Ez_beam_x0 = Ez_cell[np.squeeze(idx_x)[0],np.squeeze(idx_y)[0]] + Ez_beam_x0 = Ez_cell[np.squeeze(idx_x)[0], np.squeeze(idx_y)[0]] - frac = np.abs(Ez_beam_x0)**2 / np.amax(np.abs(Ez_cell)**2) - print("ratio of the Gaussian beam energy at the focus over the maximum beam energy for the entire cell: {}".format(frac)) + frac = np.abs(Ez_beam_x0) ** 2 / np.amax(np.abs(Ez_cell) ** 2) + print( + f"ratio of the Gaussian beam energy at the focus over the maximum beam energy for the entire cell: {frac}" + ) self.assertGreater(frac, 0.99) def test_gaussian_beam(self): self.gaussian_beam(-40) -if __name__ == '__main__': - unittest.main() + +if __name__ == "__main__": + unittest.main() diff --git a/python/tests/test_geom.py b/python/tests/test_geom.py index 4b2f3a974..7851a1675 100644 --- a/python/tests/test_geom.py +++ b/python/tests/test_geom.py @@ -1,9 +1,11 @@ import math import unittest import warnings + +import meep.geom as gm import numpy as np + import meep as mp -import meep.geom as gm def zeros(): @@ -15,7 +17,6 @@ def ones(): class TestGeom(unittest.TestCase): - def test_geometric_object_duplicates_x(self): rad = 1 s = mp.Sphere(rad) @@ -26,7 +27,7 @@ def test_geometric_object_duplicates_x(self): mp.Sphere(rad, center=mp.Vector3(x=4)), mp.Sphere(rad, center=mp.Vector3(x=3)), mp.Sphere(rad, center=mp.Vector3(x=2)), - mp.Sphere(rad, center=mp.Vector3(x=1)) + mp.Sphere(rad, center=mp.Vector3(x=1)), ] for r, e in zip(res, expected): @@ -71,9 +72,11 @@ def test_geometric_objects_duplicates(self): self.assertEqual(r.center, e.center) def test_geometric_objects_lattice_duplicates(self): - geometry_lattice = mp.Lattice(size=mp.Vector3(1, 7), - basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), - basis2=mp.Vector3(math.sqrt(3) / 2, -0.5)) + geometry_lattice = mp.Lattice( + size=mp.Vector3(1, 7), + basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), + basis2=mp.Vector3(math.sqrt(3) / 2, -0.5), + ) eps = 12 r = 0.2 @@ -97,15 +100,16 @@ def test_geometric_objects_lattice_duplicates(self): self.assertEqual(exp.radius, res.radius) def test_cartesian_to_lattice(self): - lattice = mp.Lattice(size=mp.Vector3(1, 7), - basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), - basis2=mp.Vector3(math.sqrt(3) / 2, -0.5)) + lattice = mp.Lattice( + size=mp.Vector3(1, 7), + basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), + basis2=mp.Vector3(math.sqrt(3) / 2, -0.5), + ) res = mp.cartesian_to_lattice(lattice.basis * mp.Vector3(1), lattice) self.assertEqual(res, mp.Vector3(1)) class TestSphere(unittest.TestCase): - def test_kwargs_passed_to_parent(self): s = gm.Sphere(1.0) self.assertEqual(s.material.epsilon_diag, ones()) @@ -124,9 +128,9 @@ def test_kwargs_passed_to_parent(self): def test_invalid_kwarg_raises_exception(self): with self.assertRaises(TypeError): - gm.Sphere(invalid='This is not allowed') + gm.Sphere(invalid="This is not allowed") with self.assertRaises(TypeError): - gm.Sphere(radius=1.0, oops='Nope') + gm.Sphere(radius=1.0, oops="Nope") def test_non_neg_radius_constructor(self): gm.Sphere(radius=0.0) @@ -186,7 +190,6 @@ def test_info(self): class TestCylinder(unittest.TestCase): - def test_non_neg_height_constructor(self): gm.Cylinder(radius=1.0, height=0.0) gm.Cylinder(radius=1.0, height=1.0) @@ -220,9 +223,9 @@ def test_wrong_type_exception(self): class TestWedge(unittest.TestCase): - def test_default_properties(self): import math + w = gm.Wedge(center=zeros(), radius=2.0, height=4.0, axis=gm.Vector3(0, 0, 1)) self.assertEqual(w.wedge_angle, 8 * math.atan(1)) @@ -232,37 +235,37 @@ def test_contains_point(self): class TestCone(unittest.TestCase): - def test_contains_point(self): c = gm.Cone(center=zeros(), radius=2.0, height=3.0, axis=gm.Vector3(0, 0, 1)) self.assertIn(gm.Vector3(0, 0, 1), c) class TestBlock(unittest.TestCase): - def test_contains_point(self): b = gm.Block(size=ones(), center=zeros()) self.assertIn(zeros(), b) class TestEllipsoid(unittest.TestCase): - def test_contains_point(self): e = gm.Ellipsoid(size=ones(), center=zeros()) self.assertIn(zeros(), e) class TestPrism(unittest.TestCase): - def test_contains_point(self): - vertices = [gm.Vector3(-1, 1), gm.Vector3(1, 1), gm.Vector3(1, -1), gm.Vector3(-1, -1)] + vertices = [ + gm.Vector3(-1, 1), + gm.Vector3(1, 1), + gm.Vector3(1, -1), + gm.Vector3(-1, -1), + ] p = gm.Prism(vertices, height=1) self.assertIn(zeros(), p) self.assertNotIn(gm.Vector3(2, 2), p) class TestMedium(unittest.TestCase): - def test_D_conductivity(self): m = gm.Medium(D_conductivity=2) self.assertEqual(m.D_conductivity_diag.x, 2) @@ -326,50 +329,82 @@ def check_warnings(sim, should_warn=True): for s in invalid_sources: # Check for invalid extra_materials - sim = mp.Simulation(cell_size=cell_size, resolution=resolution, sources=s, extra_materials=[mat]) + sim = mp.Simulation( + cell_size=cell_size, + resolution=resolution, + sources=s, + extra_materials=[mat], + ) check_warnings(sim) # Check for invalid geometry materials - sim = mp.Simulation(cell_size=cell_size, resolution=resolution, sources=s, geometry=geom) + sim = mp.Simulation( + cell_size=cell_size, resolution=resolution, sources=s, geometry=geom + ) check_warnings(sim) valid_sources = [ [mp.Source(mp.GaussianSource(15, fwidth=1), mp.Ez, mp.Vector3())], - [mp.Source(mp.ContinuousSource(15, width=5), mp.Ez, mp.Vector3())] + [mp.Source(mp.ContinuousSource(15, width=5), mp.Ez, mp.Vector3())], ] for s in valid_sources: - sim = mp.Simulation(cell_size=cell_size, resolution=resolution, sources=s, extra_materials=[mat]) + sim = mp.Simulation( + cell_size=cell_size, + resolution=resolution, + sources=s, + extra_materials=[mat], + ) check_warnings(sim, False) # Check DFT frequencies # Invalid extra_materials - sim = mp.Simulation(cell_size=cell_size, resolution=resolution, sources=valid_sources[0], - extra_materials=[mat]) - fregion = mp.FluxRegion(center=mp.Vector3(0, 1), size=mp.Vector3(2, 2), direction=mp.X) + sim = mp.Simulation( + cell_size=cell_size, + resolution=resolution, + sources=valid_sources[0], + extra_materials=[mat], + ) + fregion = mp.FluxRegion( + center=mp.Vector3(0, 1), size=mp.Vector3(2, 2), direction=mp.X + ) sim.add_flux(18, 6, 2, fregion, decimation_factor=1) check_warnings(sim) # Invalid geometry material - sim = mp.Simulation(cell_size=cell_size, resolution=resolution, sources=valid_sources[0], geometry=geom) + sim = mp.Simulation( + cell_size=cell_size, + resolution=resolution, + sources=valid_sources[0], + geometry=geom, + ) sim.add_flux(18, 6, 2, fregion, decimation_factor=1) check_warnings(sim) def test_transform(self): - e_sus = [mp.LorentzianSusceptibility(sigma_diag=mp.Vector3(1, 2, 3), - sigma_offdiag=mp.Vector3(12, 13, 14)), - mp.DrudeSusceptibility(sigma_diag=mp.Vector3(1, 2, 3), - sigma_offdiag=mp.Vector3(12, 13, 14))] + e_sus = [ + mp.LorentzianSusceptibility( + sigma_diag=mp.Vector3(1, 2, 3), sigma_offdiag=mp.Vector3(12, 13, 14) + ), + mp.DrudeSusceptibility( + sigma_diag=mp.Vector3(1, 2, 3), sigma_offdiag=mp.Vector3(12, 13, 14) + ), + ] - mat = mp.Medium(epsilon_diag=mp.Vector3(1, 2, 3), epsilon_offdiag=mp.Vector3(12, 13, 14), - E_susceptibilities=e_sus) + mat = mp.Medium( + epsilon_diag=mp.Vector3(1, 2, 3), + epsilon_offdiag=mp.Vector3(12, 13, 14), + E_susceptibilities=e_sus, + ) rot_angle = math.radians(23.9) - rot_matrix = mp.Matrix(mp.Vector3(math.cos(rot_angle), math.sin(rot_angle), 0), - mp.Vector3(-math.sin(rot_angle), math.cos(rot_angle), 0), - mp.Vector3(0, 0, 1)) + rot_matrix = mp.Matrix( + mp.Vector3(math.cos(rot_angle), math.sin(rot_angle), 0), + mp.Vector3(-math.sin(rot_angle), math.cos(rot_angle), 0), + mp.Vector3(0, 0, 1), + ) mat.transform(rot_matrix) expected_diag = mp.Vector3(-7.72552, 10.72552, 3) @@ -380,14 +415,21 @@ def test_transform(self): self.assertEqual(mat.mu_diag, mp.Vector3(1, 1, 1)) self.assertEqual(mat.mu_offdiag, mp.Vector3()) self.assertEqual(len(mat.E_susceptibilities), 2) - self.assertTrue(mat.E_susceptibilities[0].sigma_diag.close(expected_diag, tol=4)) - self.assertTrue(mat.E_susceptibilities[0].sigma_offdiag.close(expected_offdiag, tol=4)) - self.assertTrue(mat.E_susceptibilities[1].sigma_diag.close(expected_diag, tol=4)) - self.assertTrue(mat.E_susceptibilities[1].sigma_offdiag.close(expected_offdiag, tol=4)) + self.assertTrue( + mat.E_susceptibilities[0].sigma_diag.close(expected_diag, tol=4) + ) + self.assertTrue( + mat.E_susceptibilities[0].sigma_offdiag.close(expected_offdiag, tol=4) + ) + self.assertTrue( + mat.E_susceptibilities[1].sigma_diag.close(expected_diag, tol=4) + ) + self.assertTrue( + mat.E_susceptibilities[1].sigma_offdiag.close(expected_offdiag, tol=4) + ) class TestVector3(unittest.TestCase): - def test_use_as_numpy_array(self): v = gm.Vector3(10, 10, 10) res = np.add(v, np.array([10, 10, 10])) @@ -439,14 +481,18 @@ def test_rotate_lattice(self): v = mp.Vector3(2, 2, 2) lattice = mp.Lattice(size=mp.Vector3(1, 1)) res = v.rotate_lattice(axis, 3, lattice) - self.assertTrue(res.close(mp.Vector3(2.0, -2.262225009320625, -1.6977449770811563))) + self.assertTrue( + res.close(mp.Vector3(2.0, -2.262225009320625, -1.6977449770811563)) + ) def test_rotate_reciprocal(self): axis = mp.Vector3(1) v = mp.Vector3(2, 2, 2) lattice = mp.Lattice(size=mp.Vector3(1, 1)) res = v.rotate_reciprocal(axis, 3, lattice) - self.assertTrue(res.close(mp.Vector3(2.0, -2.262225009320625, -1.6977449770811563))) + self.assertTrue( + res.close(mp.Vector3(2.0, -2.262225009320625, -1.6977449770811563)) + ) def test_complex_norm(self): # issue #722 @@ -455,15 +501,18 @@ def test_complex_norm(self): class TestLattice(unittest.TestCase): - def test_basis(self): - lattice = mp.Lattice(size=mp.Vector3(1, 7), - basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), - basis2=mp.Vector3(math.sqrt(3) / 2, -0.5)) + lattice = mp.Lattice( + size=mp.Vector3(1, 7), + basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), + basis2=mp.Vector3(math.sqrt(3) / 2, -0.5), + ) b = lattice.basis - exp = mp.Matrix(mp.Vector3(0.8660254037844388, 0.5000000000000001), - mp.Vector3(0.8660254037844388, -0.5000000000000001), - mp.Vector3(z=1.0)) + exp = mp.Matrix( + mp.Vector3(0.8660254037844388, 0.5000000000000001), + mp.Vector3(0.8660254037844388, -0.5000000000000001), + mp.Vector3(z=1.0), + ) for e, r in zip([exp.c1, exp.c2, exp.c3], [b.c1, b.c2, b.c3]): self.assertTrue(e.close(r)) @@ -493,16 +542,14 @@ def test_row(self): self.assertEqual(self.identity.row(2), self.identity.c3) def test_mm_mult(self): - m1 = mp.Matrix(mp.Vector3(1, 2, 3), - mp.Vector3(4, 5, 6), - mp.Vector3(7, 8, 9)) - m2 = mp.Matrix(mp.Vector3(9, 8, 7), - mp.Vector3(6, 5, 4), - mp.Vector3(3, 2, 1)) + m1 = mp.Matrix(mp.Vector3(1, 2, 3), mp.Vector3(4, 5, 6), mp.Vector3(7, 8, 9)) + m2 = mp.Matrix(mp.Vector3(9, 8, 7), mp.Vector3(6, 5, 4), mp.Vector3(3, 2, 1)) res = m1 * m2 - exp = mp.Matrix(mp.Vector3(90.0, 114.0, 138.0), - mp.Vector3(54.0, 69.0, 84.0), - mp.Vector3(18.0, 24.0, 30.0)) + exp = mp.Matrix( + mp.Vector3(90.0, 114.0, 138.0), + mp.Vector3(54.0, 69.0, 84.0), + mp.Vector3(18.0, 24.0, 30.0), + ) self.matrix_eq(exp, res) @@ -520,91 +567,105 @@ def test_sub(self): self.assertEqual(result.row(2), zeros()) def test_mv_mult(self): - lattice = mp.Lattice(size=mp.Vector3(1, 7), - basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), - basis2=mp.Vector3(math.sqrt(3) / 2, -0.5)) + lattice = mp.Lattice( + size=mp.Vector3(1, 7), + basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), + basis2=mp.Vector3(math.sqrt(3) / 2, -0.5), + ) res = lattice.basis * mp.Vector3(1) exp = mp.Vector3(0.8660254037844388, 0.5000000000000001) self.assertTrue(res.close(exp)) def test_scale(self): - m = mp.Matrix(mp.Vector3(90.0, 114.0, 138.0), - mp.Vector3(54.0, 69.0, 84.0), - mp.Vector3(18.0, 24.0, 30.0)) + m = mp.Matrix( + mp.Vector3(90.0, 114.0, 138.0), + mp.Vector3(54.0, 69.0, 84.0), + mp.Vector3(18.0, 24.0, 30.0), + ) res = m.scale(0.5) - exp = mp.Matrix(mp.Vector3(45.0, 57.0, 69.0), - mp.Vector3(27.0, 34.5, 42.0), - mp.Vector3(9.0, 12.0, 15.0)) + exp = mp.Matrix( + mp.Vector3(45.0, 57.0, 69.0), + mp.Vector3(27.0, 34.5, 42.0), + mp.Vector3(9.0, 12.0, 15.0), + ) self.matrix_eq(exp, res) self.matrix_eq(exp, m * 0.5) self.matrix_eq(exp, 0.5 * m) def test_determinant(self): - m = mp.Matrix(mp.Vector3(2), - mp.Vector3(y=2), - mp.Vector3(z=2)) + m = mp.Matrix(mp.Vector3(2), mp.Vector3(y=2), mp.Vector3(z=2)) - m1 = mp.Matrix(mp.Vector3(1, 2, 3), - mp.Vector3(4, 5, 6), - mp.Vector3(7, 8, 9)) + m1 = mp.Matrix(mp.Vector3(1, 2, 3), mp.Vector3(4, 5, 6), mp.Vector3(7, 8, 9)) self.assertEqual(8, m.determinant()) self.assertEqual(0, m1.determinant()) def test_transpose(self): - m = mp.Matrix(mp.Vector3(1, 2, 3), - mp.Vector3(4, 5, 6), - mp.Vector3(7, 8, 9)) - exp = mp.Matrix(mp.Vector3(1, 4, 7), - mp.Vector3(2, 5, 8), - mp.Vector3(3, 6, 9)) + m = mp.Matrix(mp.Vector3(1, 2, 3), mp.Vector3(4, 5, 6), mp.Vector3(7, 8, 9)) + exp = mp.Matrix(mp.Vector3(1, 4, 7), mp.Vector3(2, 5, 8), mp.Vector3(3, 6, 9)) self.matrix_eq(exp, m.transpose()) def test_inverse(self): self.matrix_eq(self.identity, self.identity.inverse()) - lattice = mp.Lattice(size=mp.Vector3(1, 7), - basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), - basis2=mp.Vector3(math.sqrt(3) / 2, -0.5)) + lattice = mp.Lattice( + size=mp.Vector3(1, 7), + basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), + basis2=mp.Vector3(math.sqrt(3) / 2, -0.5), + ) res = lattice.basis.inverse() - exp = mp.Matrix(mp.Vector3(0.5773502691896256, 0.5773502691896256, -0.0), - mp.Vector3(0.9999999999999998, -0.9999999999999998, -0.0), - mp.Vector3(-0.0, -0.0, 1.0)) + exp = mp.Matrix( + mp.Vector3(0.5773502691896256, 0.5773502691896256, -0.0), + mp.Vector3(0.9999999999999998, -0.9999999999999998, -0.0), + mp.Vector3(-0.0, -0.0, 1.0), + ) self.matrix_close(exp, res) def test_get_rotation_matrix(self): result = mp.get_rotation_matrix(ones(), 5) - self.assertTrue(result.c1.close(mp.Vector3(0.5224414569754843, -0.3148559165969717, 0.7924144596214877))) - self.assertTrue(result.c2.close(mp.Vector3(0.7924144596214877, 0.5224414569754843, -0.3148559165969717))) - self.assertTrue(result.c3.close(mp.Vector3(-0.3148559165969717, 0.7924144596214877, 0.5224414569754843))) + self.assertTrue( + result.c1.close( + mp.Vector3(0.5224414569754843, -0.3148559165969717, 0.7924144596214877) + ) + ) + self.assertTrue( + result.c2.close( + mp.Vector3(0.7924144596214877, 0.5224414569754843, -0.3148559165969717) + ) + ) + self.assertTrue( + result.c3.close( + mp.Vector3(-0.3148559165969717, 0.7924144596214877, 0.5224414569754843) + ) + ) def test_conj(self): - m = mp.Matrix(mp.Vector3(x=1+1j), mp.Vector3(y=1+1j), mp.Vector3(z=1+1j)) + m = mp.Matrix(mp.Vector3(x=1 + 1j), mp.Vector3(y=1 + 1j), mp.Vector3(z=1 + 1j)) result = m.conj() - self.assertEqual(result.c1, mp.Vector3(x=1-1j)) - self.assertEqual(result.c2, mp.Vector3(y=1-1j)) - self.assertEqual(result.c3, mp.Vector3(z=1-1j)) + self.assertEqual(result.c1, mp.Vector3(x=1 - 1j)) + self.assertEqual(result.c2, mp.Vector3(y=1 - 1j)) + self.assertEqual(result.c3, mp.Vector3(z=1 - 1j)) def test_adjoint(self): - m = mp.Matrix(mp.Vector3(1+1j), mp.Vector3(1+1j), mp.Vector3(1+1j)) + m = mp.Matrix(mp.Vector3(1 + 1j), mp.Vector3(1 + 1j), mp.Vector3(1 + 1j)) getH_result = m.getH() H_result = m.H - self.assertEqual(getH_result.c1, mp.Vector3(1-1j, 1-1j, 1-1j)) + self.assertEqual(getH_result.c1, mp.Vector3(1 - 1j, 1 - 1j, 1 - 1j)) self.assertEqual(getH_result.c2, mp.Vector3()) self.assertEqual(getH_result.c3, mp.Vector3()) np.testing.assert_allclose(getH_result, H_result) def test_to_numpy_array(self): - m = mp.Matrix(mp.Vector3(1+1j), mp.Vector3(1+1j), mp.Vector3(1+1j)) + m = mp.Matrix(mp.Vector3(1 + 1j), mp.Vector3(1 + 1j), mp.Vector3(1 + 1j)) adjoint = m.H m_arr = np.array(m) np_adjoint = m_arr.conj().transpose() np.testing.assert_allclose(adjoint, np_adjoint) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_get_epsilon_grid.py b/python/tests/test_get_epsilon_grid.py index 4e4d80822..b6c5f71ce 100644 --- a/python/tests/test_get_epsilon_grid.py +++ b/python/tests/test_get_epsilon_grid.py @@ -1,77 +1,97 @@ import unittest -import parameterized + +import meep.adjoint as mpa import numpy as np +import parameterized +from meep.materials import Co, SiN + import meep as mp -try: - import meep.adjoint as mpa -except: - import adjoint as mpa -from meep.materials import SiN, Co -class TestGetEpsilonGrid(unittest.TestCase): +class TestGetEpsilonGrid(unittest.TestCase): def setUp(self): resolution = 60 - self.cell_size = mp.Vector3(1.0,1.0,0) + self.cell_size = mp.Vector3(1.0, 1.0, 0) matgrid_resolution = 200 - matgrid_size = mp.Vector3(1.0,1.0,mp.inf) - Nx, Ny = int(matgrid_size.x*matgrid_resolution), int(matgrid_size.y*matgrid_resolution) - x = np.linspace(-0.5*matgrid_size.x,0.5*matgrid_size.x,Nx) - y = np.linspace(-0.5*matgrid_size.y,0.5*matgrid_size.y,Ny) - xv, yv = np.meshgrid(x,y) + matgrid_size = mp.Vector3(1.0, 1.0, mp.inf) + Nx, Ny = int(matgrid_size.x * matgrid_resolution), int( + matgrid_size.y * matgrid_resolution + ) + x = np.linspace(-0.5 * matgrid_size.x, 0.5 * matgrid_size.x, Nx) + y = np.linspace(-0.5 * matgrid_size.y, 0.5 * matgrid_size.y, Ny) + xv, yv = np.meshgrid(x, y) rad = 0.201943 w = 0.104283 - weights = np.logical_and(np.sqrt(np.square(xv) + np.square(yv)) > rad, - np.sqrt(np.square(xv) + np.square(yv)) < rad+w, - dtype=np.double) + weights = np.logical_and( + np.sqrt(np.square(xv) + np.square(yv)) > rad, + np.sqrt(np.square(xv) + np.square(yv)) < rad + w, + dtype=np.double, + ) - matgrid = mp.MaterialGrid(mp.Vector3(Nx,Ny), - mp.air, - mp.Medium(index=3.5), - weights=weights, - do_averaging=False, - beta=0, - eta=0.5) + matgrid = mp.MaterialGrid( + mp.Vector3(Nx, Ny), + mp.air, + mp.Medium(index=3.5), + weights=weights, + do_averaging=False, + beta=0, + eta=0.5, + ) - geometry = [mp.Cylinder(center=mp.Vector3(0.35,0.1), - radius=0.1, - height=mp.inf, - material=mp.Medium(index=1.5)), - mp.Block(center=mp.Vector3(-0.15,-0.2), - size=mp.Vector3(0.2,0.24,mp.inf), - material=SiN), - mp.Block(center=mp.Vector3(-0.2,0.2), - size=mp.Vector3(0.4,0.4,mp.inf), - material=matgrid), - mp.Prism(vertices=[mp.Vector3(0.05,0.45), - mp.Vector3(0.32,0.22), - mp.Vector3(0.15,0.10)], - height=0.5, - material=Co)] + geometry = [ + mp.Cylinder( + center=mp.Vector3(0.35, 0.1), + radius=0.1, + height=mp.inf, + material=mp.Medium(index=1.5), + ), + mp.Block( + center=mp.Vector3(-0.15, -0.2), + size=mp.Vector3(0.2, 0.24, mp.inf), + material=SiN, + ), + mp.Block( + center=mp.Vector3(-0.2, 0.2), + size=mp.Vector3(0.4, 0.4, mp.inf), + material=matgrid, + ), + mp.Prism( + vertices=[ + mp.Vector3(0.05, 0.45), + mp.Vector3(0.32, 0.22), + mp.Vector3(0.15, 0.10), + ], + height=0.5, + material=Co, + ), + ] - self.sim = mp.Simulation(resolution=resolution, - cell_size=self.cell_size, - geometry=geometry, - eps_averaging=False) + self.sim = mp.Simulation( + resolution=resolution, + cell_size=self.cell_size, + geometry=geometry, + eps_averaging=False, + ) self.sim.init_sim() - @parameterized.parameterized.expand([ - (mp.Vector3(0.2,0.2), 1.1), - (mp.Vector3(-0.2,0.1), 0.7), - (mp.Vector3(-0.2,-0.25), 0.55), - (mp.Vector3(0.4,0.1), 0) - ]) + @parameterized.parameterized.expand( + [ + (mp.Vector3(0.2, 0.2), 1.1), + (mp.Vector3(-0.2, 0.1), 0.7), + (mp.Vector3(-0.2, -0.25), 0.55), + (mp.Vector3(0.4, 0.1), 0), + ] + ) def test_get_epsilon_grid(self, pt, freq): - eps_grid = self.sim.get_epsilon_grid(np.array([pt.x]), - np.array([pt.y]), - np.array([0]), - freq) + eps_grid = self.sim.get_epsilon_grid( + np.array([pt.x]), np.array([pt.y]), np.array([0]), freq + ) eps_pt = self.sim.get_epsilon_point(pt, freq) - print("eps:, ({},{}), {}, {}".format(pt.x,pt.y,eps_grid,eps_pt)) + print(f"eps:, ({pt.x},{pt.y}), {eps_grid}, {eps_pt}") self.assertAlmostEqual(np.real(eps_grid), np.real(eps_pt), places=6) self.assertAlmostEqual(np.imag(eps_grid), np.imag(eps_pt), places=6) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_get_point.py b/python/tests/test_get_point.py index 154336d92..7884aa9f6 100644 --- a/python/tests/test_get_point.py +++ b/python/tests/test_get_point.py @@ -1,107 +1,121 @@ -import meep as mp +import math import unittest + import numpy as np -import math +import meep as mp -class TestGetPoint(unittest.TestCase): +class TestGetPoint(unittest.TestCase): def test_get_point(self): - sxy = 6 # cell size - dpml = 1 # thickness of PML + sxy = 6 # cell size + dpml = 1 # thickness of PML def sinusoid(p): - r = (p.x**2+p.y**2)**0.5 - return mp.Medium(index=1.0+math.sin(2*math.pi*r)**2) + r = (p.x**2 + p.y**2) ** 0.5 + return mp.Medium(index=1.0 + math.sin(2 * math.pi * r) ** 2) - geometry = [mp.Block(center=mp.Vector3(), - size=mp.Vector3(sxy,sxy), - material=sinusoid)] + geometry = [ + mp.Block(center=mp.Vector3(), size=mp.Vector3(sxy, sxy), material=sinusoid) + ] - src = [mp.Source(mp.GaussianSource(1.0, fwidth=0.1), - component=mp.Ez, - center=mp.Vector3())] + src = [ + mp.Source( + mp.GaussianSource(1.0, fwidth=0.1), component=mp.Ez, center=mp.Vector3() + ) + ] - sim = mp.Simulation(cell_size=mp.Vector3(sxy,sxy), - geometry=geometry, - sources=src, - k_point=mp.Vector3(), - resolution=20, - symmetries=[mp.Mirror(mp.X),mp.Mirror(mp.Y)], - boundary_layers=[mp.PML(dpml)]) + sim = mp.Simulation( + cell_size=mp.Vector3(sxy, sxy), + geometry=geometry, + sources=src, + k_point=mp.Vector3(), + resolution=20, + symmetries=[mp.Mirror(mp.X), mp.Mirror(mp.Y)], + boundary_layers=[mp.PML(dpml)], + ) sim.run(until_after_sources=100) ## reference values for Ez and epsilon from serial run - ez_ref = [ -0.0002065983, - -0.0001954795, - -0.0000453570, - 0.0000311267, - -0.0000121473, - -0.0000410032, - -0.0000341301, - -0.0000275021, - -0.0000397990, - -0.0000351730, - 0.0000079602, - 0.0000227437, - -0.0001092821, - -0.0002202751, - -0.0001408186, - 0.0006325076, - 0.0024890489, - 0.0027476069, - 0.0014815873, - 0.0004714913, - -0.0004332029, - -0.0007101315, - -0.0003818581, - -0.0000748507, - 0.0001408819, - 0.0001119776, - 0.0000395008, - 0.0000078844, - -0.0000010431 ] + ez_ref = [ + -0.0002065983, + -0.0001954795, + -0.0000453570, + 0.0000311267, + -0.0000121473, + -0.0000410032, + -0.0000341301, + -0.0000275021, + -0.0000397990, + -0.0000351730, + 0.0000079602, + 0.0000227437, + -0.0001092821, + -0.0002202751, + -0.0001408186, + 0.0006325076, + 0.0024890489, + 0.0027476069, + 0.0014815873, + 0.0004714913, + -0.0004332029, + -0.0007101315, + -0.0003818581, + -0.0000748507, + 0.0001408819, + 0.0001119776, + 0.0000395008, + 0.0000078844, + -0.0000010431, + ] - eps_ref = [ 1.6458346134, - 1.2752837068, - 1.0974010956, - 1.0398089537, - 1.0465784716, - 1.0779924737, - 1.1059439286, - 1.1135579291, - 1.0971979186, - 1.0653178566, - 1.0391657283, - 1.0513779677, - 1.1466009312, - 1.3882154483, - 1.8496939317, - 2.5617731415, - 3.3788212533, - 3.9019494270, - 3.6743431894, - 2.7285622651, - 1.6635165033, - 1.0891237010, - 1.1485969863, - 1.9498398061, - 3.3100416367, - 3.9038800599, - 2.8471862395, - 1.4742605488, - 1.0370162714 ] + eps_ref = [ + 1.6458346134, + 1.2752837068, + 1.0974010956, + 1.0398089537, + 1.0465784716, + 1.0779924737, + 1.1059439286, + 1.1135579291, + 1.0971979186, + 1.0653178566, + 1.0391657283, + 1.0513779677, + 1.1466009312, + 1.3882154483, + 1.8496939317, + 2.5617731415, + 3.3788212533, + 3.9019494270, + 3.6743431894, + 2.7285622651, + 1.6635165033, + 1.0891237010, + 1.1485969863, + 1.9498398061, + 3.3100416367, + 3.9038800599, + 2.8471862395, + 1.4742605488, + 1.0370162714, + ] - x = np.linspace(-0.865692,2.692867,29) + x = np.linspace(-0.865692, 2.692867, 29) places = 5 if mp.is_single_precision() else 10 for j in range(x.size): - self.assertAlmostEqual(np.real(sim.get_field_point(mp.Ez, mp.Vector3(x[j],-0.394862))), - ez_ref[j], - places=places) - self.assertAlmostEqual(sim.get_epsilon_point(mp.Vector3(x[j],2.967158)), - eps_ref[j], - places=places) + self.assertAlmostEqual( + np.real(sim.get_field_point(mp.Ez, mp.Vector3(x[j], -0.394862))), + ez_ref[j], + places=places, + ) + self.assertAlmostEqual( + sim.get_epsilon_point(mp.Vector3(x[j], 2.967158)), + eps_ref[j], + places=places, + ) + -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_holey_wvg_bands.py b/python/tests/test_holey_wvg_bands.py index 1e51bef6b..73c6474a9 100644 --- a/python/tests/test_holey_wvg_bands.py +++ b/python/tests/test_holey_wvg_bands.py @@ -1,12 +1,14 @@ -import meep as mp import unittest +import meep as mp -class TestHoleyWvgBands(unittest.TestCase): +class TestHoleyWvgBands(unittest.TestCase): def setUp(self): cell = mp.Vector3(1, 12) - b = mp.Block(size=mp.Vector3(mp.inf, 1.2, mp.inf), material=mp.Medium(epsilon=13)) + b = mp.Block( + size=mp.Vector3(mp.inf, 1.2, mp.inf), material=mp.Medium(epsilon=13) + ) c = mp.Cylinder(0.36) self.fcen = 0.25 @@ -15,7 +17,7 @@ def setUp(self): s = mp.Source( src=mp.GaussianSource(self.fcen, fwidth=self.df), component=mp.Hz, - center=mp.Vector3(0.1234) + center=mp.Vector3(0.1234), ) sym = mp.Mirror(direction=mp.Y, phase=-1) @@ -26,20 +28,22 @@ def setUp(self): sources=[s], symmetries=[sym], boundary_layers=[mp.PML(1, direction=mp.Y)], - resolution=20 + resolution=20, ) def test_run_k_points(self): - all_freqs = self.sim.run_k_points(5, mp.interpolate(19, [mp.Vector3(), mp.Vector3(0.5)])) + all_freqs = self.sim.run_k_points( + 5, mp.interpolate(19, [mp.Vector3(), mp.Vector3(0.5)]) + ) expected = [ (0.1942497850393511, 0.001381460274205755), (0.19782709203322993, -0.0013233828667934015), (0.1927618763491877, 0.001034260690735336), - (0.19335527231544278, 4.6649450258959025e-4) + (0.19335527231544278, 4.6649450258959025e-4), ] - self.assertTrue(any(l for l in all_freqs)) + self.assertTrue(any(all_freqs)) for (r, i), f in zip(expected, all_freqs[17:21][0]): self.assertAlmostEqual(r, f.real) self.assertAlmostEqual(i, f.imag) @@ -71,5 +75,5 @@ def test_fields_at_kx(self): self.assertAlmostEqual(m.decay, i, places=places) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_holey_wvg_cavity.py b/python/tests/test_holey_wvg_cavity.py index a66998d28..29333b579 100644 --- a/python/tests/test_holey_wvg_cavity.py +++ b/python/tests/test_holey_wvg_cavity.py @@ -1,10 +1,11 @@ -import meep as mp -from utils import ApproxComparisonTestCase import unittest +from utils import ApproxComparisonTestCase -class TestHoleyWvgCavity(ApproxComparisonTestCase): +import meep as mp + +class TestHoleyWvgCavity(ApproxComparisonTestCase): def setUp(self): eps = 13 self.w = 1.2 @@ -21,22 +22,23 @@ def setUp(self): cell = mp.Vector3(self.sx, sy, 0) - blk = mp.Block(size=mp.Vector3(mp.inf, self.w, mp.inf), - material=mp.Medium(epsilon=eps)) + blk = mp.Block( + size=mp.Vector3(mp.inf, self.w, mp.inf), material=mp.Medium(epsilon=eps) + ) geometry = [blk] - for i in range(3): - geometry.append(mp.Cylinder(r, center=mp.Vector3(d / 2 + i))) - + geometry.extend(mp.Cylinder(r, center=mp.Vector3(d / 2 + i)) for i in range(3)) for i in range(3): geometry.append(mp.Cylinder(r, center=mp.Vector3(d / -2 - i))) - self.sim = mp.Simulation(cell_size=cell, - geometry=geometry, - sources=[], - boundary_layers=[mp.PML(self.dpml)], - resolution=20) + self.sim = mp.Simulation( + cell_size=cell, + geometry=geometry, + sources=[], + boundary_layers=[mp.PML(self.dpml)], + resolution=20, + ) @classmethod def setUpClass(cls): @@ -47,17 +49,19 @@ def tearDownClass(cls): mp.delete_directory(cls.temp_dir) def test_resonant_modes(self): - self.sim.sources = [mp.Source(mp.GaussianSource(self.fcen, fwidth=self.df), - mp.Hz, mp.Vector3())] + self.sim.sources = [ + mp.Source(mp.GaussianSource(self.fcen, fwidth=self.df), mp.Hz, mp.Vector3()) + ] - self.sim.symmetries = [mp.Mirror(mp.Y, phase=-1), - mp.Mirror(mp.X, phase=-1)] + self.sim.symmetries = [mp.Mirror(mp.Y, phase=-1), mp.Mirror(mp.X, phase=-1)] self.sim.use_output_directory(self.temp_dir) h = mp.Harminv(mp.Hz, mp.Vector3(), self.fcen, self.df) - self.sim.run(mp.at_beginning(mp.output_epsilon), - mp.after_sources(h), - until_after_sources=400) + self.sim.run( + mp.at_beginning(mp.output_epsilon), + mp.after_sources(h), + until_after_sources=400, + ) expected = [ 0.23445415346009466, @@ -125,21 +129,29 @@ def test_transmission_spectrum(self): ] self.sim.sources = [ - mp.Source(mp.GaussianSource(self.fcen, fwidth=self.df), mp.Ey, - mp.Vector3(self.dpml + (-0.5 * self.sx)), size=mp.Vector3(0, self.w)) + mp.Source( + mp.GaussianSource(self.fcen, fwidth=self.df), + mp.Ey, + mp.Vector3(self.dpml + (-0.5 * self.sx)), + size=mp.Vector3(0, self.w), + ) ] self.sim.symmetries = [mp.Mirror(mp.Y, phase=-1)] - freg = mp.FluxRegion(center=mp.Vector3((0.5 * self.sx) - self.dpml - 0.5), - size=mp.Vector3(0, 2 * self.w)) + freg = mp.FluxRegion( + center=mp.Vector3((0.5 * self.sx) - self.dpml - 0.5), + size=mp.Vector3(0, 2 * self.w), + ) - trans = self.sim.add_flux(self.fcen, self.df, self.nfreq, freg, - decimation_factor=1) + trans = self.sim.add_flux( + self.fcen, self.df, self.nfreq, freg, decimation_factor=1 + ) self.sim.run( until_after_sources=mp.stop_when_fields_decayed( - 50, mp.Ey, mp.Vector3((0.5 * self.sx) - self.dpml - 0.5, 0), 1e-1) + 50, mp.Ey, mp.Vector3((0.5 * self.sx) - self.dpml - 0.5, 0), 1e-1 + ) ) res = zip(mp.get_flux_freqs(trans), mp.get_fluxes(trans)) @@ -149,6 +161,5 @@ def test_transmission_spectrum(self): self.assertClose(e, r, epsilon=tol) - -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_integrated_source.py b/python/tests/test_integrated_source.py index 61717090b..67246bf07 100644 --- a/python/tests/test_integrated_source.py +++ b/python/tests/test_integrated_source.py @@ -1,24 +1,32 @@ import unittest -import meep as mp + import numpy as np +import meep as mp + # Test that is_integrated=True source correctly generates planewaves # for sources extending into the PML, as in this tutorial: # https://meep.readthedocs.io/en/latest/Perfectly_Matched_Layer/#planewave-sources-extending-into-pml # Regression test for issue #2043. -class TestIntegratedSource(unittest.TestCase): +class TestIntegratedSource(unittest.TestCase): def test_integrated_source(self): - sources = [mp.Source(mp.ContinuousSource(1,is_integrated=True), - center=mp.Vector3(-2), - size=mp.Vector3(y=6), - component=mp.Ez)] - sim = mp.Simulation(resolution=20, - cell_size=(6,6), - boundary_layers=[mp.PML(thickness=1)], - sources=sources, - k_point=mp.Vector3()) + sources = [ + mp.Source( + mp.ContinuousSource(1, is_integrated=True), + center=mp.Vector3(-2), + size=mp.Vector3(y=6), + component=mp.Ez, + ) + ] + sim = mp.Simulation( + resolution=20, + cell_size=(6, 6), + boundary_layers=[mp.PML(thickness=1)], + sources=sources, + k_point=mp.Vector3(), + ) sim.run(until=30) # field in mid-plane should be nearly constant, @@ -26,7 +34,8 @@ def test_integrated_source(self): ez = sim.get_array(mp.Ez, center=mp.Vector3(2), size=mp.Vector3(y=6)) std = np.std(ez) / np.sqrt(np.mean(ez**2)) print("std = ", std) - self.assertAlmostEqual(std, 0.0, places = 4 if mp.is_single_precision() else 8) + self.assertAlmostEqual(std, 0.0, places=4 if mp.is_single_precision() else 8) + -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_kdom.py b/python/tests/test_kdom.py index 0711831c1..749915459 100644 --- a/python/tests/test_kdom.py +++ b/python/tests/test_kdom.py @@ -1,51 +1,61 @@ +import math import unittest + import meep as mp -import math + class TestKdom(unittest.TestCase): + def run_kdom(self, theta, num_band): + + resolution = 20 # pixels/um + + sx = 5 + sy = 10 + cell_size = mp.Vector3(sx, sy, 0) + + fcen = 1 # center frequency (wavelength = 1 um) + ng = 1.5 + glass = mp.Medium(index=ng) + + # angle of incident planewave; CCW about Y axis, 0 degrees along +X axis + theta_in = math.radians(theta) + + # k (in source medium) with correct length (plane of incidence: XY) + k = mp.Vector3(math.cos(theta_in), math.sin(theta_in), 0).scale(fcen * ng) + + symmetries = [] + eig_parity = mp.ODD_Z + if theta_in == 0: + k = mp.Vector3(0, 0, 0) + eig_parity += mp.EVEN_Y + symmetries = [mp.Mirror(mp.Y)] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + k_point=k, + symmetries=symmetries, + default_material=glass, + ) + + sim.init_sim() + + EigenmodeData = sim.get_eigenmode( + fcen, + mp.X, + mp.Volume(center=mp.Vector3(0.3 * sx, 0, 0), size=mp.Vector3(0, sy, 0)), + num_band, + k, + parity=eig_parity, + ) + kdom = EigenmodeData.kdom + + self.assertAlmostEqual(k.y, kdom.y, places=15) + + def test_kdom(self): + self.run_kdom(10.7, 6) + self.run_kdom(22.9, 12) + - def run_kdom(self, theta, num_band): - - resolution = 20 # pixels/um - - sx = 5 - sy = 10 - cell_size = mp.Vector3(sx,sy,0) - - fcen = 1 # center frequency (wavelength = 1 um) - ng = 1.5 - glass = mp.Medium(index=ng) - - # angle of incident planewave; CCW about Y axis, 0 degrees along +X axis - theta_in = math.radians(theta) - - # k (in source medium) with correct length (plane of incidence: XY) - k = mp.Vector3(math.cos(theta_in),math.sin(theta_in),0).scale(fcen*ng) - - symmetries = [] - eig_parity = mp.ODD_Z - if theta_in == 0: - k = mp.Vector3(0,0,0) - eig_parity += mp.EVEN_Y - symmetries = [mp.Mirror(mp.Y)] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - k_point=k, - symmetries=symmetries, - default_material=glass) - - sim.init_sim() - - EigenmodeData = sim.get_eigenmode(fcen, mp.X, mp.Volume(center=mp.Vector3(0.3*sx,0,0), size=mp.Vector3(0,sy,0)), - num_band, k, parity=eig_parity) - kdom = EigenmodeData.kdom - - self.assertAlmostEqual(k.y,kdom.y,places=15) - - def test_kdom(self): - self.run_kdom(10.7, 6) - self.run_kdom(22.9, 12) - -if __name__ == '__main__': - unittest.main() +if __name__ == "__main__": + unittest.main() diff --git a/python/tests/test_ldos.py b/python/tests/test_ldos.py index 9807ad6f8..51e9224bc 100644 --- a/python/tests/test_ldos.py +++ b/python/tests/test_ldos.py @@ -1,5 +1,7 @@ import unittest + import numpy as np + import meep as mp # Computes the Purcell enhancement factor of a parallel dipole in a planar @@ -9,184 +11,214 @@ class TestLDOS(unittest.TestCase): - @classmethod def setUp(cls): cls.resolution = 25 # pixels/μm - cls.dpml = 0.5 # thickness of PML - cls.L = 6.0 # length of non-PML region - cls.n = 2.4 # refractive index of surrounding medium - cls.wvl = 1.0 # wavelength (in vacuum) - - cls.fcen = 1/cls.wvl + cls.dpml = 0.5 # thickness of PML + cls.L = 6.0 # length of non-PML region + cls.n = 2.4 # refractive index of surrounding medium + cls.wvl = 1.0 # wavelength (in vacuum) + cls.fcen = 1 / cls.wvl def bulk_ldos_cyl(self): - sr = self.L+self.dpml - sz = self.L+2*self.dpml - cell_size = mp.Vector3(sr,0,sz) + sr = self.L + self.dpml + sz = self.L + 2 * self.dpml + cell_size = mp.Vector3(sr, 0, sz) pml_layers = [mp.PML(self.dpml)] - sources = [mp.Source(src=mp.GaussianSource(self.fcen,fwidth=0.2*self.fcen), - component=mp.Er, - center=mp.Vector3())] - - sim = mp.Simulation(resolution=self.resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - sources=sources, - dimensions=mp.CYLINDRICAL, - m=-1, - default_material=mp.Medium(index=self.n)) - - sim.run(mp.dft_ldos(self.fcen,0,1), - until_after_sources=mp.stop_when_fields_decayed(20, - mp.Er, - mp.Vector3(), - 1e-6)) + sources = [ + mp.Source( + src=mp.GaussianSource(self.fcen, fwidth=0.2 * self.fcen), + component=mp.Er, + center=mp.Vector3(), + ) + ] + + sim = mp.Simulation( + resolution=self.resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + sources=sources, + dimensions=mp.CYLINDRICAL, + m=-1, + default_material=mp.Medium(index=self.n), + ) + + sim.run( + mp.dft_ldos(self.fcen, 0, 1), + until_after_sources=mp.stop_when_fields_decayed( + 20, mp.Er, mp.Vector3(), 1e-6 + ), + ) return sim.ldos_data[0] - - def cavity_ldos_cyl(self,sz): - sr = self.L+self.dpml - cell_size = mp.Vector3(sr,0,sz) - - pml_layers = [mp.PML(self.dpml,direction=mp.R)] - - sources = [mp.Source(src=mp.GaussianSource(self.fcen,fwidth=0.2*self.fcen), - component=mp.Er, - center=mp.Vector3())] - - sim = mp.Simulation(resolution=self.resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - sources=sources, - dimensions=mp.CYLINDRICAL, - m=-1, - default_material=mp.Medium(index=self.n)) - - sim.run(mp.dft_ldos(self.fcen,0,1), - until_after_sources=mp.stop_when_fields_decayed(20, - mp.Er, - mp.Vector3(), - 1e-6)) + def cavity_ldos_cyl(self, sz): + sr = self.L + self.dpml + cell_size = mp.Vector3(sr, 0, sz) + + pml_layers = [mp.PML(self.dpml, direction=mp.R)] + + sources = [ + mp.Source( + src=mp.GaussianSource(self.fcen, fwidth=0.2 * self.fcen), + component=mp.Er, + center=mp.Vector3(), + ) + ] + + sim = mp.Simulation( + resolution=self.resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + sources=sources, + dimensions=mp.CYLINDRICAL, + m=-1, + default_material=mp.Medium(index=self.n), + ) + + sim.run( + mp.dft_ldos(self.fcen, 0, 1), + until_after_sources=mp.stop_when_fields_decayed( + 20, mp.Er, mp.Vector3(), 1e-6 + ), + ) return sim.ldos_data[0] - def bulk_ldos_3D(self): - s = self.L+2*self.dpml - cell_size = mp.Vector3(s,s,s) + s = self.L + 2 * self.dpml + cell_size = mp.Vector3(s, s, s) pml_layers = [mp.PML(self.dpml)] - sources = [mp.Source(src=mp.GaussianSource(self.fcen,fwidth=0.2*self.fcen), - component=mp.Ex, - center=mp.Vector3())] - - symmetries = [mp.Mirror(direction=mp.X,phase=-1), - mp.Mirror(direction=mp.Y), - mp.Mirror(direction=mp.Z)] - - sim = mp.Simulation(resolution=self.resolution, - cell_size=cell_size, - boundary_layers=pml_layers, - sources=sources, - symmetries=symmetries, - default_material=mp.Medium(index=self.n)) - - sim.run(mp.dft_ldos(self.fcen,0,1), - until_after_sources=mp.stop_when_fields_decayed(20, - mp.Ex, - mp.Vector3(), - 1e-6)) + sources = [ + mp.Source( + src=mp.GaussianSource(self.fcen, fwidth=0.2 * self.fcen), + component=mp.Ex, + center=mp.Vector3(), + ) + ] + + symmetries = [ + mp.Mirror(direction=mp.X, phase=-1), + mp.Mirror(direction=mp.Y), + mp.Mirror(direction=mp.Z), + ] + + sim = mp.Simulation( + resolution=self.resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + sources=sources, + symmetries=symmetries, + default_material=mp.Medium(index=self.n), + ) + + sim.run( + mp.dft_ldos(self.fcen, 0, 1), + until_after_sources=mp.stop_when_fields_decayed( + 20, mp.Ex, mp.Vector3(), 1e-6 + ), + ) return sim.ldos_data[0] - - def cavity_ldos_3D(self,sz): - sxy = self.L+2*self.dpml - cell_size = mp.Vector3(sxy,sxy,sz) - - boundary_layers = [mp.PML(self.dpml,direction=mp.X), - mp.PML(self.dpml,direction=mp.Y)] - - sources = [mp.Source(src=mp.GaussianSource(self.fcen,fwidth=0.2*self.fcen), - component=mp.Ex, - center=mp.Vector3())] - - symmetries = [mp.Mirror(direction=mp.X,phase=-1), - mp.Mirror(direction=mp.Y), - mp.Mirror(direction=mp.Z)] - - sim = mp.Simulation(resolution=self.resolution, - cell_size=cell_size, - boundary_layers=boundary_layers, - sources=sources, - symmetries=symmetries, - default_material=mp.Medium(index=self.n)) - - sim.run(mp.dft_ldos(ldos=mp.Ldos(self.fcen,0,1)), - until_after_sources=mp.stop_when_fields_decayed(20, - mp.Ex, - mp.Vector3(), - 1e-6)) + def cavity_ldos_3D(self, sz): + sxy = self.L + 2 * self.dpml + cell_size = mp.Vector3(sxy, sxy, sz) + + boundary_layers = [ + mp.PML(self.dpml, direction=mp.X), + mp.PML(self.dpml, direction=mp.Y), + ] + + sources = [ + mp.Source( + src=mp.GaussianSource(self.fcen, fwidth=0.2 * self.fcen), + component=mp.Ex, + center=mp.Vector3(), + ) + ] + + symmetries = [ + mp.Mirror(direction=mp.X, phase=-1), + mp.Mirror(direction=mp.Y), + mp.Mirror(direction=mp.Z), + ] + + sim = mp.Simulation( + resolution=self.resolution, + cell_size=cell_size, + boundary_layers=boundary_layers, + sources=sources, + symmetries=symmetries, + default_material=mp.Medium(index=self.n), + ) + + sim.run( + mp.dft_ldos(ldos=mp.Ldos(self.fcen, 0, 1)), + until_after_sources=mp.stop_when_fields_decayed( + 20, mp.Ex, mp.Vector3(), 1e-6 + ), + ) return sim.ldos_data[0] - - def purcell_enh_theory(self,c): + def purcell_enh_theory(self, c): # equation 7 of reference - return (3*np.fix(c+0.5)/(4*c) + - (4*np.power(np.fix(c+0.5),3) - - np.fix(c+0.5))/(16*np.power(c,3))) - + return 3 * np.fix(c + 0.5) / (4 * c) + ( + 4 * np.power(np.fix(c + 0.5), 3) - np.fix(c + 0.5) + ) / (16 * np.power(c, 3)) def test_ldos_cyl(self): ldos_bulk = self.bulk_ldos_cyl() # not a Van Hove singularity cavity_thickness = 1.63 - gap = cavity_thickness*self.wvl/self.n + gap = cavity_thickness * self.wvl / self.n ldos_cavity = self.cavity_ldos_cyl(gap) # Purcell enhancement factor (relative to bulk medium) - pe_meep = ldos_cavity/ldos_bulk + pe_meep = ldos_cavity / ldos_bulk pe_theory = self.purcell_enh_theory(cavity_thickness) - rel_err = abs(pe_meep-pe_theory)/pe_theory + rel_err = abs(pe_meep - pe_theory) / pe_theory - print("ldos-cyl:, {:.6f} (Meep), {:.6f} (theory), " - "{:.6f} (error)".format(pe_meep,pe_theory,rel_err)) + print( + "ldos-cyl:, {:.6f} (Meep), {:.6f} (theory), " + "{:.6f} (error)".format(pe_meep, pe_theory, rel_err) + ) self.assertAlmostEqual(pe_meep, pe_theory, delta=0.1) - def test_ldos_3D(self): ldos_bulk = self.bulk_ldos_3D() # not a Van Hove singularity cavity_thickness = 0.75 - gap = cavity_thickness*self.wvl/self.n + gap = cavity_thickness * self.wvl / self.n ldos_cavity = self.cavity_ldos_3D(gap) # Purcell enhancement factor (relative to bulk medium) - pe_meep = ldos_cavity/ldos_bulk + pe_meep = ldos_cavity / ldos_bulk pe_theory = self.purcell_enh_theory(cavity_thickness) - rel_err = abs(pe_meep-pe_theory)/pe_theory + rel_err = abs(pe_meep - pe_theory) / pe_theory - print("ldos-3D:, {:.6f} (Meep), {:.6f} (theory), " - "{:.6f} (error)".format(pe_meep,pe_theory,rel_err)) + print( + "ldos-3D:, {:.6f} (Meep), {:.6f} (theory), " + "{:.6f} (error)".format(pe_meep, pe_theory, rel_err) + ) self.assertAlmostEqual(pe_meep, pe_theory, delta=0.1) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_material_dispersion.py b/python/tests/test_material_dispersion.py index 220df72c1..91d2f9c39 100644 --- a/python/tests/test_material_dispersion.py +++ b/python/tests/test_material_dispersion.py @@ -1,14 +1,15 @@ import unittest + import numpy as np + import meep as mp class TestMaterialDispersion(unittest.TestCase): - def test_material_dispersion_with_user_material(self): susceptibilities = [ mp.LorentzianSusceptibility(frequency=1.1, gamma=1e-5, sigma=0.5), - mp.LorentzianSusceptibility(frequency=0.5, gamma=0.1, sigma=2e-5) + mp.LorentzianSusceptibility(frequency=0.5, gamma=0.1, sigma=2e-5), ] def mat_func(p): @@ -18,9 +19,7 @@ def mat_func(p): df = 2.0 sources = mp.Source( - mp.GaussianSource(fcen, fwidth=df), - component=mp.Ez, - center=mp.Vector3() + mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=mp.Vector3() ) kmin = 0.3 @@ -35,7 +34,7 @@ def mat_func(p): sources=[sources], material_function=mat_func, default_material=mp.air, - resolution=20 + resolution=20, ) all_freqs = self.sim.run_k_points(200, kpts) @@ -54,5 +53,5 @@ def mat_func(p): np.testing.assert_allclose(expected, res) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_material_grid.py b/python/tests/test_material_grid.py index c50d0dff2..284b5c4ed 100644 --- a/python/tests/test_material_grid.py +++ b/python/tests/test_material_grid.py @@ -1,149 +1,183 @@ import meep as mp + try: import meep.adjoint as mpa except: import adjoint as mpa + +import unittest + import numpy as np from scipy.ndimage import gaussian_filter -import unittest def compute_transmittance(matgrid_symmetry=False): - resolution = 25 - - cell_size = mp.Vector3(6,6,0) - - boundary_layers = [mp.PML(thickness=1.0)] - - matgrid_size = mp.Vector3(2,2,0) - matgrid_resolution = 2*resolution - - Nx, Ny = int(matgrid_size.x*matgrid_resolution), int(matgrid_size.y*matgrid_resolution) - - # ensure reproducible results - rng = np.random.RandomState(2069588) - - w = rng.rand(Nx,Ny) - weights = 0.5 * (w + np.fliplr(w)) if not matgrid_symmetry else w - - matgrid = mp.MaterialGrid(mp.Vector3(Nx,Ny), - mp.air, - mp.Medium(index=3.5), - weights=weights, - do_averaging=False, - grid_type='U_MEAN') - - geometry = [mp.Block(center=mp.Vector3(), - size=mp.Vector3(mp.inf,1.0,mp.inf), - material=mp.Medium(index=3.5)), - mp.Block(center=mp.Vector3(), - size=mp.Vector3(matgrid_size.x,matgrid_size.y,0), - material=matgrid)] - - if matgrid_symmetry: - geometry.append(mp.Block(center=mp.Vector3(), - size=mp.Vector3(matgrid_size.x,matgrid_size.y,0), - material=matgrid, - e2=mp.Vector3(y=-1))) - - eig_parity = mp.ODD_Y + mp.EVEN_Z - - fcen = 0.65 - df = 0.2*fcen - sources = [mp.EigenModeSource(src=mp.GaussianSource(fcen,fwidth=df), - center=mp.Vector3(-2.0,0), - size=mp.Vector3(0,4.0), - eig_parity=eig_parity)] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=boundary_layers, - sources=sources, - geometry=geometry) - - mode_mon = sim.add_flux(fcen, - 0, - 1, - mp.FluxRegion(center=mp.Vector3(2.0,0), - size=mp.Vector3(0,4.0))) - - sim.run(until_after_sources=mp.stop_when_dft_decayed()) - - mode_coeff = sim.get_eigenmode_coefficients(mode_mon,[1],eig_parity).alpha[0,:,0][0] - - tran = np.power(np.abs(mode_coeff),2) - print('tran:, {}, {}'.format("sym" if matgrid_symmetry else "nosym", tran)) - - return tran - - -def compute_resonant_mode_2d(res,default_mat=False): - cell_size = mp.Vector3(1,1,0) - - rad = 0.301943 - - fcen = 0.3 - df = 0.2*fcen - sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df), - component=mp.Hz, - center=mp.Vector3(-0.1057,0.2094,0))] - - k_point = mp.Vector3(0.3892,0.1597,0) - - matgrid_size = mp.Vector3(1,1,0) - matgrid_resolution = 1200 - - # for a fixed resolution, compute the number of grid points - # necessary which are defined on the corners of the voxels - Nx, Ny = int(matgrid_size.x*matgrid_resolution), int(matgrid_size.y*matgrid_resolution) - - x = np.linspace(-0.5*matgrid_size.x,0.5*matgrid_size.x,Nx) - y = np.linspace(-0.5*matgrid_size.y,0.5*matgrid_size.y,Ny) - xv, yv = np.meshgrid(x,y) - weights = np.sqrt(np.square(xv) + np.square(yv)) < rad - filtered_weights = gaussian_filter(weights, - sigma=3.0, - output=np.double) + resolution = 25 - matgrid = mp.MaterialGrid(mp.Vector3(Nx,Ny), - mp.air, - mp.Medium(index=3.5), - weights=filtered_weights, - do_averaging=True, - beta=1000, - eta=0.5) + cell_size = mp.Vector3(6, 6, 0) + + boundary_layers = [mp.PML(thickness=1.0)] + + matgrid_size = mp.Vector3(2, 2, 0) + matgrid_resolution = 2 * resolution + + Nx, Ny = int(matgrid_size.x * matgrid_resolution), int( + matgrid_size.y * matgrid_resolution + ) + + # ensure reproducible results + rng = np.random.RandomState(2069588) + + w = rng.rand(Nx, Ny) + weights = w if matgrid_symmetry else 0.5 * (w + np.fliplr(w)) + + matgrid = mp.MaterialGrid( + mp.Vector3(Nx, Ny), + mp.air, + mp.Medium(index=3.5), + weights=weights, + do_averaging=False, + grid_type="U_MEAN", + ) + + geometry = [ + mp.Block( + center=mp.Vector3(), + size=mp.Vector3(mp.inf, 1.0, mp.inf), + material=mp.Medium(index=3.5), + ), + mp.Block( + center=mp.Vector3(), + size=mp.Vector3(matgrid_size.x, matgrid_size.y, 0), + material=matgrid, + ), + ] + + if matgrid_symmetry: + geometry.append( + mp.Block( + center=mp.Vector3(), + size=mp.Vector3(matgrid_size.x, matgrid_size.y, 0), + material=matgrid, + e2=mp.Vector3(y=-1), + ) + ) + + eig_parity = mp.ODD_Y + mp.EVEN_Z + + fcen = 0.65 + df = 0.2 * fcen + sources = [ + mp.EigenModeSource( + src=mp.GaussianSource(fcen, fwidth=df), + center=mp.Vector3(-2.0, 0), + size=mp.Vector3(0, 4.0), + eig_parity=eig_parity, + ) + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=boundary_layers, + sources=sources, + geometry=geometry, + ) + + mode_mon = sim.add_flux( + fcen, 0, 1, mp.FluxRegion(center=mp.Vector3(2.0, 0), size=mp.Vector3(0, 4.0)) + ) + + sim.run(until_after_sources=mp.stop_when_dft_decayed()) + + mode_coeff = sim.get_eigenmode_coefficients(mode_mon, [1], eig_parity).alpha[ + 0, :, 0 + ][0] + + tran = np.power(np.abs(mode_coeff), 2) + print(f'tran:, {"sym" if matgrid_symmetry else "nosym"}, {tran}') + + return tran + + +def compute_resonant_mode_2d(res, default_mat=False): + cell_size = mp.Vector3(1, 1, 0) + + rad = 0.301943 + + fcen = 0.3 + df = 0.2 * fcen + sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=mp.Hz, + center=mp.Vector3(-0.1057, 0.2094, 0), + ) + ] + + k_point = mp.Vector3(0.3892, 0.1597, 0) + + matgrid_size = mp.Vector3(1, 1, 0) + matgrid_resolution = 1200 + + # for a fixed resolution, compute the number of grid points + # necessary which are defined on the corners of the voxels + Nx, Ny = int(matgrid_size.x * matgrid_resolution), int( + matgrid_size.y * matgrid_resolution + ) + + x = np.linspace(-0.5 * matgrid_size.x, 0.5 * matgrid_size.x, Nx) + y = np.linspace(-0.5 * matgrid_size.y, 0.5 * matgrid_size.y, Ny) + xv, yv = np.meshgrid(x, y) + weights = np.sqrt(np.square(xv) + np.square(yv)) < rad + filtered_weights = gaussian_filter(weights, sigma=3.0, output=np.double) + + matgrid = mp.MaterialGrid( + mp.Vector3(Nx, Ny), + mp.air, + mp.Medium(index=3.5), + weights=filtered_weights, + do_averaging=True, + beta=1000, + eta=0.5, + ) + + geometry = [ + mp.Block( + center=mp.Vector3(), + size=mp.Vector3(matgrid_size.x, matgrid_size.y, 0), + material=matgrid, + ) + ] + + sim = mp.Simulation( + resolution=res, + cell_size=cell_size, + default_material=matgrid if default_mat else mp.Medium(), + geometry=[] if default_mat else geometry, + sources=sources, + k_point=k_point, + ) + + h = mp.Harminv(mp.Hz, mp.Vector3(0.3718, -0.2076), fcen, df) + sim.run(mp.after_sources(h), until_after_sources=200) - geometry = [mp.Block(center=mp.Vector3(), - size=mp.Vector3(matgrid_size.x,matgrid_size.y,0), - material=matgrid)] + try: + for m in h.modes: + print(f"harminv:, {res}, {m.freq}, {m.Q}") + freq = h.modes[0].freq + except: + raise RuntimeError("No resonant modes found.") - sim = mp.Simulation(resolution=res, - cell_size=cell_size, - default_material=matgrid if default_mat else mp.Medium(), - geometry=geometry if not default_mat else [], - sources=sources, - k_point=k_point) - - h = mp.Harminv(mp.Hz, mp.Vector3(0.3718,-0.2076), fcen, df) - sim.run(mp.after_sources(h), - until_after_sources=200) - - try: - for m in h.modes: - print("harminv:, {}, {}, {}".format(res,m.freq,m.Q)) - freq = h.modes[0].freq - except: - raise RuntimeError("No resonant modes found.") - - return freq + return freq def compute_resonant_mode_3d(use_matgrid=True): resolution = 25 wvl = 1.27 - fcen = 1/wvl - df = 0.02*fcen + fcen = 1 / wvl + df = 0.02 * fcen nSi = 3.45 Si = mp.Medium(index=nSi) @@ -151,59 +185,62 @@ def compute_resonant_mode_3d(use_matgrid=True): SiO2 = mp.Medium(index=nSiO2) s = 1.0 - cell_size = mp.Vector3(s,s,s) + cell_size = mp.Vector3(s, s, s) rad = 0.34 # radius of sphere if use_matgrid: - matgrid_resolution = 2*resolution - N = int(s*matgrid_resolution) - coord = np.linspace(-0.5*s,0.5*s,N) - xv, yv, zv = np.meshgrid(coord,coord,coord) + matgrid_resolution = 2 * resolution + N = int(s * matgrid_resolution) + coord = np.linspace(-0.5 * s, 0.5 * s, N) + xv, yv, zv = np.meshgrid(coord, coord, coord) weights = np.sqrt(np.square(xv) + np.square(yv) + np.square(zv)) < rad - filtered_weights = gaussian_filter(weights, - sigma=4/resolution, - output=np.double) - - matgrid = mp.MaterialGrid(mp.Vector3(N,N,N), - SiO2, - Si, - weights=filtered_weights, - do_averaging=True, - beta=1000, - eta=0.5) - - geometry = [mp.Block(center=mp.Vector3(), - size=cell_size, - material=matgrid)] + filtered_weights = gaussian_filter( + weights, sigma=4 / resolution, output=np.double + ) + + matgrid = mp.MaterialGrid( + mp.Vector3(N, N, N), + SiO2, + Si, + weights=filtered_weights, + do_averaging=True, + beta=1000, + eta=0.5, + ) + + geometry = [mp.Block(center=mp.Vector3(), size=cell_size, material=matgrid)] else: - geometry = [mp.Sphere(center=mp.Vector3(), - radius=rad, - material=Si)] + geometry = [mp.Sphere(center=mp.Vector3(), radius=rad, material=Si)] - sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=df), - size=mp.Vector3(), - center=mp.Vector3(0.13,0.25,0.06), - component=mp.Ez)] + sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=df), + size=mp.Vector3(), + center=mp.Vector3(0.13, 0.25, 0.06), + component=mp.Ez, + ) + ] - k_point = mp.Vector3(0.23,-0.17,0.35) + k_point = mp.Vector3(0.23, -0.17, 0.35) - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - sources=sources, - default_material=SiO2, - k_point=k_point, - geometry=geometry) + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + sources=sources, + default_material=SiO2, + k_point=k_point, + geometry=geometry, + ) - h = mp.Harminv(mp.Ez, mp.Vector3(-0.2684,0.1185,0.0187), fcen, df) + h = mp.Harminv(mp.Ez, mp.Vector3(-0.2684, 0.1185, 0.0187), fcen, df) - sim.run(mp.after_sources(h), - until_after_sources=200) + sim.run(mp.after_sources(h), until_after_sources=200) try: for m in h.modes: - print("harminv:, {}, {}, {}".format(resolution,m.freq,m.Q)) + print(f"harminv:, {resolution}, {m.freq}, {m.Q}") freq = h.modes[0].freq except: raise RuntimeError("No resonant modes found.") @@ -212,7 +249,6 @@ def compute_resonant_mode_3d(use_matgrid=True): class TestMaterialGrid(unittest.TestCase): - def test_subpixel_smoothing(self): # "exact" frequency computed using MaterialGrid at resolution = 300 freq_ref = 0.29826813873225283 @@ -227,23 +263,24 @@ def test_subpixel_smoothing(self): # verify that the relative error is decreasing with increasing resolution # and is better than linear convergence because of subpixel smoothing - self.assertLess(abs(freq_matgrid[1]-freq_ref)*(res[1]/res[0]), - abs(freq_matgrid[0]-freq_ref)) + self.assertLess( + abs(freq_matgrid[1] - freq_ref) * (res[1] / res[0]), + abs(freq_matgrid[0] - freq_ref), + ) freq_matgrid_default_mat = compute_resonant_mode_2d(res[0], True) self.assertAlmostEqual(freq_matgrid[0], freq_matgrid_default_mat) - def test_matgrid_3d(self): freq_matgrid = compute_resonant_mode_3d(True) freq_geomobj = compute_resonant_mode_3d(False) self.assertAlmostEqual(freq_matgrid, freq_geomobj, places=2) - def test_symmetry(self): - tran_nosym = compute_transmittance(False) - tran_sym = compute_transmittance(True) - self.assertAlmostEqual(tran_nosym, tran_sym, places=5) + tran_nosym = compute_transmittance(False) + tran_sym = compute_transmittance(True) + self.assertAlmostEqual(tran_nosym, tran_sym, places=5) + -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_materials_library.py b/python/tests/test_materials_library.py index 1e61af952..9bef924b7 100644 --- a/python/tests/test_materials_library.py +++ b/python/tests/test_materials_library.py @@ -1,36 +1,46 @@ import unittest -from meep.materials import InP, Ge, Si, LiNbO3, SiO2_aniso, Ag, Cr +from meep.materials import Ag, Cr, Ge, InP, LiNbO3, Si, SiO2_aniso -class TestMaterialsLibrary(unittest.TestCase): +class TestMaterialsLibrary(unittest.TestCase): def test_materials_library(self): - self.assertAlmostEqual(InP.epsilon(1/3.3)[0][0], (3.1031)**2, places=2) + self.assertAlmostEqual(InP.epsilon(1 / 3.3)[0][0], (3.1031) ** 2, places=2) - self.assertAlmostEqual(Ge.epsilon(1/6.8)[0][0], (4.0091)**2, places=2) + self.assertAlmostEqual(Ge.epsilon(1 / 6.8)[0][0], (4.0091) ** 2, places=2) - self.assertAlmostEqual(Si.epsilon(1/1.55)[0][0], (3.4777)**2, places=2) + self.assertAlmostEqual(Si.epsilon(1 / 1.55)[0][0], (3.4777) ** 2, places=2) - self.assertAlmostEqual(LiNbO3.epsilon(1/1.55)[0][0], (2.2111)**2, places=2) - self.assertAlmostEqual(LiNbO3.epsilon(1/1.55)[1][1], (2.2111)**2, places=2) - self.assertAlmostEqual(LiNbO3.epsilon(1/1.55)[2][2], (2.1376)**2, places=2) + self.assertAlmostEqual(LiNbO3.epsilon(1 / 1.55)[0][0], (2.2111) ** 2, places=2) + self.assertAlmostEqual(LiNbO3.epsilon(1 / 1.55)[1][1], (2.2111) ** 2, places=2) + self.assertAlmostEqual(LiNbO3.epsilon(1 / 1.55)[2][2], (2.1376) ** 2, places=2) - self.assertAlmostEqual(SiO2_aniso.epsilon(1/1.55)[0][0], (1.5277)**2, places=2) - self.assertEqual(SiO2_aniso.epsilon(1/1.55)[1][0], 0) - self.assertAlmostEqual(SiO2_aniso.epsilon(1/1.55)[1][1], (1.5277)**2, places=2) - self.assertAlmostEqual(SiO2_aniso.epsilon(1/1.55)[2][2], (1.5362)**2, places=2) + self.assertAlmostEqual( + SiO2_aniso.epsilon(1 / 1.55)[0][0], (1.5277) ** 2, places=2 + ) + self.assertEqual(SiO2_aniso.epsilon(1 / 1.55)[1][0], 0) + self.assertAlmostEqual( + SiO2_aniso.epsilon(1 / 1.55)[1][1], (1.5277) ** 2, places=2 + ) + self.assertAlmostEqual( + SiO2_aniso.epsilon(1 / 1.55)[2][2], (1.5362) ** 2, places=2 + ) - self.assertAlmostEqual(Ag.epsilon(1/0.65)[0][0], (0.14623 + 1j*3.9367)**2, places=2) + self.assertAlmostEqual( + Ag.epsilon(1 / 0.65)[0][0], (0.14623 + 1j * 3.9367) ** 2, places=2 + ) - self.assertAlmostEqual(Cr.epsilon(1/0.71)[0][0], (3.8275 + 1j*4.3457)**2, places=2) + self.assertAlmostEqual( + Cr.epsilon(1 / 0.71)[0][0], (3.8275 + 1j * 4.3457) ** 2, places=2 + ) try: - Ag.epsilon(1/0.2)[0][0] + Ag.epsilon(1 / 0.2)[0][0] except ValueError: pass else: raise AssertionError("Ag is not defined at a wavelength of 0.2 μm") -if __name__ == '__main__': - unittest.main() +if __name__ == "__main__": + unittest.main() diff --git a/python/tests/test_medium_evaluations.py b/python/tests/test_medium_evaluations.py index 0d74bd93c..e3ce7d8ce 100644 --- a/python/tests/test_medium_evaluations.py +++ b/python/tests/test_medium_evaluations.py @@ -1,4 +1,3 @@ - # medium_evaluations.py - Tests the evaluation of material permitivity profiles. # Checks materials with lorentizian, drude, and non uniform diagonals. # The extracted values are compared against actual datapoints pulled from @@ -6,60 +5,61 @@ # TODO: # * check materials with off diagonal components # * check magnetic profiles - import unittest -import meep as mp + import numpy as np +import meep as mp -class TestMediumEvaluations(unittest.TestCase): +class TestMediumEvaluations(unittest.TestCase): def test_medium_evaluations(self): - from meep.materials import Si, Ag, LiNbO3, fused_quartz + from meep.materials import Ag, LiNbO3, Si, fused_quartz # Check that scalars work w0 = LiNbO3.valid_freq_range.min eps = LiNbO3.epsilon(w0) - self.assertAlmostEqual(np.real(np.sqrt(eps[0,0])), 2.0508, places=4) + self.assertAlmostEqual(np.real(np.sqrt(eps[0, 0])), 2.0508, places=4) # Check numpy arrays try: w0 = Si.valid_freq_range.min w1 = Si.valid_freq_range.max - eps = Si.epsilon(np.linspace(w0,w1,100)) + eps = Si.epsilon(np.linspace(w0, w1, 100)) except ExceptionType: self.fail("myFunc() raised ExceptionType unexpectedly!") # Check that regions outside of domain don't work - self.assertRaises(ValueError,LiNbO3.epsilon,-1.0) - self.assertRaises(ValueError,LiNbO3.epsilon,10000.0) + self.assertRaises(ValueError, LiNbO3.epsilon, -1.0) + self.assertRaises(ValueError, LiNbO3.epsilon, 10000.0) # Check complex vs non complex numbers - self.assertTrue(np.iscomplex(Ag.epsilon(1.0)[0,0])) - self.assertFalse(np.iscomplex(fused_quartz.epsilon(1.0)[0,0])) + self.assertTrue(np.iscomplex(Ag.epsilon(1.0)[0, 0])) + self.assertFalse(np.iscomplex(fused_quartz.epsilon(1.0)[0, 0])) # Check Silicon w0 = Si.valid_freq_range.min w1 = Si.valid_freq_range.max - eps = Si.epsilon([w0,w1]) - self.assertAlmostEqual(np.real(np.sqrt(eps[0,0,0])), 3.4175, places=4) - self.assertAlmostEqual(np.real(np.sqrt(eps[1,0,0])), 3.4971, places=4) + eps = Si.epsilon([w0, w1]) + self.assertAlmostEqual(np.real(np.sqrt(eps[0, 0, 0])), 3.4175, places=4) + self.assertAlmostEqual(np.real(np.sqrt(eps[1, 0, 0])), 3.4971, places=4) # Check Silver w0 = Ag.valid_freq_range.min w1 = Ag.valid_freq_range.max - eps = Ag.epsilon([w0,w1]) - self.assertAlmostEqual(np.real(np.sqrt(eps[0,0,0])), 17.485, places=2) - self.assertAlmostEqual(np.real(np.sqrt(eps[1,0,0])), 0.44265, places=4) + eps = Ag.epsilon([w0, w1]) + self.assertAlmostEqual(np.real(np.sqrt(eps[0, 0, 0])), 17.485, places=2) + self.assertAlmostEqual(np.real(np.sqrt(eps[1, 0, 0])), 0.44265, places=4) # Check Lithium Niobate w0 = LiNbO3.valid_freq_range.min w1 = LiNbO3.valid_freq_range.max - eps = LiNbO3.epsilon([w0,w1]) - self.assertAlmostEqual(np.real(np.sqrt(eps[0,0,0])), 2.0508, places=4) - self.assertAlmostEqual(np.real(np.sqrt(eps[1,0,0])), 2.4393, places=4) - self.assertAlmostEqual(np.real(np.sqrt(eps[0,2,2])), 2.0025, places=4) - self.assertAlmostEqual(np.real(np.sqrt(eps[1,2,2])), 2.3321, places=4) + eps = LiNbO3.epsilon([w0, w1]) + self.assertAlmostEqual(np.real(np.sqrt(eps[0, 0, 0])), 2.0508, places=4) + self.assertAlmostEqual(np.real(np.sqrt(eps[1, 0, 0])), 2.4393, places=4) + self.assertAlmostEqual(np.real(np.sqrt(eps[0, 2, 2])), 2.0025, places=4) + self.assertAlmostEqual(np.real(np.sqrt(eps[1, 2, 2])), 2.3321, places=4) + -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_mode_coeffs.py b/python/tests/test_mode_coeffs.py index 076b6e530..42078cb04 100644 --- a/python/tests/test_mode_coeffs.py +++ b/python/tests/test_mode_coeffs.py @@ -1,13 +1,14 @@ -import meep as mp import unittest + import numpy as np +import meep as mp -class TestModeCoeffs(unittest.TestCase): +class TestModeCoeffs(unittest.TestCase): def run_mode_coeffs(self, mode_num, kpoint_func, nf=1, resolution=15): - w = 1 # width of waveguide + w = 1 # width of waveguide L = 10 # length of waveguide Si = mp.Medium(epsilon=12.0) @@ -21,10 +22,12 @@ def run_mode_coeffs(self, mode_num, kpoint_func, nf=1, resolution=15): prism_x = sx + 1 prism_y = w / 2 - vertices = [mp.Vector3(-prism_x, prism_y), - mp.Vector3(prism_x, prism_y), - mp.Vector3(prism_x, -prism_y), - mp.Vector3(-prism_x, -prism_y)] + vertices = [ + mp.Vector3(-prism_x, prism_y), + mp.Vector3(prism_x, prism_y), + mp.Vector3(prism_x, -prism_y), + mp.Vector3(-prism_x, -prism_y), + ] geometry = [mp.Prism(vertices, height=mp.inf, material=Si)] @@ -32,25 +35,39 @@ def run_mode_coeffs(self, mode_num, kpoint_func, nf=1, resolution=15): # mode frequency fcen = 0.20 # > 0.5/sqrt(11) to have at least 2 modes - df = 0.5*fcen + df = 0.5 * fcen - source = mp.EigenModeSource(src=mp.GaussianSource(fcen, fwidth=df), - eig_band=mode_num, - size=mp.Vector3(0,sy-2*dpml,0), - center=mp.Vector3(-0.5*sx+dpml,0,0)) + source = mp.EigenModeSource( + src=mp.GaussianSource(fcen, fwidth=df), + eig_band=mode_num, + size=mp.Vector3(0, sy - 2 * dpml, 0), + center=mp.Vector3(-0.5 * sx + dpml, 0, 0), + ) symmetries = [mp.Mirror(mp.Y, phase=1 if mode_num % 2 == 1 else -1)] - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=boundary_layers, - geometry=geometry, - sources=[source], - symmetries=symmetries) - - xm = 0.5*sx - dpml # x-coordinate of monitor - mflux = sim.add_mode_monitor(fcen, df, nf, mp.ModeRegion(center=mp.Vector3(xm,0), size=mp.Vector3(0,sy-2*dpml))) - mode_flux = sim.add_flux(fcen, df, nf, mp.FluxRegion(center=mp.Vector3(xm,0), size=mp.Vector3(0,sy-2*dpml))) + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=boundary_layers, + geometry=geometry, + sources=[source], + symmetries=symmetries, + ) + + xm = 0.5 * sx - dpml # x-coordinate of monitor + mflux = sim.add_mode_monitor( + fcen, + df, + nf, + mp.ModeRegion(center=mp.Vector3(xm, 0), size=mp.Vector3(0, sy - 2 * dpml)), + ) + mode_flux = sim.add_flux( + fcen, + df, + nf, + mp.FluxRegion(center=mp.Vector3(xm, 0), size=mp.Vector3(0, sy - 2 * dpml)), + ) # sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mp.Vector3(-0.5*sx+dpml,0), 1e-10)) sim.run(until_after_sources=100) @@ -65,27 +82,34 @@ def run_mode_coeffs(self, mode_num, kpoint_func, nf=1, resolution=15): # and check that it agrees with the prediction # of the eig_power() class method in EigenmodeSource. ################################################## - if nf>1: - power_observed=mp.get_fluxes(mode_flux) - freqs=mp.get_flux_freqs(mode_flux) - power_expected=[source.eig_power(f) for f in freqs] + if nf > 1: + power_observed = mp.get_fluxes(mode_flux) + freqs = mp.get_flux_freqs(mode_flux) + power_expected = [source.eig_power(f) for f in freqs] return freqs, power_expected, power_observed - modes_to_check = [1, 2] # indices of modes for which to compute expansion coefficients - res = sim.get_eigenmode_coefficients(mflux, modes_to_check, kpoint_func=kpoint_func) + modes_to_check = [ + 1, + 2, + ] # indices of modes for which to compute expansion coefficients + res = sim.get_eigenmode_coefficients( + mflux, modes_to_check, kpoint_func=kpoint_func + ) self.assertTrue(res.kpoints[0].close(mp.Vector3(0.604301, 0, 0))) self.assertTrue(res.kpoints[1].close(mp.Vector3(0.494353, 0, 0), tol=1e-2)) self.assertTrue(res.kdom[0].close(mp.Vector3(0.604301, 0, 0))) self.assertTrue(res.kdom[1].close(mp.Vector3(0.494353, 0, 0), tol=1e-2)) - self.assertAlmostEqual(res.cscale[0],0.50000977,places=5) - self.assertAlmostEqual(res.cscale[1],0.50096888,places=5) + self.assertAlmostEqual(res.cscale[0], 0.50000977, places=5) + self.assertAlmostEqual(res.cscale[1], 0.50096888, places=5) mode_power = mp.get_fluxes(mode_flux)[0] TestPassed = True TOLERANCE = 5.0e-3 - c0 = res.alpha[mode_num - 1, 0, 0] # coefficient of forward-traveling wave for mode #mode_num - for nm in range(1, len(modes_to_check)+1): + c0 = res.alpha[ + mode_num - 1, 0, 0 + ] # coefficient of forward-traveling wave for mode #mode_num + for nm in range(1, len(modes_to_check) + 1): if nm != mode_num: cfrel = np.abs(res.alpha[nm - 1, 0, 0]) / np.abs(c0) cbrel = np.abs(res.alpha[nm - 1, 0, 1]) / np.abs(c0) @@ -95,7 +119,7 @@ def run_mode_coeffs(self, mode_num, kpoint_func, nf=1, resolution=15): self.sim = sim # test 1: coefficient of excited mode >> coeffs of all other modes - self.assertTrue(TestPassed, msg="cfrel: {}, cbrel: {}".format(cfrel, cbrel)) + self.assertTrue(TestPassed, msg=f"cfrel: {cfrel}, cbrel: {cbrel}") # test 2: |mode coeff|^2 = power self.assertAlmostEqual(mode_power / abs(c0**2), 1.0, places=1) @@ -117,165 +141,219 @@ def test_modes(self): hz_at_eval_point = emdata.amplitude(eval_point, mp.Hz) places = 5 if mp.is_single_precision() else 7 - self.assertAlmostEqual(ex_at_eval_point, 0.4887779638178009+0.484240145324284j, places=places) - self.assertAlmostEqual(hz_at_eval_point, 3.4249236584603495-3.455974863884166j, places=places) + self.assertAlmostEqual( + ex_at_eval_point, 0.4887779638178009 + 0.484240145324284j, places=places + ) + self.assertAlmostEqual( + hz_at_eval_point, 3.4249236584603495 - 3.455974863884166j, places=places + ) def test_kpoint_func(self): - def kpoint_func(freq, mode): return mp.Vector3() self.run_mode_coeffs(1, kpoint_func) def test_eigensource_normalization(self): - f, p_exp, p_obs=self.run_mode_coeffs(1, None, nf=51, resolution=15) - #self.assertAlmostEqual(max(p_exp),max(p_obs),places=1) - max_exp, max_obs=max(p_exp), max(p_obs) - self.assertLess(abs(max_exp-max_obs), 0.5*max(abs(max_exp),abs(max_obs))) + f, p_exp, p_obs = self.run_mode_coeffs(1, None, nf=51, resolution=15) + # self.assertAlmostEqual(max(p_exp),max(p_obs),places=1) + max_exp, max_obs = max(p_exp), max(p_obs) + self.assertLess(abs(max_exp - max_obs), 0.5 * max(abs(max_exp), abs(max_obs))) def test_reciprocity_kpoint(self): resolution = 40 sx = 7.0 sy = 5.0 - cell_size = mp.Vector3(sx,sy) + cell_size = mp.Vector3(sx, sy) dpml = 1.0 pml_layers = [mp.PML(thickness=dpml)] w = 1.0 - geometry = [mp.Block(center=mp.Vector3(), - size=mp.Vector3(mp.inf,w,mp.inf), - material=mp.Medium(epsilon=12))] + geometry = [ + mp.Block( + center=mp.Vector3(), + size=mp.Vector3(mp.inf, w, mp.inf), + material=mp.Medium(epsilon=12), + ) + ] fsrc = 0.15 - sources = [mp.EigenModeSource(src=mp.GaussianSource(fsrc,fwidth=0.2*fsrc), - center=mp.Vector3(x=-0.5*sx+dpml), - size=mp.Vector3(y=sy), - eig_parity=mp.EVEN_Y+mp.ODD_Z)] + sources = [ + mp.EigenModeSource( + src=mp.GaussianSource(fsrc, fwidth=0.2 * fsrc), + center=mp.Vector3(x=-0.5 * sx + dpml), + size=mp.Vector3(y=sy), + eig_parity=mp.EVEN_Y + mp.ODD_Z, + ) + ] symmetries = [mp.Mirror(mp.Y)] - sim = mp.Simulation(cell_size=cell_size, - resolution=resolution, - boundary_layers=pml_layers, - sources=sources, - geometry=geometry, - symmetries=symmetries) - - tran = sim.add_mode_monitor(fsrc, 0, 1, - mp.ModeRegion(center=mp.Vector3(x=0.5*sx-dpml), - size=mp.Vector3(y=sy)), - yee_grid=False) + sim = mp.Simulation( + cell_size=cell_size, + resolution=resolution, + boundary_layers=pml_layers, + sources=sources, + geometry=geometry, + symmetries=symmetries, + ) + + tran = sim.add_mode_monitor( + fsrc, + 0, + 1, + mp.ModeRegion(center=mp.Vector3(x=0.5 * sx - dpml), size=mp.Vector3(y=sy)), + yee_grid=False, + ) sim.run(until_after_sources=50) - res_fwd = sim.get_eigenmode_coefficients(tran, - [1], - eig_parity=mp.EVEN_Y+mp.ODD_Z, - direction=mp.NO_DIRECTION, - kpoint_func=lambda f,n: mp.Vector3(+1,0,0)) - - res_bwd = sim.get_eigenmode_coefficients(tran, - [1], - eig_parity=mp.EVEN_Y+mp.ODD_Z, - direction=mp.NO_DIRECTION, - kpoint_func=lambda f,n: mp.Vector3(-1,0,0)) - - print("S11:, {}, {}".format(res_fwd.alpha[0,0,1],res_bwd.alpha[0,0,0])) - print("S21:, {}, {}".format(res_fwd.alpha[0,0,0],res_bwd.alpha[0,0,1])) + res_fwd = sim.get_eigenmode_coefficients( + tran, + [1], + eig_parity=mp.EVEN_Y + mp.ODD_Z, + direction=mp.NO_DIRECTION, + kpoint_func=lambda f, n: mp.Vector3(+1, 0, 0), + ) + + res_bwd = sim.get_eigenmode_coefficients( + tran, + [1], + eig_parity=mp.EVEN_Y + mp.ODD_Z, + direction=mp.NO_DIRECTION, + kpoint_func=lambda f, n: mp.Vector3(-1, 0, 0), + ) + + print(f"S11:, {res_fwd.alpha[0,0,1]}, {res_bwd.alpha[0,0,0]}") + print(f"S21:, {res_fwd.alpha[0,0,0]}, {res_bwd.alpha[0,0,1]}") # |S11|^2 - self.assertAlmostEqual(abs(res_fwd.alpha[0,0,1])**2, abs(res_bwd.alpha[0,0,0])**2, places=4) + self.assertAlmostEqual( + abs(res_fwd.alpha[0, 0, 1]) ** 2, abs(res_bwd.alpha[0, 0, 0]) ** 2, places=4 + ) # |S21|^2 - self.assertAlmostEqual(abs(res_fwd.alpha[0,0,0])**2 / abs(res_bwd.alpha[0,0,1])**2, 1.00, places=2) + self.assertAlmostEqual( + abs(res_fwd.alpha[0, 0, 0]) ** 2 / abs(res_bwd.alpha[0, 0, 1]) ** 2, + 1.00, + places=2, + ) def test_reciprocity_monitor(self): resolution = 25 sx = 7.0 sy = 5.0 - cell_size = mp.Vector3(sx,sy) + cell_size = mp.Vector3(sx, sy) dpml = 1.0 pml_layers = [mp.PML(thickness=dpml)] w = 1.0 - geometry = [mp.Block(center=mp.Vector3(), - size=mp.Vector3(mp.inf,w,mp.inf), - material=mp.Medium(epsilon=12))] + geometry = [ + mp.Block( + center=mp.Vector3(), + size=mp.Vector3(mp.inf, w, mp.inf), + material=mp.Medium(epsilon=12), + ) + ] fsrc = 0.15 # source is at the left edge of the waveguide - sources = [mp.EigenModeSource(src=mp.GaussianSource(fsrc,fwidth=0.2*fsrc), - center=mp.Vector3(x=-0.5*sx+dpml), - size=mp.Vector3(y=sy), - eig_parity=mp.EVEN_Y+mp.ODD_Z)] + sources = [ + mp.EigenModeSource( + src=mp.GaussianSource(fsrc, fwidth=0.2 * fsrc), + center=mp.Vector3(x=-0.5 * sx + dpml), + size=mp.Vector3(y=sy), + eig_parity=mp.EVEN_Y + mp.ODD_Z, + ) + ] symmetries = [mp.Mirror(mp.Y)] - sim = mp.Simulation(cell_size=cell_size, - resolution=resolution, - boundary_layers=pml_layers, - sources=sources, - geometry=geometry, - symmetries=symmetries) + sim = mp.Simulation( + cell_size=cell_size, + resolution=resolution, + boundary_layers=pml_layers, + sources=sources, + geometry=geometry, + symmetries=symmetries, + ) # monitor is at the right edge of the waveguide - tran = sim.add_mode_monitor(fsrc, 0, 1, - mp.ModeRegion(center=mp.Vector3(x=0.5*sx-dpml), - size=mp.Vector3(y=sy)), - yee_grid=False) + tran = sim.add_mode_monitor( + fsrc, + 0, + 1, + mp.ModeRegion(center=mp.Vector3(x=0.5 * sx - dpml), size=mp.Vector3(y=sy)), + yee_grid=False, + ) sim.run(until_after_sources=50) - res_fwd = sim.get_eigenmode_coefficients(tran, - [1], - eig_parity=mp.EVEN_Y+mp.ODD_Z) + res_fwd = sim.get_eigenmode_coefficients( + tran, [1], eig_parity=mp.EVEN_Y + mp.ODD_Z + ) - print("S11:, {}".format(res_fwd.alpha[0,0,1])) - print("S21:, {}".format(res_fwd.alpha[0,0,0])) + print(f"S11:, {res_fwd.alpha[0,0,1]}") + print(f"S21:, {res_fwd.alpha[0,0,0]}") sim.reset_meep() # source is at the right edge of the waveguide - sources = [mp.EigenModeSource(src=mp.GaussianSource(fsrc,fwidth=0.2*fsrc), - center=mp.Vector3(x=0.5*sx-dpml), - size=mp.Vector3(y=sy), - direction=mp.NO_DIRECTION, - eig_kpoint=mp.Vector3(-1,0,0), - eig_parity=mp.EVEN_Y+mp.ODD_Z)] - - sim = mp.Simulation(cell_size=cell_size, - resolution=resolution, - boundary_layers=pml_layers, - sources=sources, - geometry=geometry, - symmetries=symmetries) + sources = [ + mp.EigenModeSource( + src=mp.GaussianSource(fsrc, fwidth=0.2 * fsrc), + center=mp.Vector3(x=0.5 * sx - dpml), + size=mp.Vector3(y=sy), + direction=mp.NO_DIRECTION, + eig_kpoint=mp.Vector3(-1, 0, 0), + eig_parity=mp.EVEN_Y + mp.ODD_Z, + ) + ] + + sim = mp.Simulation( + cell_size=cell_size, + resolution=resolution, + boundary_layers=pml_layers, + sources=sources, + geometry=geometry, + symmetries=symmetries, + ) # monitor is at the left edge of the waveguide - tran = sim.add_mode_monitor(fsrc, 0, 1, - mp.ModeRegion(center=mp.Vector3(x=-0.5*sx+dpml), - size=mp.Vector3(y=sy)), - yee_grid=False) + tran = sim.add_mode_monitor( + fsrc, + 0, + 1, + mp.ModeRegion(center=mp.Vector3(x=-0.5 * sx + dpml), size=mp.Vector3(y=sy)), + yee_grid=False, + ) sim.run(until_after_sources=50) - res_bwd = sim.get_eigenmode_coefficients(tran, - [1], - eig_parity=mp.EVEN_Y+mp.ODD_Z) + res_bwd = sim.get_eigenmode_coefficients( + tran, [1], eig_parity=mp.EVEN_Y + mp.ODD_Z + ) - print("S12:, {}".format(res_bwd.alpha[0,0,1])) - print("S22:, {}".format(res_bwd.alpha[0,0,0])) + print(f"S12:, {res_bwd.alpha[0,0,1]}") + print(f"S22:, {res_bwd.alpha[0,0,0]}") # |S21|^2 = |S12|^2 - self.assertAlmostEqual(abs(res_fwd.alpha[0,0,0])**2 / abs(res_bwd.alpha[0,0,1])**2, 1.00, places=2) + self.assertAlmostEqual( + abs(res_fwd.alpha[0, 0, 0]) ** 2 / abs(res_bwd.alpha[0, 0, 1]) ** 2, + 1.00, + places=2, + ) # |S11|^2 = |S22|^2 - self.assertAlmostEqual(abs(res_fwd.alpha[0,0,1])**2, abs(res_bwd.alpha[0,0,0])**2, places=2) + self.assertAlmostEqual( + abs(res_fwd.alpha[0, 0, 1]) ** 2, abs(res_bwd.alpha[0, 0, 0]) ** 2, places=2 + ) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_mode_decomposition.py b/python/tests/test_mode_decomposition.py index 6d0262475..54e10cd98 100644 --- a/python/tests/test_mode_decomposition.py +++ b/python/tests/test_mode_decomposition.py @@ -1,12 +1,13 @@ +import cmath +import math import unittest + import numpy as np + import meep as mp -import math -import cmath class TestModeDecomposition(unittest.TestCase): - def test_linear_taper_2d(self): resolution = 10 w1 = 1 @@ -24,142 +25,183 @@ def test_linear_taper_2d(self): symmetries = [mp.Mirror(mp.Y)] Lt = 2 sx = dpml + Lw + Lt + Lw + dpml - cell_size = mp.Vector3(sx,sy,0) + cell_size = mp.Vector3(sx, sy, 0) prism_x = sx + 1 half_Lt = 0.5 * Lt - src_pt = mp.Vector3(-0.5*sx+dpml+0.2*Lw,0,0) - sources = [mp.EigenModeSource(src=mp.GaussianSource(fcen, fwidth=0.2*fcen), - center=src_pt, - size=mp.Vector3(0,sy-2*dpml,0), - eig_match_freq=True, - eig_parity=mp.ODD_Z+mp.EVEN_Y)] - - vertices = [mp.Vector3(-prism_x, half_w1), - mp.Vector3(prism_x, half_w1), - mp.Vector3(prism_x, -half_w1), - mp.Vector3(-prism_x, -half_w1)] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=boundary_layers, - geometry=[mp.Prism(vertices, height=mp.inf, material=Si)], - sources=sources, - symmetries=symmetries) - - mon_pt = mp.Vector3(-0.5*sx+dpml+0.5*Lw,0,0) - flux = sim.add_flux(fcen, - 0, - 1, - mp.FluxRegion(center=mon_pt, - size=mp.Vector3(0,sy-2*dpml,0))) - - sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, src_pt, 1e-9)) - - res = sim.get_eigenmode_coefficients(flux, - [1], - eig_parity=mp.ODD_Z+mp.EVEN_Y) + src_pt = mp.Vector3(-0.5 * sx + dpml + 0.2 * Lw, 0, 0) + sources = [ + mp.EigenModeSource( + src=mp.GaussianSource(fcen, fwidth=0.2 * fcen), + center=src_pt, + size=mp.Vector3(0, sy - 2 * dpml, 0), + eig_match_freq=True, + eig_parity=mp.ODD_Z + mp.EVEN_Y, + ) + ] + + vertices = [ + mp.Vector3(-prism_x, half_w1), + mp.Vector3(prism_x, half_w1), + mp.Vector3(prism_x, -half_w1), + mp.Vector3(-prism_x, -half_w1), + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=boundary_layers, + geometry=[mp.Prism(vertices, height=mp.inf, material=Si)], + sources=sources, + symmetries=symmetries, + ) + + mon_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * Lw, 0, 0) + flux = sim.add_flux( + fcen, + 0, + 1, + mp.FluxRegion(center=mon_pt, size=mp.Vector3(0, sy - 2 * dpml, 0)), + ) + + sim.run( + until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, src_pt, 1e-9) + ) + + res = sim.get_eigenmode_coefficients(flux, [1], eig_parity=mp.ODD_Z + mp.EVEN_Y) incident_coeffs = res.alpha incident_flux = mp.get_fluxes(flux) incident_flux_data = sim.get_flux_data(flux) sim.reset_meep() - vertices = [mp.Vector3(-prism_x, half_w1), - mp.Vector3(-half_Lt, half_w1), - mp.Vector3(half_Lt, half_w2), - mp.Vector3(prism_x, half_w2), - mp.Vector3(prism_x, -half_w2), - mp.Vector3(half_Lt, -half_w2), - mp.Vector3(-half_Lt, -half_w1), - mp.Vector3(-prism_x, -half_w1)] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - boundary_layers=boundary_layers, - geometry=[mp.Prism(vertices, height=mp.inf, material=Si)], - sources=sources, - symmetries=symmetries) - - refl_flux = sim.add_flux(fcen, - 0, - 1, - mp.FluxRegion(center=mon_pt, - size=mp.Vector3(0,sy-2*dpml,0))) + vertices = [ + mp.Vector3(-prism_x, half_w1), + mp.Vector3(-half_Lt, half_w1), + mp.Vector3(half_Lt, half_w2), + mp.Vector3(prism_x, half_w2), + mp.Vector3(prism_x, -half_w2), + mp.Vector3(half_Lt, -half_w2), + mp.Vector3(-half_Lt, -half_w1), + mp.Vector3(-prism_x, -half_w1), + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=boundary_layers, + geometry=[mp.Prism(vertices, height=mp.inf, material=Si)], + sources=sources, + symmetries=symmetries, + ) + + refl_flux = sim.add_flux( + fcen, + 0, + 1, + mp.FluxRegion(center=mon_pt, size=mp.Vector3(0, sy - 2 * dpml, 0)), + ) sim.load_minus_flux_data(refl_flux, incident_flux_data) - sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, src_pt, 1e-9)) + sim.run( + until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, src_pt, 1e-9) + ) - res = sim.get_eigenmode_coefficients(refl_flux, - [1], - eig_parity=mp.ODD_Z+mp.EVEN_Y) + res = sim.get_eigenmode_coefficients( + refl_flux, [1], eig_parity=mp.ODD_Z + mp.EVEN_Y + ) coeffs = res.alpha taper_flux = mp.get_fluxes(refl_flux) - self.assertAlmostEqual(abs(coeffs[0,0,1])**2 / abs(incident_coeffs[0,0,0])**2, - -taper_flux[0] / incident_flux[0], - places=4) + self.assertAlmostEqual( + abs(coeffs[0, 0, 1]) ** 2 / abs(incident_coeffs[0, 0, 0]) ** 2, + -taper_flux[0] / incident_flux[0], + places=4, + ) def test_oblique_waveguide_backward_mode(self): sxy = 12.0 - cell_size = mp.Vector3(sxy,sxy,0) + cell_size = mp.Vector3(sxy, sxy, 0) dpml = 0.6 pml_layers = [mp.PML(thickness=dpml)] - fcen = 1/1.55 + fcen = 1 / 1.55 rot_angle = np.radians(35.0) - kpoint = mp.Vector3(1,0,0).rotate(mp.Vector3(0,0,1), rot_angle) * -1.0 - sources = [mp.EigenModeSource(src=mp.GaussianSource(fcen,fwidth=0.1), - center=mp.Vector3(0.5*sxy-3.4,0,0), - size=mp.Vector3(0,sxy,0), - direction=mp.NO_DIRECTION, - eig_kpoint=kpoint, - eig_band=1, - eig_parity=mp.ODD_Z, - eig_match_freq=True)] - - geometry = [mp.Block(center=mp.Vector3(), - size=mp.Vector3(mp.inf,1,mp.inf), - e1 = mp.Vector3(1,0,0).rotate(mp.Vector3(0,0,1), rot_angle), - e2 = mp.Vector3(0,1,0).rotate(mp.Vector3(0,0,1), rot_angle), - material=mp.Medium(index=3.5))] - - sim = mp.Simulation(cell_size=cell_size, - resolution=20, - boundary_layers=pml_layers, - sources=sources, - geometry=geometry) - - mode = sim.add_mode_monitor(fcen, 0, 1, - mp.FluxRegion(center=mp.Vector3(-0.5*sxy+dpml,0,0), - size=mp.Vector3(0,sxy,0)), - decimation_factor=1) - mode_decimated = sim.add_mode_monitor(fcen, - 0, - 1, - mp.FluxRegion(center=mp.Vector3(-0.5*sxy+dpml,0,0), - size=mp.Vector3(0,sxy,0)), - decimation_factor=10) + kpoint = mp.Vector3(1, 0, 0).rotate(mp.Vector3(0, 0, 1), rot_angle) * -1.0 + sources = [ + mp.EigenModeSource( + src=mp.GaussianSource(fcen, fwidth=0.1), + center=mp.Vector3(0.5 * sxy - 3.4, 0, 0), + size=mp.Vector3(0, sxy, 0), + direction=mp.NO_DIRECTION, + eig_kpoint=kpoint, + eig_band=1, + eig_parity=mp.ODD_Z, + eig_match_freq=True, + ) + ] + + geometry = [ + mp.Block( + center=mp.Vector3(), + size=mp.Vector3(mp.inf, 1, mp.inf), + e1=mp.Vector3(1, 0, 0).rotate(mp.Vector3(0, 0, 1), rot_angle), + e2=mp.Vector3(0, 1, 0).rotate(mp.Vector3(0, 0, 1), rot_angle), + material=mp.Medium(index=3.5), + ) + ] + + sim = mp.Simulation( + cell_size=cell_size, + resolution=20, + boundary_layers=pml_layers, + sources=sources, + geometry=geometry, + ) + + mode = sim.add_mode_monitor( + fcen, + 0, + 1, + mp.FluxRegion( + center=mp.Vector3(-0.5 * sxy + dpml, 0, 0), size=mp.Vector3(0, sxy, 0) + ), + decimation_factor=1, + ) + mode_decimated = sim.add_mode_monitor( + fcen, + 0, + 1, + mp.FluxRegion( + center=mp.Vector3(-0.5 * sxy + dpml, 0, 0), size=mp.Vector3(0, sxy, 0) + ), + decimation_factor=10, + ) sim.run(until_after_sources=30) flux = mp.get_fluxes(mode)[0] - coeff = sim.get_eigenmode_coefficients(mode,[1], - direction=mp.NO_DIRECTION, - kpoint_func=lambda f,n: kpoint).alpha[0,0,0] + coeff = sim.get_eigenmode_coefficients( + mode, [1], direction=mp.NO_DIRECTION, kpoint_func=lambda f, n: kpoint + ).alpha[0, 0, 0] flux_decimated = mp.get_fluxes(mode_decimated)[0] - coeff_decimated = sim.get_eigenmode_coefficients(mode_decimated,[1], - direction=mp.NO_DIRECTION, - kpoint_func=lambda f,n: kpoint).alpha[0,0,0] - - print("oblique-waveguide-flux:, {:.6f}, {:.6f}".format(-flux, abs(coeff)**2)) - print("oblique-waveguide-flux (decimated):, {:.6f}, {:.6f}".format(-flux_decimated, - abs(coeff_decimated)**2)) + coeff_decimated = sim.get_eigenmode_coefficients( + mode_decimated, + [1], + direction=mp.NO_DIRECTION, + kpoint_func=lambda f, n: kpoint, + ).alpha[0, 0, 0] + + print(f"oblique-waveguide-flux:, {-flux:.6f}, {abs(coeff) ** 2:.6f}") + print( + "oblique-waveguide-flux (decimated):, {:.6f}, {:.6f}".format( + -flux_decimated, abs(coeff_decimated) ** 2 + ) + ) ## the magnitude of |flux| is 100.008731 and so we check two significant digits of accuracy - self.assertAlmostEqual(-1,abs(coeff)**2/flux,places=2) - self.assertAlmostEqual(flux,flux_decimated,places=3) - self.assertAlmostEqual(coeff,coeff_decimated,places=3) - + self.assertAlmostEqual(-1, abs(coeff) ** 2 / flux, places=2) + self.assertAlmostEqual(flux, flux_decimated, places=3) + self.assertAlmostEqual(coeff, coeff_decimated, places=3) def test_grating_3d(self): """Unit test for mode decomposition in 3d with zero k_point. @@ -179,7 +221,7 @@ def test_grating_3d(self): SiO2 = mp.Medium(index=nSiO2) wvl = 0.5 # wavelength - fcen = 1/wvl + fcen = 1 / wvl dpml = 1.0 # PML thickness dsub = 3.0 # substrate thickness @@ -189,40 +231,46 @@ def test_grating_3d(self): sx = 1.1 sy = 0.8 - sz = dpml+dsub+hcyl+dair+dpml + sz = dpml + dsub + hcyl + dair + dpml - cell_size = mp.Vector3(sx,sy,sz) + cell_size = mp.Vector3(sx, sy, sz) - boundary_layers = [mp.PML(thickness=dpml,direction=mp.Z)] + boundary_layers = [mp.PML(thickness=dpml, direction=mp.Z)] # periodic boundary conditions k_point = mp.Vector3() src_cmpt = mp.Ex - sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen), - size=mp.Vector3(sx,sy,0), - center=mp.Vector3(0,0,-0.5*sz+dpml), - component=src_cmpt)] - - symmetries = [mp.Mirror(direction=mp.X,phase=-1), - mp.Mirror(direction=mp.Y,phase=+1)] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - sources=sources, - default_material=SiO2, - boundary_layers=boundary_layers, - k_point=k_point, - symmetries=symmetries) - - refl_pt = mp.Vector3(0,0,-0.5*sz+dpml+0.5*dsub) - refl_flux = sim.add_mode_monitor(fcen, - 0, - 1, - mp.ModeRegion(center=refl_pt, - size=mp.Vector3(sx,sy,0))) - - stop_cond = mp.stop_when_energy_decayed(20,1e-6) + sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=0.2 * fcen), + size=mp.Vector3(sx, sy, 0), + center=mp.Vector3(0, 0, -0.5 * sz + dpml), + component=src_cmpt, + ) + ] + + symmetries = [ + mp.Mirror(direction=mp.X, phase=-1), + mp.Mirror(direction=mp.Y, phase=+1), + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + sources=sources, + default_material=SiO2, + boundary_layers=boundary_layers, + k_point=k_point, + symmetries=symmetries, + ) + + refl_pt = mp.Vector3(0, 0, -0.5 * sz + dpml + 0.5 * dsub) + refl_flux = sim.add_mode_monitor( + fcen, 0, 1, mp.ModeRegion(center=refl_pt, size=mp.Vector3(sx, sy, 0)) + ) + + stop_cond = mp.stop_when_energy_decayed(20, 1e-6) sim.run(until_after_sources=stop_cond) input_flux = mp.get_fluxes(refl_flux) @@ -230,34 +278,43 @@ def test_grating_3d(self): sim.reset_meep() - geometry = [mp.Block(size=mp.Vector3(mp.inf,mp.inf,dpml+dsub), - center=mp.Vector3(0,0,-0.5*sz+0.5*(dpml+dsub)), - material=SiO2), - mp.Cylinder(height=hcyl, - radius=rcyl, - center=mp.Vector3(0,0,-0.5*sz+dpml+dsub+0.5*hcyl), - material=Si)] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - sources=sources, - geometry=geometry, - boundary_layers=boundary_layers, - k_point=k_point, - symmetries=symmetries) - - refl_flux = sim.add_mode_monitor(fcen, - 0, - 1, - mp.ModeRegion(center=refl_pt, - size=mp.Vector3(sx,sy,0))) - sim.load_minus_flux_data(refl_flux,input_flux_data) - - tran_flux = sim.add_mode_monitor(fcen, - 0, - 1, - mp.ModeRegion(center=mp.Vector3(0,0,0.5*sz-dpml), - size=mp.Vector3(sx,sy,0))) + geometry = [ + mp.Block( + size=mp.Vector3(mp.inf, mp.inf, dpml + dsub), + center=mp.Vector3(0, 0, -0.5 * sz + 0.5 * (dpml + dsub)), + material=SiO2, + ), + mp.Cylinder( + height=hcyl, + radius=rcyl, + center=mp.Vector3(0, 0, -0.5 * sz + dpml + dsub + 0.5 * hcyl), + material=Si, + ), + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + sources=sources, + geometry=geometry, + boundary_layers=boundary_layers, + k_point=k_point, + symmetries=symmetries, + ) + + refl_flux = sim.add_mode_monitor( + fcen, 0, 1, mp.ModeRegion(center=refl_pt, size=mp.Vector3(sx, sy, 0)) + ) + sim.load_minus_flux_data(refl_flux, input_flux_data) + + tran_flux = sim.add_mode_monitor( + fcen, + 0, + 1, + mp.ModeRegion( + center=mp.Vector3(0, 0, 0.5 * sz - dpml), size=mp.Vector3(sx, sy, 0) + ), + ) sim.run(until_after_sources=stop_cond) @@ -265,67 +322,80 @@ def test_grating_3d(self): Rsum = 0 # number of reflected modes/orders in SiO2 in x and y directions (upper bound) - nm_x = int(fcen*nSiO2*sx) + 1 - nm_y = int(fcen*nSiO2*sy) + 1 + nm_x = int(fcen * nSiO2 * sx) + 1 + nm_y = int(fcen * nSiO2 * sy) + 1 for m_x in range(nm_x): for m_y in range(nm_y): - for S_pol in [False,True]: - res = sim.get_eigenmode_coefficients(refl_flux, - mp.DiffractedPlanewave([m_x,m_y,0], - mp.Vector3(1,0,0), - 1 if S_pol else 0, - 0 if S_pol else 1)) + for S_pol in [False, True]: + res = sim.get_eigenmode_coefficients( + refl_flux, + mp.DiffractedPlanewave( + [m_x, m_y, 0], + mp.Vector3(1, 0, 0), + 1 if S_pol else 0, + 0 if S_pol else 1, + ), + ) r_coeffs = res.alpha - Rmode = abs(r_coeffs[0,0,1])**2/input_flux[0] - print("refl-order:, {}, {}, {}, {:.6f}".format("s" if S_pol else "p",m_x,m_y,Rmode)) + Rmode = abs(r_coeffs[0, 0, 1]) ** 2 / input_flux[0] + print( + "refl-order:, {}, {}, {}, {:.6f}".format( + "s" if S_pol else "p", m_x, m_y, Rmode + ) + ) if m_x == 0 and m_y == 0: Rsum += Rmode elif (m_x != 0 and m_y == 0) or (m_x == 0 and m_y != 0): - Rsum += 2*Rmode + Rsum += 2 * Rmode else: - Rsum += 4*Rmode - + Rsum += 4 * Rmode # sum the Poynting flux in z direction for all transmitted orders Tsum = 0 # number of transmitted modes/orders in air in x and y directions (upper bound) - nm_x = int(fcen*sx) + 1 - nm_y = int(fcen*sy) + 1 + nm_x = int(fcen * sx) + 1 + nm_y = int(fcen * sy) + 1 for m_x in range(nm_x): for m_y in range(nm_y): - for S_pol in [False,True]: - res = sim.get_eigenmode_coefficients(tran_flux, - mp.DiffractedPlanewave([m_x,m_y,0], - mp.Vector3(1,0,0), - 1 if S_pol else 0, - 0 if S_pol else 1)) + for S_pol in [False, True]: + res = sim.get_eigenmode_coefficients( + tran_flux, + mp.DiffractedPlanewave( + [m_x, m_y, 0], + mp.Vector3(1, 0, 0), + 1 if S_pol else 0, + 0 if S_pol else 1, + ), + ) t_coeffs = res.alpha - Tmode = abs(t_coeffs[0,0,0])**2/input_flux[0] - print("tran-order:, {}, {}, {}, {:.6f}".format("s" if S_pol else "p",m_x,m_y,Tmode)) + Tmode = abs(t_coeffs[0, 0, 0]) ** 2 / input_flux[0] + print( + "tran-order:, {}, {}, {}, {:.6f}".format( + "s" if S_pol else "p", m_x, m_y, Tmode + ) + ) if m_x == 0 and m_y == 0: Tsum += Tmode elif (m_x != 0 and m_y == 0) or (m_x == 0 and m_y != 0): - Tsum += 2*Tmode + Tsum += 2 * Tmode else: - Tsum += 4*Tmode - + Tsum += 4 * Tmode r_flux = mp.get_fluxes(refl_flux) t_flux = mp.get_fluxes(tran_flux) - Rflux = -r_flux[0]/input_flux[0] - Tflux = t_flux[0]/input_flux[0] + Rflux = -r_flux[0] / input_flux[0] + Tflux = t_flux[0] / input_flux[0] - print("refl:, {}, {}".format(Rsum,Rflux)) - print("tran:, {}, {}".format(Tsum,Tflux)) - print("sum:, {}, {}".format(Rsum+Tsum,Rflux+Tflux)) + print(f"refl:, {Rsum}, {Rflux}") + print(f"tran:, {Tsum}, {Tflux}") + print(f"sum:, {Rsum + Tsum}, {Rflux + Tflux}") ## to obtain agreement for two decimal digits, ## the resolution must be increased to 200 - self.assertAlmostEqual(Rsum,Rflux,places=1) - self.assertAlmostEqual(Tsum,Tflux,places=2) - self.assertAlmostEqual(Rsum+Tsum,1.00,places=1) - + self.assertAlmostEqual(Rsum, Rflux, places=1) + self.assertAlmostEqual(Tsum, Tflux, places=2) + self.assertAlmostEqual(Rsum + Tsum, 1.00, places=1) def test_triangular_lattice_oblique(self): """Unit test for mode decomposition in 3d with nonzero k_point. @@ -342,7 +412,7 @@ def test_triangular_lattice_oblique(self): glass = mp.Medium(index=ng) wvl = 0.5 - fcen = 1/wvl + fcen = 1 / wvl dpml = 1.0 dsub = 2.0 @@ -353,13 +423,13 @@ def test_triangular_lattice_oblique(self): a = 0.6 sx = a - sy = a*np.sqrt(3) + sy = a * np.sqrt(3) - sz = dpml+dsub+hcyl+dair+dpml + sz = dpml + dsub + hcyl + dair + dpml - cell_size = mp.Vector3(sx,sy,sz) + cell_size = mp.Vector3(sx, sy, sz) - boundary_layers = [mp.PML(thickness=dpml,direction=mp.Z)] + boundary_layers = [mp.PML(thickness=dpml, direction=mp.Z)] # plane of incidence is yz # 0° is +z with CCW rotation about x @@ -371,39 +441,44 @@ def test_triangular_lattice_oblique(self): # The planewave source is incident from within the high-index # medium which means ω = c|k|/n where n is the index of medium. # In Meep units (c=1), this implies |k| = nω. - k = mp.Vector3(0,0,ng*fcen).rotate(mp.Vector3(1,0,0),theta) + k = mp.Vector3(0, 0, ng * fcen).rotate(mp.Vector3(1, 0, 0), theta) - def pw_amp(k,x0): + def pw_amp(k, x0): def _pw_amp(x): - return cmath.exp(1j*2*math.pi*k.dot(x+x0)) + return cmath.exp(1j * 2 * math.pi * k.dot(x + x0)) + return _pw_amp - src_pt = mp.Vector3(0,0,-0.5*sz+dpml) - src_cmpt = mp.Ex # S-pol: Ex / P-pol: Ey - sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.1*fcen), - size=mp.Vector3(sx,sy,0), - center=src_pt, - component=src_cmpt, - amp_func=pw_amp(k,src_pt))] - - symmetries = [mp.Mirror(direction=mp.X, phase=-1 if src_cmpt==mp.Ex else +1)] - - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - sources=sources, - default_material=glass, - boundary_layers=boundary_layers, - k_point=k, - symmetries=symmetries) - - refl_pt = mp.Vector3(0,0,-0.5*sz+dpml+0.5*dsub) - refl_flux = sim.add_mode_monitor(fcen, - 0, - 1, - mp.ModeRegion(center=refl_pt, - size=mp.Vector3(sx,sy,0))) - - stop_cond = mp.stop_when_fields_decayed(25,src_cmpt,src_pt,1e-6) + src_pt = mp.Vector3(0, 0, -0.5 * sz + dpml) + src_cmpt = mp.Ex # S-pol: Ex / P-pol: Ey + sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=0.1 * fcen), + size=mp.Vector3(sx, sy, 0), + center=src_pt, + component=src_cmpt, + amp_func=pw_amp(k, src_pt), + ) + ] + + symmetries = [mp.Mirror(direction=mp.X, phase=-1 if src_cmpt == mp.Ex else +1)] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + sources=sources, + default_material=glass, + boundary_layers=boundary_layers, + k_point=k, + symmetries=symmetries, + ) + + refl_pt = mp.Vector3(0, 0, -0.5 * sz + dpml + 0.5 * dsub) + refl_flux = sim.add_mode_monitor( + fcen, 0, 1, mp.ModeRegion(center=refl_pt, size=mp.Vector3(sx, sy, 0)) + ) + + stop_cond = mp.stop_when_fields_decayed(25, src_cmpt, src_pt, 1e-6) sim.run(until_after_sources=stop_cond) input_flux = mp.get_fluxes(refl_flux)[0] @@ -411,55 +486,77 @@ def _pw_amp(x): sim.reset_meep() - substrate = [mp.Block(size=mp.Vector3(mp.inf,mp.inf,dpml+dsub), - center=mp.Vector3(0,0,-0.5*sz+0.5*(dpml+dsub)), - material=glass)] - - grating = [mp.Cylinder(center=mp.Vector3(0,0,-0.5*sz+dpml+dsub+0.5*hcyl), - radius=rcyl, - height=hcyl, - material=glass), - mp.Cylinder(center=mp.Vector3(0.5*sx,0.5*sy,-0.5*sz+dpml+dsub+0.5*hcyl), - radius=rcyl, - height=hcyl, - material=glass), - mp.Cylinder(center=mp.Vector3(-0.5*sx,0.5*sy,-0.5*sz+dpml+dsub+0.5*hcyl), - radius=rcyl, - height=hcyl, - material=glass), - mp.Cylinder(center=mp.Vector3(0.5*sx,-0.5*sy,-0.5*sz+dpml+dsub+0.5*hcyl), - radius=rcyl, - height=hcyl, - material=glass), - mp.Cylinder(center=mp.Vector3(-0.5*sx,-0.5*sy,-0.5*sz+dpml+dsub+0.5*hcyl), - radius=rcyl, - height=hcyl, - material=glass)] + substrate = [ + mp.Block( + size=mp.Vector3(mp.inf, mp.inf, dpml + dsub), + center=mp.Vector3(0, 0, -0.5 * sz + 0.5 * (dpml + dsub)), + material=glass, + ) + ] + + grating = [ + mp.Cylinder( + center=mp.Vector3(0, 0, -0.5 * sz + dpml + dsub + 0.5 * hcyl), + radius=rcyl, + height=hcyl, + material=glass, + ), + mp.Cylinder( + center=mp.Vector3( + 0.5 * sx, 0.5 * sy, -0.5 * sz + dpml + dsub + 0.5 * hcyl + ), + radius=rcyl, + height=hcyl, + material=glass, + ), + mp.Cylinder( + center=mp.Vector3( + -0.5 * sx, 0.5 * sy, -0.5 * sz + dpml + dsub + 0.5 * hcyl + ), + radius=rcyl, + height=hcyl, + material=glass, + ), + mp.Cylinder( + center=mp.Vector3( + 0.5 * sx, -0.5 * sy, -0.5 * sz + dpml + dsub + 0.5 * hcyl + ), + radius=rcyl, + height=hcyl, + material=glass, + ), + mp.Cylinder( + center=mp.Vector3( + -0.5 * sx, -0.5 * sy, -0.5 * sz + dpml + dsub + 0.5 * hcyl + ), + radius=rcyl, + height=hcyl, + material=glass, + ), + ] geometry = substrate + grating - sim = mp.Simulation(resolution=resolution, - cell_size=cell_size, - sources=sources, - geometry=geometry, - boundary_layers=boundary_layers, - k_point=k, - symmetries=symmetries) + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + sources=sources, + geometry=geometry, + boundary_layers=boundary_layers, + k_point=k, + symmetries=symmetries, + ) - refl_flux = sim.add_mode_monitor(fcen, - 0, - 1, - mp.ModeRegion(center=refl_pt, - size=mp.Vector3(sx,sy,0))) + refl_flux = sim.add_mode_monitor( + fcen, 0, 1, mp.ModeRegion(center=refl_pt, size=mp.Vector3(sx, sy, 0)) + ) sim.load_minus_flux_data(refl_flux, input_flux_data) - tran_pt = mp.Vector3(0,0,0.5*sz-dpml) - tran_flux = sim.add_mode_monitor(fcen, - 0, - 1, - mp.ModeRegion(center=tran_pt, - size=mp.Vector3(sx,sy,0))) + tran_pt = mp.Vector3(0, 0, 0.5 * sz - dpml) + tran_flux = sim.add_mode_monitor( + fcen, 0, 1, mp.ModeRegion(center=tran_pt, size=mp.Vector3(sx, sy, 0)) + ) sim.run(until_after_sources=stop_cond) @@ -467,76 +564,107 @@ def _pw_amp(x): Tsum = 0 m = 5 tol = 1e-6 - for nx in range(-m,m+1): - for ny in range(-m,m+1): + for nx in range(-m, m + 1): + for ny in range(-m, m + 1): # convert supercell order to unit cell order mx = nx my = (nx + ny) // 2 # consider only propagating modes in high-index medium - kz2 = (ng*fcen)**2-(k.x+nx/sx)**2-(k.y+ny/sy)**2 + kz2 = (ng * fcen) ** 2 - (k.x + nx / sx) ** 2 - (k.y + ny / sy) ** 2 if kz2 > 0: Rpol = 0 for S_pol in [True, False]: - res = sim.get_eigenmode_coefficients(refl_flux, - mp.DiffractedPlanewave((nx,ny,0), - mp.Vector3(0,1,0), - 1 if S_pol else 0, - 0 if S_pol else 1)) + res = sim.get_eigenmode_coefficients( + refl_flux, + mp.DiffractedPlanewave( + (nx, ny, 0), + mp.Vector3(0, 1, 0), + 1 if S_pol else 0, + 0 if S_pol else 1, + ), + ) coeffs = res.alpha - refl = abs(coeffs[0,0,1])**2 / input_flux + refl = abs(coeffs[0, 0, 1]) ** 2 / input_flux - pol_str = 'S' if S_pol else 'P' + pol_str = "S" if S_pol else "P" if refl > tol: # determine whether diffracted order is for the unit cell or super cell if (nx + ny) % 2 == 0: Rpol += refl - print("refl:, {}, {:2d}, {:2d}, {:.5f}, (unit cell)".format(pol_str,mx,my,refl)) + print( + "refl:, {}, {:2d}, {:2d}, {:.5f}, (unit cell)".format( + pol_str, mx, my, refl + ) + ) else: - print("refl:, {}, {:2d}, {:2d}, {:.7f}, (super cell)".format(pol_str,nx,ny,refl)) + print( + "refl:, {}, {:2d}, {:2d}, {:.7f}, (super cell)".format( + pol_str, nx, ny, refl + ) + ) Rsum += Rpol # consider only propagating modes in air - kz2 = fcen**2-(k.x+nx/sx)**2-(k.y+ny/sy)**2 + kz2 = fcen**2 - (k.x + nx / sx) ** 2 - (k.y + ny / sy) ** 2 if kz2 > 0: Tpol = 0 for S_pol in [True, False]: - res = sim.get_eigenmode_coefficients(tran_flux, - mp.DiffractedPlanewave((nx,ny,0), - mp.Vector3(0,1,0), - 1 if S_pol else 0, - 0 if S_pol else 1)) + res = sim.get_eigenmode_coefficients( + tran_flux, + mp.DiffractedPlanewave( + (nx, ny, 0), + mp.Vector3(0, 1, 0), + 1 if S_pol else 0, + 0 if S_pol else 1, + ), + ) coeffs = res.alpha - tran = abs(coeffs[0,0,0])**2 / input_flux + tran = abs(coeffs[0, 0, 0]) ** 2 / input_flux - pol_str = 'S' if S_pol else 'P' + pol_str = "S" if S_pol else "P" if tran > tol: # determine whether diffracted order is for the unit cell or super cell if (nx + ny) % 2 == 0: Tpol += tran - print("tran:, {}, {:2d}, {:2d}, {:.5f}, (unit cell)".format(pol_str,mx,my,tran)) + print( + "tran:, {}, {:2d}, {:2d}, {:.5f}, (unit cell)".format( + pol_str, mx, my, tran + ) + ) else: - print("tran:, {}, {:2d}, {:2d}, {:.7f}, (super cell)".format(pol_str,nx,ny,tran)) + print( + "tran:, {}, {:2d}, {:2d}, {:.7f}, (super cell)".format( + pol_str, nx, ny, tran + ) + ) Tsum += Tpol - Rflux = -mp.get_fluxes(refl_flux)[0] / input_flux - err = abs(Rflux-Rsum)/Rflux - print("refl:, {:.6f} (flux), {:.6f} (orders), {:.6f} (error)".format(Rflux,Rsum,err)) + err = abs(Rflux - Rsum) / Rflux + print( + "refl:, {:.6f} (flux), {:.6f} (orders), {:.6f} (error)".format( + Rflux, Rsum, err + ) + ) Tflux = mp.get_fluxes(tran_flux)[0] / input_flux - err = abs(Tflux-Tsum)/Tflux - print("tran:, {:.6f} (flux), {:.6f} (orders), {:.6f} (error)".format(Tflux,Tsum,err)) + err = abs(Tflux - Tsum) / Tflux + print( + "tran:, {:.6f} (flux), {:.6f} (orders), {:.6f} (error)".format( + Tflux, Tsum, err + ) + ) - self.assertAlmostEqual(Rsum,Rflux,places=3) - self.assertAlmostEqual(Tsum,Tflux,places=3) - self.assertAlmostEqual(Rsum+Tsum,1.00,places=2) + self.assertAlmostEqual(Rsum, Rflux, places=3) + self.assertAlmostEqual(Tsum, Tflux, places=3) + self.assertAlmostEqual(Rsum + Tsum, 1.00, places=2) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_mpb.py b/python/tests/test_mpb.py index e3242cfff..a95e22d05 100644 --- a/python/tests/test_mpb.py +++ b/python/tests/test_mpb.py @@ -8,26 +8,31 @@ import h5py import numpy as np -from scipy.optimize import minimize_scalar -from scipy.optimize import ridder +from scipy.optimize import minimize_scalar, ridder +from utils import compare_arrays + import meep as mp from meep import mpb -from utils import compare_arrays -@unittest.skipIf(os.getenv('MEEP_SKIP_LARGE_TESTS', False), 'skipping large tests') + +@unittest.skipIf(os.getenv("MEEP_SKIP_LARGE_TESTS", False), "skipping large tests") class TestModeSolver(unittest.TestCase): - data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'data')) - examples_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'examples')) + data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "data")) + examples_dir = os.path.abspath( + os.path.join(os.path.dirname(__file__), "..", "examples") + ) sys.path.insert(0, examples_dir) def setUp(self): self.start = time.time() - self.filename_prefix = os.path.join(self.temp_dir, self.id().split('.')[-1] + '-' + str(mp.my_rank())) + self.filename_prefix = os.path.join( + self.temp_dir, self.id().split(".")[-1] + "-" + str(mp.my_rank()) + ) print() print(self.filename_prefix) - print('=' * 24) + print("=" * 24) @classmethod def setUpClass(cls): @@ -35,7 +40,7 @@ def setUpClass(cls): def tearDown(self): end = time.time() - self.start - print("{}: {:.2f}s".format(self.filename_prefix, end)) + print(f"{self.filename_prefix}: {end:.2f}s") @classmethod def tearDownClass(cls): @@ -43,12 +48,7 @@ def tearDownClass(cls): def init_solver(self, geom=True): num_bands = 8 - k_points = [ - mp.Vector3(), - mp.Vector3(0.5), - mp.Vector3(0.5, 0.5), - mp.Vector3() - ] + k_points = [mp.Vector3(), mp.Vector3(0.5), mp.Vector3(0.5, 0.5), mp.Vector3()] geometry = [mp.Cylinder(0.2, material=mp.Medium(epsilon=12))] if geom else [] k_points = mp.interpolate(4, k_points) @@ -63,7 +63,7 @@ def init_solver(self, geom=True): resolution=resolution, filename_prefix=self.filename_prefix, deterministic=True, - tolerance=1e-12 + tolerance=1e-12, ) def test_attribute_accessors(self): @@ -78,8 +78,8 @@ def test_attribute_accessors(self): self.assertEqual(ms.mode_solver.get_libctl_ensure_periodicity(), True) self.assertEqual(ms.mode_solver.eigensolver_flops, 0) self.assertEqual(ms.mode_solver.negative_epsilon_ok, False) - self.assertEqual(ms.mode_solver.epsilon_input_file, '') - self.assertEqual(ms.mode_solver.mu_input_file, '') + self.assertEqual(ms.mode_solver.epsilon_input_file, "") + self.assertEqual(ms.mode_solver.mu_input_file, "") self.assertEqual(ms.mode_solver.force_mu, False) self.assertEqual(ms.mode_solver.use_simple_preconditioner, False) self.assertEqual(ms.mode_solver.eigensolver_nwork, 3) @@ -95,8 +95,8 @@ def test_attribute_accessors(self): ms.ensure_periodicity = False ms.eigensolver_flops = 20 ms.is_negative_epsilon_ok = True - ms.epsilon_input_file = 'test' - ms.mu_input_file = 'test' + ms.epsilon_input_file = "test" + ms.mu_input_file = "test" ms.force_mu = True ms.use_simple_preconditioner = True ms.eigensolver_nwork = 4 @@ -111,8 +111,8 @@ def test_attribute_accessors(self): self.assertEqual(ms.mode_solver.get_libctl_ensure_periodicity(), False) self.assertEqual(ms.mode_solver.eigensolver_flops, 20) self.assertEqual(ms.mode_solver.negative_epsilon_ok, True) - self.assertEqual(ms.mode_solver.epsilon_input_file, 'test') - self.assertEqual(ms.mode_solver.mu_input_file, 'test') + self.assertEqual(ms.mode_solver.epsilon_input_file, "test") + self.assertEqual(ms.mode_solver.mu_input_file, "test") self.assertEqual(ms.mode_solver.force_mu, True) self.assertEqual(ms.mode_solver.use_simple_preconditioner, True) self.assertEqual(ms.mode_solver.eigensolver_nwork, 4) @@ -129,12 +129,7 @@ def test_resolution(self): ms.resolution = [32, 32, 32] def test_list_split(self): - k_points = [ - mp.Vector3(), - mp.Vector3(0.5), - mp.Vector3(0.5, 0.5), - mp.Vector3() - ] + k_points = [mp.Vector3(), mp.Vector3(0.5), mp.Vector3(0.5, 0.5), mp.Vector3()] k_points = mp.interpolate(4, k_points) ms = mpb.ModeSolver() @@ -167,10 +162,7 @@ def test_list_split(self): def test_first_brillouin_zone(self): ms = self.init_solver() - res = [] - for k in ms.k_points: - res.append(ms.first_brillouin_zone(k)) - + res = [ms.first_brillouin_zone(k) for k in ms.k_points] expected = [ mp.Vector3(0.0, 0.0, 0.0), mp.Vector3(0.10000000000000003, 0.0, 0.0), @@ -199,13 +191,17 @@ def check_band_range_data(self, expected_brd, result, places=3, tol=1e-3): self.assertAlmostEqual(exp[0][0], res[0][0], places=places) # Compare min k msg = "expected {}, got {}" - self.assertTrue(exp[0][1].close(res[0][1], tol=tol), - msg=msg.format(exp[0][1], res[0][1])) + self.assertTrue( + exp[0][1].close(res[0][1], tol=tol), + msg=msg.format(exp[0][1], res[0][1]), + ) # Compare max freqs self.assertAlmostEqual(exp[1][0], res[1][0], places=places) # Compare max k - self.assertTrue(exp[1][1].close(res[1][1], tol=tol), - msg=msg.format(exp[1][1], res[1][1])) + self.assertTrue( + exp[1][1].close(res[1][1], tol=tol), + msg=msg.format(exp[1][1], res[1][1]), + ) def check_freqs(self, expected_freqs, result): for exp, res in zip(expected_freqs, result): @@ -215,13 +211,13 @@ def check_freqs(self, expected_freqs, result): def check_gap_list(self, expected_gap_list, result): self.check_freqs(expected_gap_list, result) - def check_fields_against_h5(self, ref_path, field, suffix=''): - with h5py.File(ref_path, 'r') as ref: + def check_fields_against_h5(self, ref_path, field, suffix=""): + with h5py.File(ref_path, "r") as ref: # Reshape the reference data into a component-wise 1d array like # [x1,y1,z1,x2,y2,z2,etc.] - ref_x = mp.complexarray(ref["x.r{}".format(suffix)][()], ref["x.i{}".format(suffix)][()]) - ref_y = mp.complexarray(ref["y.r{}".format(suffix)][()], ref["y.i{}".format(suffix)][()]) - ref_z = mp.complexarray(ref["z.r{}".format(suffix)][()], ref["z.i{}".format(suffix)][()]) + ref_x = mp.complexarray(ref[f"x.r{suffix}"][()], ref[f"x.i{suffix}"][()]) + ref_y = mp.complexarray(ref[f"y.r{suffix}"][()], ref[f"y.i{suffix}"][()]) + ref_z = mp.complexarray(ref[f"z.r{suffix}"][()], ref[f"z.i{suffix}"][()]) ref_arr = np.zeros(np.prod(field.shape), dtype=np.complex128) ref_arr[0::3] = ref_x.ravel() @@ -232,18 +228,25 @@ def check_fields_against_h5(self, ref_path, field, suffix=''): def compare_h5_files(self, ref_path, res_path, tol=1e-3): with h5py.File(ref_path) as ref: - with h5py.File(res_path, 'r') as res: + with h5py.File(res_path, "r") as res: for k in ref.keys(): - if k == 'description': + if k == "description": self.assertEqual(ref[k][()], res[k][()]) else: compare_arrays(self, ref[k][()], res[k][()], tol=tol) def test_update_band_range_data(self): brd = [] - freqs = [0.0, 1.0000000001231053, 1.0000000001577114, 1.000000000183077, - 1.0000000003647922, 1.4142135627385737, 1.4142135630373556, - 1.4142135634172286] + freqs = [ + 0.0, + 1.0000000001231053, + 1.0000000001577114, + 1.000000000183077, + 1.0000000003647922, + 1.4142135627385737, + 1.4142135630373556, + 1.4142135634172286, + ] kpoint = mp.Vector3() expected = [ @@ -263,27 +266,50 @@ def test_update_band_range_data(self): def test_run_te_no_geometry(self): - expected_freqs = [0.0, 1.0, 1.0000000000000004, 1.0000000000000013, - 1.0000000000000016, 1.4142135623730958, 1.4142135623730965, - 1.414213562373097] + expected_freqs = [ + 0.0, + 1.0, + 1.0000000000000004, + 1.0000000000000013, + 1.0000000000000016, + 1.4142135623730958, + 1.4142135623730965, + 1.414213562373097, + ] expected_brd = [ - ((0.0, mp.Vector3(0.0, 0.0, 0.0)), - (0.7071067811865476, mp.Vector3(0.5, 0.5, 0.0))), - ((0.5000000000350678, mp.Vector3(0.5, 0.0, 0.0)), - (1.0000000000464613, mp.Vector3(0.0, 0.0, 0.0))), - ((0.7071067811884221, mp.Vector3(0.5, 0.5, 0.0)), - (1.1180339887555244, mp.Vector3(0.5, 0.0, 0.0))), - ((0.7071067811901163, mp.Vector3(0.5, 0.5, 0.0)), - (1.1313708499266775, mp.Vector3(0.2, 0.2, 0.0))), - ((1.000000000001028, mp.Vector3(0.0, 0.0, 0.0)), - (1.5811388300846416, mp.Vector3(0.5, 0.5, 0.0))), - ((1.1180339887687103, mp.Vector3(0.5, 0.0, 0.0)), - (1.5811388300858549, mp.Vector3(0.5, 0.5, 0.0))), - ((1.2806248475163993, mp.Vector3(0.20000000000000004, 0.0, 0.0)), - (1.5811388300892486, mp.Vector3(0.5, 0.5, 0.0))), - ((1.4142135623752818, mp.Vector3(0.0, 0.0, 0.0)), - (1.8027756376524435, mp.Vector3(0.5, 0.0, 0.0))), + ( + (0.0, mp.Vector3(0.0, 0.0, 0.0)), + (0.7071067811865476, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (0.5000000000350678, mp.Vector3(0.5, 0.0, 0.0)), + (1.0000000000464613, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.7071067811884221, mp.Vector3(0.5, 0.5, 0.0)), + (1.1180339887555244, mp.Vector3(0.5, 0.0, 0.0)), + ), + ( + (0.7071067811901163, mp.Vector3(0.5, 0.5, 0.0)), + (1.1313708499266775, mp.Vector3(0.2, 0.2, 0.0)), + ), + ( + (1.000000000001028, mp.Vector3(0.0, 0.0, 0.0)), + (1.5811388300846416, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (1.1180339887687103, mp.Vector3(0.5, 0.0, 0.0)), + (1.5811388300858549, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (1.2806248475163993, mp.Vector3(0.20000000000000004, 0.0, 0.0)), + (1.5811388300892486, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (1.4142135623752818, mp.Vector3(0.0, 0.0, 0.0)), + (1.8027756376524435, mp.Vector3(0.5, 0.0, 0.0)), + ), ] ms = self.init_solver(geom=False) @@ -299,27 +325,53 @@ def test_run_te_no_geometry(self): def test_run_te(self): - expected_freqs = [0.0, 0.5527092320101986, 0.7732265593069759, 0.773229883948054, - 0.9229965195855876, 1.0001711176882833, 1.0001720032257042, - 1.092820931747826] + expected_freqs = [ + 0.0, + 0.5527092320101986, + 0.7732265593069759, + 0.773229883948054, + 0.9229965195855876, + 1.0001711176882833, + 1.0001720032257042, + 1.092820931747826, + ] expected_brd = [ - ((0.0, mp.Vector3(0.0, 0.0, 0.0)), - (0.49683586474489877, mp.Vector3(0.5, 0.5, 0.0))), - ((0.4415884497225449, mp.Vector3(0.5, 0.0, 0.0)), - (0.5931405141160885, mp.Vector3(0.5, 0.5, 0.0))), - ((0.5931535863117832, mp.Vector3(0.5, 0.5, 0.0)), - (0.7732265593069759, mp.Vector3(0.0, 0.0, 0.0))), - ((0.6791690130757013, mp.Vector3(0.5, 0.5, 0.0)), - (0.80968915516771, mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0))), - ((0.8241814443502151, mp.Vector3(0.5, 0.30000000000000004, 0.0)), - (0.9229965195855876, mp.Vector3(0.0, 0.0, 0.0))), - ((0.8819770916660669, mp.Vector3(0.5, 0.5, 0.0)), - (1.0291597050650205, mp.Vector3(0.5, 0.0, 0.0))), - ((0.8819818134421844, mp.Vector3(0.5, 0.5, 0.0)), - (1.086072932359415, mp.Vector3(0.5, 0.0, 0.0))), - ((1.0878689635052692, mp.Vector3(0.5, 0.0, 0.0)), - (1.1119173707556929, mp.Vector3(0.5, 0.5, 0.0))), + ( + (0.0, mp.Vector3(0.0, 0.0, 0.0)), + (0.49683586474489877, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (0.4415884497225449, mp.Vector3(0.5, 0.0, 0.0)), + (0.5931405141160885, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (0.5931535863117832, mp.Vector3(0.5, 0.5, 0.0)), + (0.7732265593069759, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.6791690130757013, mp.Vector3(0.5, 0.5, 0.0)), + ( + 0.80968915516771, + mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0), + ), + ), + ( + (0.8241814443502151, mp.Vector3(0.5, 0.30000000000000004, 0.0)), + (0.9229965195855876, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.8819770916660669, mp.Vector3(0.5, 0.5, 0.0)), + (1.0291597050650205, mp.Vector3(0.5, 0.0, 0.0)), + ), + ( + (0.8819818134421844, mp.Vector3(0.5, 0.5, 0.0)), + (1.086072932359415, mp.Vector3(0.5, 0.0, 0.0)), + ), + ( + (1.0878689635052692, mp.Vector3(0.5, 0.0, 0.0)), + (1.1119173707556929, mp.Vector3(0.5, 0.5, 0.0)), + ), ] expected_gap_list = [ @@ -344,22 +396,41 @@ def test_run_te(self): def test_run_tm(self): expected_brd = [ - ((0.0, mp.Vector3(0.0, 0.0, 0.0)), - (0.28094795352537366, mp.Vector3(0.5, 0.5, 0.0))), - ((0.4171142493246634, mp.Vector3(0.5, 0.0, 0.0)), - (0.5460267793370319, mp.Vector3(0.0, 0.0, 0.0))), - ((0.49619745276546123, mp.Vector3(0.5, 0.5, 0.0)), - (0.5576576362977246, mp.Vector3(0.5, 0.0, 0.0))), - ((0.5520955864542503, mp.Vector3(0.0, 0.0, 0.0)), - (0.7133951516423513, mp.Vector3(0.5, 0.0, 0.0))), - ((0.7413109657068678, mp.Vector3(0.5, 0.0, 0.0)), - (0.8594741069571248, mp.Vector3(0.5, 0.5, 0.0))), - ((0.8295176150251525, mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0)), - (0.8783155473463833, mp.Vector3(0.5, 0.5, 0.0))), - ((0.8625159053811312, mp.Vector3(0.5, 0.0, 0.0)), - (0.9511074539064021, mp.Vector3(0.0, 0.0, 0.0))), - ((0.8793510958294801, mp.Vector3(0.5, 0.5, 0.0)), - (1.0825923841450287, mp.Vector3(0.0, 0.0, 0.0))), + ( + (0.0, mp.Vector3(0.0, 0.0, 0.0)), + (0.28094795352537366, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (0.4171142493246634, mp.Vector3(0.5, 0.0, 0.0)), + (0.5460267793370319, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.49619745276546123, mp.Vector3(0.5, 0.5, 0.0)), + (0.5576576362977246, mp.Vector3(0.5, 0.0, 0.0)), + ), + ( + (0.5520955864542503, mp.Vector3(0.0, 0.0, 0.0)), + (0.7133951516423513, mp.Vector3(0.5, 0.0, 0.0)), + ), + ( + (0.7413109657068678, mp.Vector3(0.5, 0.0, 0.0)), + (0.8594741069571248, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + ( + 0.8295176150251525, + mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0), + ), + (0.8783155473463833, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (0.8625159053811312, mp.Vector3(0.5, 0.0, 0.0)), + (0.9511074539064021, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.8793510958294801, mp.Vector3(0.5, 0.5, 0.0)), + (1.0825923841450287, mp.Vector3(0.0, 0.0, 0.0)), + ), ] ms = self.init_solver() @@ -370,37 +441,37 @@ def test_run_tm(self): def _test_get_field(self, field): ms = self.init_solver() ms.run_te() - get_field_func = getattr(ms, "get_{}field".format(field)) - fix_phase_func = getattr(mpb, "fix_{}field_phase".format(field)) + get_field_func = getattr(ms, f"get_{field}field") + fix_phase_func = getattr(mpb, f"fix_{field}field_phase") fix_phase_func(ms, ms.num_bands) fields = get_field_func(ms.num_bands) - ref_fname = "tutorial-{}.k16.b08.te.h5".format(field) + ref_fname = f"tutorial-{field}.k16.b08.te.h5" ref_path = os.path.join(self.data_dir, ref_fname) self.check_fields_against_h5(ref_path, fields) def test_get_bfield(self): - self._test_get_field('b') + self._test_get_field("b") def test_get_efield(self): - self._test_get_field('e') + self._test_get_field("e") def test_get_dfield(self): - self._test_get_field('d') + self._test_get_field("d") def test_get_hfield(self): - self._test_get_field('h') + self._test_get_field("h") def test_output_field_to_file(self): - fname = 'tutorial-epsilon.h5' + fname = "tutorial-epsilon.h5" data_path = os.path.join(self.data_dir, fname) ms = self.init_solver() ms.run_te() ms.output_epsilon() - res_path = self.filename_prefix + '-epsilon.h5' + res_path = f"{self.filename_prefix}-epsilon.h5" self.compare_h5_files(data_path, res_path) def test_compute_field_energy(self): @@ -418,21 +489,21 @@ def test_compute_field_energy(self): self.assertAlmostEqual(pt, 1.330368347216153e-9) expected_fp = mp.Vector3( - 2.582338850993523e-05+6.674311589555886e-12j, - -2.5759589225968237e-05-6.657825513845581e-12j, - 0.0 - 0.0j + 2.582338850993523e-05 + 6.674311589555886e-12j, + -2.5759589225968237e-05 - 6.657825513845581e-12j, + 0.0 - 0.0j, ) expected_bloch_fp = mp.Vector3( 2.5823356723958247e-5 + 6.713243287584132e-12j, -2.575955745071957e-5 - 6.696552990958943e-12j, - -0.0 - 0.0j + -0.0 - 0.0j, ) expected_eps_inv_tensor = mp.Matrix( mp.Vector3(1.0 + 0.0j, 0.0 - 0.0j, 0.0 - 0.0j), mp.Vector3(0.0 + 0.0j, 1.0 + 0.0j, 0.0 - 0.0j), - mp.Vector3(0.0 + 0.0j, 0.0 + 0.0j, 1.0 + 0.0j) + mp.Vector3(0.0 + 0.0j, 0.0 + 0.0j, 1.0 + 0.0j), ) self.assertTrue(expected_fp.close(field_pt)) @@ -443,13 +514,22 @@ def test_compute_field_energy(self): energy_in_dielectric = ms.compute_energy_in_dielectric(0, 1) - expected_energy = [1.0000000000000002, 1.726755206037815e-5, 0.4999827324479414, - 1.7267552060375955e-5, 0.4999827324479377, 0.0, 0.0] + expected_energy = [ + 1.0000000000000002, + 1.726755206037815e-5, + 0.4999827324479414, + 1.7267552060375955e-5, + 0.4999827324479377, + 0.0, + 0.0, + ] expected_energy_in_dielectric = 0.6990769686037558 compare_arrays(self, np.array(expected_energy), np.array(energy)) - self.assertAlmostEqual(expected_energy_in_dielectric, energy_in_dielectric, places=3) + self.assertAlmostEqual( + expected_energy_in_dielectric, energy_in_dielectric, places=3 + ) def test_compute_group_velocity(self): ms = self.init_solver() @@ -459,8 +539,13 @@ def test_compute_group_velocity(self): res3 = ms.compute_one_group_velocity_component(mp.Vector3(0.5, 0.5), 8) expected1 = [ - 0.0, 1.470762578355642e-4, -1.4378185933055663e-4, 1.1897503996483383e-4, - -4.892687048681629e-4, 1.1240346140784176e-4, 1.5842474585356007e-4, + 0.0, + 1.470762578355642e-4, + -1.4378185933055663e-4, + 1.1897503996483383e-4, + -4.892687048681629e-4, + 1.1240346140784176e-4, + 1.5842474585356007e-4, 4.496945573323881e-5, ] @@ -479,23 +564,23 @@ def test_output_efield_z(self): mpb.fix_efield_phase(ms, 8) mpb.output_efield_z(ms, 8) - ref_fname = 'tutorial-e.k16.b08.z.tm.h5' + ref_fname = "tutorial-e.k16.b08.z.tm.h5" ref_path = os.path.join(self.data_dir, ref_fname) - res_path = re.sub('tutorial', ms.filename_prefix, ref_fname) + res_path = re.sub("tutorial", ms.filename_prefix, ref_fname) self.compare_h5_files(ref_path, res_path) def test_output_dpwr_in_objects(self): ms = self.init_solver() ms.run_te(mpb.output_dpwr_in_objects(mpb.output_dfield, 0.85, ms.geometry)) - ref_fname1 = 'tutorial-d.k01.b02.te.h5' - ref_fname2 = 'tutorial-d.k16.b02.te.h5' + ref_fname1 = "tutorial-d.k01.b02.te.h5" + ref_fname2 = "tutorial-d.k16.b02.te.h5" ref_path1 = os.path.join(self.data_dir, ref_fname1) ref_path2 = os.path.join(self.data_dir, ref_fname2) - res_path1 = re.sub('tutorial', ms.filename_prefix, ref_fname1) - res_path2 = re.sub('tutorial', ms.filename_prefix, ref_fname2) + res_path1 = re.sub("tutorial", ms.filename_prefix, ref_fname1) + res_path2 = re.sub("tutorial", ms.filename_prefix, ref_fname2) self.compare_h5_files(ref_path1, res_path1) self.compare_h5_files(ref_path2, res_path2) @@ -503,36 +588,70 @@ def test_output_dpwr_in_objects(self): def test_triangular_lattice(self): expected_brd = [ - ((0.0, mp.Vector3(0.0, 0.0, 0.0)), - (0.2746902258623623, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))), - ((0.44533108084715683, mp.Vector3(0.0, 0.5, 0.0)), - (0.5605181423162835, mp.Vector3(0.0, 0.0, 0.0))), - ((0.4902389149027666, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)), - (0.5605607947797747, mp.Vector3(0.0, 0.0, 0.0))), - ((0.5932960873585144, mp.Vector3(0.0, 0.0, 0.0)), - (0.7907195974443698, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))), - ((0.790832076332758, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)), - (0.8374511167537562, mp.Vector3(0.0, 0.0, 0.0))), - ((0.8375948528443267, mp.Vector3(0.0, 0.0, 0.0)), - (0.867200926490345, mp.Vector3(-0.2, 0.39999999999999997, 0.0))), - ((0.8691349955739203, mp.Vector3(-0.13333333333333336, 0.4333333333333333, 0.0)), - (0.9941291022664892, mp.Vector3(0.0, 0.0, 0.0))), - ((0.8992499095547049, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)), - (1.098318352915696, mp.Vector3(0.0, 0.0, 0.0))), + ( + (0.0, mp.Vector3(0.0, 0.0, 0.0)), + ( + 0.2746902258623623, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + ), + ( + (0.44533108084715683, mp.Vector3(0.0, 0.5, 0.0)), + (0.5605181423162835, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + ( + 0.4902389149027666, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + (0.5605607947797747, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.5932960873585144, mp.Vector3(0.0, 0.0, 0.0)), + ( + 0.7907195974443698, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + ), + ( + ( + 0.790832076332758, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + (0.8374511167537562, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.8375948528443267, mp.Vector3(0.0, 0.0, 0.0)), + (0.867200926490345, mp.Vector3(-0.2, 0.39999999999999997, 0.0)), + ), + ( + ( + 0.8691349955739203, + mp.Vector3(-0.13333333333333336, 0.4333333333333333, 0.0), + ), + (0.9941291022664892, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + ( + 0.8992499095547049, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + (1.098318352915696, mp.Vector3(0.0, 0.0, 0.0)), + ), ] ms = self.init_solver() ms.geometry_lattice = mp.Lattice( size=mp.Vector3(1, 1), basis1=mp.Vector3(math.sqrt(3) / 2, 0.5), - basis2=mp.Vector3(math.sqrt(3) / 2, -0.5) + basis2=mp.Vector3(math.sqrt(3) / 2, -0.5), ) k_points = [ mp.Vector3(), mp.Vector3(y=0.5), mp.Vector3(-1 / 3, 1 / 3), - mp.Vector3() + mp.Vector3(), ] ms.k_points = mp.interpolate(4, k_points) @@ -541,7 +660,6 @@ def test_triangular_lattice(self): self.check_band_range_data(expected_brd, ms.band_range_data) def test_maximize_first_tm_gap(self): - def first_tm_gap(r): ms.geometry = [mp.Cylinder(r, material=mp.Medium(epsilon=12))] ms.run_tm() @@ -551,34 +669,53 @@ def first_tm_gap(r): ms.num_bands = 2 ms.mesh_size = 7 - result = minimize_scalar(first_tm_gap, method='bounded', bounds=[0.1, 0.5], options={'xatol': 0.1}) + result = minimize_scalar( + first_tm_gap, method="bounded", bounds=[0.1, 0.5], options={"xatol": 0.1} + ) expected = 39.10325687542367 self.assertAlmostEqual(expected, result.fun * -1, places=2) def test_anisotropic_2d_gap(self): expected_brd = [ - ((0.0, mp.Vector3(0.0, 0.0, 0.0)), - (0.2213165540404889, mp.Vector3(0.5, 0.5, 0.0))), - ((0.0, mp.Vector3(0.0, 0.0, 0.0)), - (0.23068427462181276, mp.Vector3(0.5, 0.5, 0.0))), - ((0.21691192680454566, mp.Vector3(0.5, 0.0, 0.0)), - (0.319020283148369, mp.Vector3(0.0, 0.0, 0.0))), - ((0.30110868065428525, mp.Vector3(0.5, 0.0, 0.0)), - (0.3648353129125716, mp.Vector3(0.0, 0.0, 0.0))), - ((0.30701621910773247, mp.Vector3(0.5, 0.5, 0.0)), - (0.3852513546698513, mp.Vector3(0.1, 0.1, 0.0))), - ((0.341835260571013, mp.Vector3(0.5, 0.30000000000000004, 0.0)), - (0.391421048600237, mp.Vector3(0.5, 0.10000000000000003, 0.0))), - ((0.34982139739904294, mp.Vector3(0.5, 0.5, 0.0)), - (0.4075642914057991, mp.Vector3(0.4, 0.0, 0.0))), - ((0.3963465468598276, mp.Vector3(0.1, 0.1, 0.0)), - (0.4772237204606825, mp.Vector3(0.5, 0.5, 0.0))), - + ( + (0.0, mp.Vector3(0.0, 0.0, 0.0)), + (0.2213165540404889, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (0.0, mp.Vector3(0.0, 0.0, 0.0)), + (0.23068427462181276, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (0.21691192680454566, mp.Vector3(0.5, 0.0, 0.0)), + (0.319020283148369, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.30110868065428525, mp.Vector3(0.5, 0.0, 0.0)), + (0.3648353129125716, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.30701621910773247, mp.Vector3(0.5, 0.5, 0.0)), + (0.3852513546698513, mp.Vector3(0.1, 0.1, 0.0)), + ), + ( + (0.341835260571013, mp.Vector3(0.5, 0.30000000000000004, 0.0)), + (0.391421048600237, mp.Vector3(0.5, 0.10000000000000003, 0.0)), + ), + ( + (0.34982139739904294, mp.Vector3(0.5, 0.5, 0.0)), + (0.4075642914057991, mp.Vector3(0.4, 0.0, 0.0)), + ), + ( + (0.3963465468598276, mp.Vector3(0.1, 0.1, 0.0)), + (0.4772237204606825, mp.Vector3(0.5, 0.5, 0.0)), + ), ] ms = self.init_solver() - ms.geometry = [mp.Cylinder(0.3, material=mp.Medium(epsilon_diag=mp.Vector3(1, 1, 12)))] + ms.geometry = [ + mp.Cylinder(0.3, material=mp.Medium(epsilon_diag=mp.Vector3(1, 1, 12))) + ] ms.default_material = mp.Medium(epsilon_diag=mp.Vector3(12, 12, 1)) ms.num_bands = 8 ms.run() @@ -591,7 +728,9 @@ def test_point_defect_state(self): ms.geometry_lattice = mp.Lattice(size=mp.Vector3(5, 5)) ms.geometry = [mp.Cylinder(0.2, material=mp.Medium(epsilon=12))] - ms.geometry = mp.geometric_objects_lattice_duplicates(ms.geometry_lattice, ms.geometry) + ms.geometry = mp.geometric_objects_lattice_duplicates( + ms.geometry_lattice, ms.geometry + ) ms.geometry.append(mp.Cylinder(0.2, material=mp.air)) ms.resolution = 16 @@ -616,8 +755,10 @@ def test_point_defect_state(self): ms.run_tm() expected_brd = [ - ((0.37730041222979477, mp.Vector3(0.5, 0.5, 0.0)), - (0.37730041222979477, mp.Vector3(0.5, 0.5, 0.0))), + ( + (0.37730041222979477, mp.Vector3(0.5, 0.5, 0.0)), + (0.37730041222979477, mp.Vector3(0.5, 0.5, 0.0)), + ), ] self.check_band_range_data(expected_brd, ms.band_range_data) @@ -625,7 +766,9 @@ def test_point_defect_state(self): old_geometry = ms.geometry # save the 5x5 grid with a missing rod def rootfun(eps): - ms.geometry = old_geometry + [mp.Cylinder(0.2, material=mp.Medium(epsilon=eps))] + ms.geometry = old_geometry + [ + mp.Cylinder(0.2, material=mp.Medium(epsilon=eps)) + ] ms.run_tm() return ms.get_freqs()[0] - 0.314159 @@ -641,42 +784,60 @@ def test_output_charge_density(self): mpb.fix_efield_phase(ms, 8) mpb.output_charge_density(ms, 8) - ref_fn = 'tutorial-C.k16.b08.te.h5' + ref_fn = "tutorial-C.k16.b08.te.h5" ref_path = os.path.join(self.data_dir, ref_fn) - res_path = re.sub('tutorial', ms.filename_prefix, ref_fn) + res_path = re.sub("tutorial", ms.filename_prefix, ref_fn) self.compare_h5_files(ref_path, res_path) def test_bragg_sine(self): from mpb_bragg_sine import ms + ms.deterministic = True ms.tolerance = 1e-12 ms.filename_prefix = self.filename_prefix ms.run_tm() expected_brd = [ - ((0.0, mp.Vector3(0.0, 0.0, 0.0)), - (0.19477466366820298, mp.Vector3(0.5, 0.0, 0.0))), - ((0.306403026230844, mp.Vector3(0.5, 0.0, 0.0)), - (0.4687748525867193, mp.Vector3(0.0, 0.0, 0.0))), - ((0.5466257501317459, mp.Vector3(0.0, 0.0, 0.0)), - (0.7316504426541637, mp.Vector3(0.5, 0.0, 0.0))), - ((0.7842615905093812, mp.Vector3(0.5, 0.0, 0.0)), - (0.9893486155437277, mp.Vector3(0.0, 0.0, 0.0))), - ((1.0240548648147831, mp.Vector3(0.0, 0.0, 0.0)), - (1.244098004202588, mp.Vector3(0.5, 0.0, 0.0))), - ((1.266656686185507, mp.Vector3(0.5, 0.0, 0.0)), - (1.4970379696966822, mp.Vector3(0.0, 0.0, 0.0))), - ((1.5115800994652884, mp.Vector3(0.0, 0.0, 0.0)), - (1.7488359039910502, mp.Vector3(0.5, 0.0, 0.0))), - ((1.7581683208483643, mp.Vector3(0.5, 0.0, 0.0)), - (1.9999072007119787, mp.Vector3(0.0, 0.0, 0.0))), + ( + (0.0, mp.Vector3(0.0, 0.0, 0.0)), + (0.19477466366820298, mp.Vector3(0.5, 0.0, 0.0)), + ), + ( + (0.306403026230844, mp.Vector3(0.5, 0.0, 0.0)), + (0.4687748525867193, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.5466257501317459, mp.Vector3(0.0, 0.0, 0.0)), + (0.7316504426541637, mp.Vector3(0.5, 0.0, 0.0)), + ), + ( + (0.7842615905093812, mp.Vector3(0.5, 0.0, 0.0)), + (0.9893486155437277, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (1.0240548648147831, mp.Vector3(0.0, 0.0, 0.0)), + (1.244098004202588, mp.Vector3(0.5, 0.0, 0.0)), + ), + ( + (1.266656686185507, mp.Vector3(0.5, 0.0, 0.0)), + (1.4970379696966822, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (1.5115800994652884, mp.Vector3(0.0, 0.0, 0.0)), + (1.7488359039910502, mp.Vector3(0.5, 0.0, 0.0)), + ), + ( + (1.7581683208483643, mp.Vector3(0.5, 0.0, 0.0)), + (1.9999072007119787, mp.Vector3(0.0, 0.0, 0.0)), + ), ] self.check_band_range_data(expected_brd, ms.band_range_data) def test_bragg(self): from mpb_bragg import ms + ms.deterministic = True ms.tolerance = 1e-12 ms.filename_prefix = self.filename_prefix @@ -684,14 +845,15 @@ def test_bragg(self): mpb.fix_hfield_phase(ms, 8) mpb.output_hfield_y(ms, 8) - ref_fn = 'bragg-h.k01.b08.y.tm.h5' + ref_fn = "bragg-h.k01.b08.y.tm.h5" ref_path = os.path.join(self.data_dir, ref_fn) - res_path = re.sub('bragg', self.filename_prefix, ref_fn) + res_path = re.sub("bragg", self.filename_prefix, ref_fn) self.compare_h5_files(ref_path, res_path) def test_diamond(self): from mpb_diamond import ms + ms.deterministic = True ms.filename_prefix = self.filename_prefix ms.tolerance = 1e-12 @@ -700,46 +862,62 @@ def test_diamond(self): def get_dpwr(ms, band): dpwr.append(ms.get_dpwr(band)) - ms.run(mpb.output_at_kpoint(mp.Vector3(0, 0.625, 0.375), - mpb.fix_dfield_phase, - mpb.output_dpwr, - get_dpwr)) + ms.run( + mpb.output_at_kpoint( + mp.Vector3(0, 0.625, 0.375), + mpb.fix_dfield_phase, + mpb.output_dpwr, + get_dpwr, + ) + ) expected_brd = [ - ((0.0, mp.Vector3(0.0, 0.0, 0.0)), - (0.39455107895905156, mp.Vector3(0.25, 0.75, 0.5))), - ((0.0, mp.Vector3(0.0, 0.0, 0.0)), - (0.3967658014080592, mp.Vector3(0.29999999999999993, 0.75, 0.45000000000000007))), - ((0.4423707668172989, mp.Vector3(0.0, 0.5, 0.0)), - (0.5955899630254676, mp.Vector3(0.0, 0.0, 0.0))), - ((0.44355516512198145, mp.Vector3(0.0, 0.5, 0.0)), - (0.5958191312898851, mp.Vector3(0.0, 0.0, 0.0))), - ((0.5030135895148902, mp.Vector3(0.0, 0.6, 0.4)), - (0.5958386856926985, mp.Vector3(0.0, 0.0, 0.0))), - - + ( + (0.0, mp.Vector3(0.0, 0.0, 0.0)), + (0.39455107895905156, mp.Vector3(0.25, 0.75, 0.5)), + ), + ( + (0.0, mp.Vector3(0.0, 0.0, 0.0)), + ( + 0.3967658014080592, + mp.Vector3(0.29999999999999993, 0.75, 0.45000000000000007), + ), + ), + ( + (0.4423707668172989, mp.Vector3(0.0, 0.5, 0.0)), + (0.5955899630254676, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.44355516512198145, mp.Vector3(0.0, 0.5, 0.0)), + (0.5958191312898851, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.5030135895148902, mp.Vector3(0.0, 0.6, 0.4)), + (0.5958386856926985, mp.Vector3(0.0, 0.0, 0.0)), + ), ] self.check_band_range_data(expected_brd, ms.band_range_data) - ref_fn = 'diamond-dpwr.k06.b05.h5' + ref_fn = "diamond-dpwr.k06.b05.h5" ref_path = os.path.join(self.data_dir, ref_fn) - res_path = re.sub('diamond', self.filename_prefix, ref_fn) + res_path = re.sub("diamond", self.filename_prefix, ref_fn) self.compare_h5_files(ref_path, res_path) # Test MPBData.convert() md = mpb.MPBData(rectify=True, periods=2, resolution=32) converted_dpwr = [md.convert(d) for d in dpwr] - ref_fn = 'converted-diamond-dpwr.k06.b05.h5' + ref_fn = "converted-diamond-dpwr.k06.b05.h5" ref_path = os.path.join(self.data_dir, ref_fn) - with h5py.File(ref_path, 'r') as f: - expected = f['data-new'][()] + with h5py.File(ref_path, "r") as f: + expected = f["data-new"][()] compare_arrays(self, expected, converted_dpwr[-1]) def test_hole_slab(self): from mpb_hole_slab import ms + ms.deterministic = True ms.filename_prefix = self.filename_prefix ms.k_points = [mp.Vector3(1 / -3, 1 / 3)] @@ -749,80 +927,149 @@ def test_hole_slab(self): mpb.fix_hfield_phase(ms, 9) mpb.output_hfield_z(ms, 9) - ref_fn = 'hole-slab-h.k01.b09.z.zeven.h5' + ref_fn = "hole-slab-h.k01.b09.z.zeven.h5" ref_path = os.path.join(self.data_dir, ref_fn) - res_path = re.sub('hole-slab', self.filename_prefix, ref_fn) + res_path = re.sub("hole-slab", self.filename_prefix, ref_fn) ms.display_eigensolver_stats() self.compare_h5_files(ref_path, res_path) def test_honey_rods(self): from mpb_honey_rods import ms + ms.deterministic = True ms.filename_prefix = self.filename_prefix ms.tolerance = 1e-12 expected_tm_brd = [ - ((0.0, mp.Vector3(0.0, 0.0, 0.0)), - (0.3351167660354989, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))), - ((0.3351850759916969, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)), - (0.42984811237816406, mp.Vector3(0.0, 0.0, 0.0))), - ((0.5751709345431462, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)), - (0.7255897672261712, mp.Vector3(0.0, 0.0, 0.0))), - ((0.6918627724774271, mp.Vector3(0.0, 0.5, 0.0)), - (0.747622077830657, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))), - ((0.7443374497087805, mp.Vector3(-0.06666666666666667, 0.06666666666666667, 0.0)), - (0.7793792212092525, mp.Vector3(0.0, 0.5, 0.0))), - ((0.7852786984418492, mp.Vector3(0.0, 0.0, 0.0)), - (0.8193652861712535, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))), - ((0.7856577771856611, mp.Vector3(0.0, 0.0, 0.0)), - (0.9122560439014182, mp.Vector3(0.0, 0.5, 0.0))), - ((1.0540350508135123, mp.Vector3(0.0, 0.5, 0.0)), - (1.1492769389234725, mp.Vector3(0.0, 0.0, 0.0))), - + ( + (0.0, mp.Vector3(0.0, 0.0, 0.0)), + ( + 0.3351167660354989, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + ), + ( + ( + 0.3351850759916969, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + (0.42984811237816406, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + ( + 0.5751709345431462, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + (0.7255897672261712, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.6918627724774271, mp.Vector3(0.0, 0.5, 0.0)), + ( + 0.747622077830657, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + ), + ( + ( + 0.7443374497087805, + mp.Vector3(-0.06666666666666667, 0.06666666666666667, 0.0), + ), + (0.7793792212092525, mp.Vector3(0.0, 0.5, 0.0)), + ), + ( + (0.7852786984418492, mp.Vector3(0.0, 0.0, 0.0)), + ( + 0.8193652861712535, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + ), + ( + (0.7856577771856611, mp.Vector3(0.0, 0.0, 0.0)), + (0.9122560439014182, mp.Vector3(0.0, 0.5, 0.0)), + ), + ( + (1.0540350508135123, mp.Vector3(0.0, 0.5, 0.0)), + (1.1492769389234725, mp.Vector3(0.0, 0.0, 0.0)), + ), ] ms.run_tm() self.check_band_range_data(expected_tm_brd, ms.band_range_data) expected_te_brd = [ - ((0.0, mp.Vector3(0.0, 0.0, 0.0)), - (0.5535093489972593, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))), - ((0.5203183590840945, mp.Vector3(0.0, 0.5, 0.0)), - (0.7278447515454929, mp.Vector3(0.0, 0.0, 0.0))), - ((0.576335859651312, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)), - (0.7880878930618354, mp.Vector3(0.0, 0.0, 0.0))), - ((0.8161730293674944, mp.Vector3(0.0, 0.5, 0.0)), - (0.9209611432140968, mp.Vector3(0.0, 0.0, 0.0))), - ((0.8385562359606971, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)), - (0.9220849425898038, mp.Vector3(0.0, 0.0, 0.0))), - ((1.0168656683915511, mp.Vector3(0.0, 0.0, 0.0)), - (1.1083536673418435, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))), - ((1.0184507253059425, mp.Vector3(0.0, 0.0, 0.0)), - (1.159370227370719, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))), - ((1.1636719050364361, mp.Vector3(-0.2, 0.2, 0.0)), - (1.2433411839870618, mp.Vector3(0.0, 0.0, 0.0))), + ( + (0.0, mp.Vector3(0.0, 0.0, 0.0)), + ( + 0.5535093489972593, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + ), + ( + (0.5203183590840945, mp.Vector3(0.0, 0.5, 0.0)), + (0.7278447515454929, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + ( + 0.576335859651312, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + (0.7880878930618354, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.8161730293674944, mp.Vector3(0.0, 0.5, 0.0)), + (0.9209611432140968, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + ( + 0.8385562359606971, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + (0.9220849425898038, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (1.0168656683915511, mp.Vector3(0.0, 0.0, 0.0)), + ( + 1.1083536673418435, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + ), + ( + (1.0184507253059425, mp.Vector3(0.0, 0.0, 0.0)), + ( + 1.159370227370719, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + ), + ( + (1.1636719050364361, mp.Vector3(-0.2, 0.2, 0.0)), + (1.2433411839870618, mp.Vector3(0.0, 0.0, 0.0)), + ), ] ms.run_te() self.check_band_range_data(expected_te_brd, ms.band_range_data) def test_line_defect(self): - from mpb_line_defect import ms, k_points + from mpb_line_defect import k_points, ms + ms.deterministic = True ms.filename_prefix = self.filename_prefix ms.tolerance = 1e-12 - ms.run_tm(mpb.output_at_kpoint(k_points[len(k_points) // 2]), - mpb.fix_efield_phase, - mpb.output_efield_z) + ms.run_tm( + mpb.output_at_kpoint(k_points[len(k_points) // 2]), + mpb.fix_efield_phase, + mpb.output_efield_z, + ) - ref_fn = 'line-defect-e.k04.b12.z.tm.h5' + ref_fn = "line-defect-e.k04.b12.z.tm.h5" ref_path = os.path.join(self.data_dir, ref_fn) - res_path = re.sub('line-defect', self.filename_prefix, ref_fn) + res_path = re.sub("line-defect", self.filename_prefix, ref_fn) self.compare_h5_files(ref_path, res_path) def test_sq_rods(self): from mpb_sq_rods import ms + ms.deterministic = True ms.filename_prefix = self.filename_prefix ms.tolerance = 1e-12 @@ -830,22 +1077,44 @@ def test_sq_rods(self): ms.run_te() expected_te_brd = [ - ((0.0, mp.Vector3(0.0, 0.0, 0.0)), - (0.5036058015219026, mp.Vector3(0.5, 0.5, 0.0))), - ((0.4446229134706744, mp.Vector3(0.5, 0.0, 0.0)), - (0.5943440245519593, mp.Vector3(0.5, 0.5, 0.0))), - ((0.5943566394470321, mp.Vector3(0.5, 0.5, 0.0)), - (0.7808428121911926, mp.Vector3(0.0, 0.0, 0.0))), - ((0.6793887413076383, mp.Vector3(0.5, 0.5, 0.0)), - (0.8173893719542897, mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0))), - ((0.83045738223392, mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0)), - (0.9243716830585584, mp.Vector3(0.0, 0.0, 0.0))), - ((0.8957817684117546, mp.Vector3(0.5, 0.5, 0.0)), - (1.0331104139200438, mp.Vector3(0.5, 0.0, 0.0))), - ((0.8957868745330811, mp.Vector3(0.5, 0.5, 0.0)), - (1.0958021492221048, mp.Vector3(0.5, 0.0, 0.0))), - ((1.097416809585406, mp.Vector3(0.5, 0.0, 0.0)), - (1.1280127648119964, mp.Vector3(0.5, 0.5, 0.0))), + ( + (0.0, mp.Vector3(0.0, 0.0, 0.0)), + (0.5036058015219026, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (0.4446229134706744, mp.Vector3(0.5, 0.0, 0.0)), + (0.5943440245519593, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (0.5943566394470321, mp.Vector3(0.5, 0.5, 0.0)), + (0.7808428121911926, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.6793887413076383, mp.Vector3(0.5, 0.5, 0.0)), + ( + 0.8173893719542897, + mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0), + ), + ), + ( + ( + 0.83045738223392, + mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0), + ), + (0.9243716830585584, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.8957817684117546, mp.Vector3(0.5, 0.5, 0.0)), + (1.0331104139200438, mp.Vector3(0.5, 0.0, 0.0)), + ), + ( + (0.8957868745330811, mp.Vector3(0.5, 0.5, 0.0)), + (1.0958021492221048, mp.Vector3(0.5, 0.0, 0.0)), + ), + ( + (1.097416809585406, mp.Vector3(0.5, 0.0, 0.0)), + (1.1280127648119964, mp.Vector3(0.5, 0.5, 0.0)), + ), ] self.check_band_range_data(expected_te_brd, ms.band_range_data) @@ -853,28 +1122,48 @@ def test_sq_rods(self): ms.run_tm() expected_tm_brd = [ - ((0.0, mp.Vector3(0.0, 0.0, 0.0)), - (0.285905779119655, mp.Vector3(0.5, 0.5, 0.0))), - ((0.42065733839975095, mp.Vector3(0.5, 0.0, 0.0)), - (0.5503360754831277, mp.Vector3(0.0, 0.0, 0.0))), - ((0.5029830978365978, mp.Vector3(0.5, 0.5, 0.0)), - (0.5671632878128118, mp.Vector3(0.5, 0.0, 0.0))), - ((0.5613397939889757, mp.Vector3(0.0, 0.0, 0.0)), - (0.7200918204563993, mp.Vector3(0.5, 0.0, 0.0))), - ((0.7472029910480836, mp.Vector3(0.5, 0.0, 0.0)), - (0.874359380500508, mp.Vector3(0.5, 0.5, 0.0))), - ((0.8404509697526803, mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0)), - (0.8833173725822788, mp.Vector3(0.5, 0.5, 0.0))), - ((0.8770118718330763, mp.Vector3(0.5, 0.0, 0.0)), - (0.9653253808981632, mp.Vector3(0.0, 0.0, 0.0))), - ((0.8929933495598104, mp.Vector3(0.5, 0.5, 0.0)), - (1.089377682009333, mp.Vector3(0.0, 0.0, 0.0))), + ( + (0.0, mp.Vector3(0.0, 0.0, 0.0)), + (0.285905779119655, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (0.42065733839975095, mp.Vector3(0.5, 0.0, 0.0)), + (0.5503360754831277, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.5029830978365978, mp.Vector3(0.5, 0.5, 0.0)), + (0.5671632878128118, mp.Vector3(0.5, 0.0, 0.0)), + ), + ( + (0.5613397939889757, mp.Vector3(0.0, 0.0, 0.0)), + (0.7200918204563993, mp.Vector3(0.5, 0.0, 0.0)), + ), + ( + (0.7472029910480836, mp.Vector3(0.5, 0.0, 0.0)), + (0.874359380500508, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + ( + 0.8404509697526803, + mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0), + ), + (0.8833173725822788, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (0.8770118718330763, mp.Vector3(0.5, 0.0, 0.0)), + (0.9653253808981632, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.8929933495598104, mp.Vector3(0.5, 0.5, 0.0)), + (1.089377682009333, mp.Vector3(0.0, 0.0, 0.0)), + ), ] self.check_band_range_data(expected_tm_brd, ms.band_range_data) def test_strip(self): from mpb_strip import ms + ms.deterministic = True ms.filename_prefix = self.filename_prefix ms.tolerance = 1e-12 @@ -884,8 +1173,18 @@ def test_strip(self): y_parities = ms.mode_solver.compute_yparities() z_parities = ms.mode_solver.compute_zparities() - expected_y_parities = [-0.9997979443175137, 1.0000061871738222, -1.000010781704281, -0.9997880312884855] - expected_z_parities = [0.9992335747085693, -0.9955122771195629, -0.9970929846091117, -0.9945407488966614] + expected_y_parities = [ + -0.9997979443175137, + 1.0000061871738222, + -1.000010781704281, + -0.9997880312884855, + ] + expected_z_parities = [ + 0.9992335747085693, + -0.9955122771195629, + -0.9970929846091117, + -0.9945407488966614, + ] for e, r in zip(expected_y_parities, y_parities): self.assertAlmostEqual(e, r, places=3) @@ -895,28 +1194,40 @@ def test_strip(self): frequency = 1 / 1.55 - kvals = ms.find_k(mp.NO_PARITY, frequency, 1, ms.num_bands, mp.Vector3(1), 1e-3, - frequency * 3.45, frequency * 0.1, frequency * 4, mpb.output_poynting_x, - mpb.display_yparities, mpb.display_group_velocities) + kvals = ms.find_k( + mp.NO_PARITY, + frequency, + 1, + ms.num_bands, + mp.Vector3(1), + 1e-3, + frequency * 3.45, + frequency * 0.1, + frequency * 4, + mpb.output_poynting_x, + mpb.display_yparities, + mpb.display_group_velocities, + ) expected_kvals = [ 1.0395768316060294, 0.9776221778906993, 0.8358057689930384, - 0.788801145849691 + 0.788801145849691, ] for e, r in zip(expected_kvals, kvals): self.assertAlmostEqual(e, r, places=3) - ref_fn = 'strip-flux.v.k01.b04.x.h5' + ref_fn = "strip-flux.v.k01.b04.x.h5" ref_path = os.path.join(self.data_dir, ref_fn) - res_path = re.sub('strip', self.filename_prefix, ref_fn) + res_path = re.sub("strip", self.filename_prefix, ref_fn) self.compare_h5_files(ref_path, res_path) def test_tri_holes(self): from mpb_tri_holes import ms + ms.deterministic = True ms.filename_prefix = self.filename_prefix ms.tolerance = 1e-12 @@ -924,23 +1235,56 @@ def test_tri_holes(self): ms.run_te() expected_te_brd = [ - ((0.0, mp.Vector3(0.0, 0.0, 0.0)), - (0.2993049473117476, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))), - ((0.4924342823622065, mp.Vector3(0.0, 0.5, 0.0)), - (0.6568362683499375, mp.Vector3(0.0, 0.0, 0.0))), - ((0.5269710506448809, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)), - (0.7156232200212518, mp.Vector3(0.0, 0.0, 0.0))), - ((0.6568031427446027, mp.Vector3(0.0, 0.5, 0.0)), - (0.7578382217502109, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))), - ((0.7383774303752574, mp.Vector3(0.0, 0.0, 0.0)), - (0.7988168792802597, mp.Vector3(0.0, 0.5, 0.0))), - ((0.8259787164701536, mp.Vector3(0.0, 0.0, 0.0)), - (0.9629215441012396, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))), - ((0.8271634538840886, mp.Vector3(0.0, 0.0, 0.0)), - (0.9834563303529568, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))), - ((0.9984200611839882, mp.Vector3(-0.26666666666666666, 0.26666666666666666, 0.0)), - (1.0411551252079034, mp.Vector3(0.0, 0.0, 0.0))), - + ( + (0.0, mp.Vector3(0.0, 0.0, 0.0)), + ( + 0.2993049473117476, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + ), + ( + (0.4924342823622065, mp.Vector3(0.0, 0.5, 0.0)), + (0.6568362683499375, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + ( + 0.5269710506448809, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + (0.7156232200212518, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.6568031427446027, mp.Vector3(0.0, 0.5, 0.0)), + ( + 0.7578382217502109, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + ), + ( + (0.7383774303752574, mp.Vector3(0.0, 0.0, 0.0)), + (0.7988168792802597, mp.Vector3(0.0, 0.5, 0.0)), + ), + ( + (0.8259787164701536, mp.Vector3(0.0, 0.0, 0.0)), + ( + 0.9629215441012396, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + ), + ( + (0.8271634538840886, mp.Vector3(0.0, 0.0, 0.0)), + ( + 0.9834563303529568, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + ), + ( + ( + 0.9984200611839882, + mp.Vector3(-0.26666666666666666, 0.26666666666666666, 0.0), + ), + (1.0411551252079034, mp.Vector3(0.0, 0.0, 0.0)), + ), ] self.check_band_range_data(expected_te_brd, ms.band_range_data) @@ -948,82 +1292,161 @@ def test_tri_holes(self): ms.run_tm() expected_tm_brd = [ - ((0.0, mp.Vector3(0.0, 0.0, 0.0)), - (0.28009156817399916, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))), - ((0.28015523913784407, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)), - (0.3985126081046686, mp.Vector3(0.0, 0.0, 0.0))), - ((0.4390817228448606, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)), - (0.49288810189980625, mp.Vector3(0.0, 0.0, 0.0))), - ((0.49336847788268695, mp.Vector3(0.0, 0.0, 0.0)), - (0.5808701365268192, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))), - ((0.581035246804371, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)), - (0.6824860801372987, mp.Vector3(0.0, 0.0, 0.0))), - ((0.682531744671499, mp.Vector3(0.0, 0.0, 0.0)), - (0.7011061593213783, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))), - ((0.6920145742134771, mp.Vector3(0.0, 0.0, 0.0)), - (0.7841042622393081, mp.Vector3(0.0, 0.4, 0.0))), - ((0.7980077872594108, mp.Vector3(0.0, 0.4, 0.0)), - (0.8982239424823442, mp.Vector3(0.0, 0.0, 0.0))), - + ( + (0.0, mp.Vector3(0.0, 0.0, 0.0)), + ( + 0.28009156817399916, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + ), + ( + ( + 0.28015523913784407, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + (0.3985126081046686, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + ( + 0.4390817228448606, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + (0.49288810189980625, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.49336847788268695, mp.Vector3(0.0, 0.0, 0.0)), + ( + 0.5808701365268192, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + ), + ( + ( + 0.581035246804371, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + (0.6824860801372987, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.682531744671499, mp.Vector3(0.0, 0.0, 0.0)), + ( + 0.7011061593213783, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + ), + ( + (0.6920145742134771, mp.Vector3(0.0, 0.0, 0.0)), + (0.7841042622393081, mp.Vector3(0.0, 0.4, 0.0)), + ), + ( + (0.7980077872594108, mp.Vector3(0.0, 0.4, 0.0)), + (0.8982239424823442, mp.Vector3(0.0, 0.0, 0.0)), + ), ] self.check_band_range_data(expected_tm_brd, ms.band_range_data) def test_tri_rods(self): from mpb_tri_rods import ms + ms.deterministic = True ms.tolerance = 1e-12 ms.filename_prefix = self.filename_prefix - ms.run_tm(mpb.output_at_kpoint(mp.Vector3(1 / -3, 1 / 3), - mpb.fix_efield_phase, - mpb.output_efield_z)) + ms.run_tm( + mpb.output_at_kpoint( + mp.Vector3(1 / -3, 1 / 3), mpb.fix_efield_phase, mpb.output_efield_z + ) + ) - ref_fn = 'tri-rods-e.k11.b08.z.tm.h5' + ref_fn = "tri-rods-e.k11.b08.z.tm.h5" ref_path = os.path.join(self.data_dir, ref_fn) - res_path = re.sub('tri-rods', self.filename_prefix, ref_fn) + res_path = re.sub("tri-rods", self.filename_prefix, ref_fn) self.compare_h5_files(ref_path, res_path) # Test MPBData - with h5py.File(ref_path, 'r') as f: - efield_re = f['z.r'][()] - efield_im = f['z.i'][()] + with h5py.File(ref_path, "r") as f: + efield_re = f["z.r"][()] + efield_im = f["z.i"][()] efield = np.vectorize(complex)(efield_re, efield_im) # rectangularize - md = mpb.MPBData(lattice=ms.get_lattice(), rectify=True, resolution=32, periods=3, verbose=True) + md = mpb.MPBData( + lattice=ms.get_lattice(), + rectify=True, + resolution=32, + periods=3, + verbose=True, + ) new_efield = md.convert(efield, ms.k_points[10]) # check with ref file - ref_fn = 'tri-rods-e.k11.b08.z.tm-r-m3-n32.h5' + ref_fn = "tri-rods-e.k11.b08.z.tm-r-m3-n32.h5" ref_path = os.path.join(self.data_dir, ref_fn) - with h5py.File(ref_path, 'r') as f: - expected_re = f['z.r-new'][()] - expected_im = f['z.i-new'][()] + with h5py.File(ref_path, "r") as f: + expected_re = f["z.r-new"][()] + expected_im = f["z.i-new"][()] expected = np.vectorize(complex)(expected_re, expected_im) compare_arrays(self, expected, new_efield) ms.run_te() expected_brd = [ - ((0.0, mp.Vector3(0.0, 0.0, 0.0)), - (0.49123581186757737, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))), - ((0.4730722390280754, mp.Vector3(0.0, 0.5, 0.0)), - (0.5631059378714038, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))), - ((0.5631505198559038, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)), - (0.7939289395839766, mp.Vector3(0.0, 0.0, 0.0))), - ((0.7676614799039024, mp.Vector3(0.0, 0.5, 0.0)), - (0.8214230044191525, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))), - ((0.865194814441525, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)), - (1.0334130018594276, mp.Vector3(0.0, 0.0, 0.0))), - ((0.8652307994936862, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)), - (1.0334230910419813, mp.Vector3(0.0, 0.0, 0.0))), - ((1.021367669109368, mp.Vector3(0.0, 0.5, 0.0)), - (1.115966990757518, mp.Vector3(0.0, 0.0, 0.0))), - ((1.108662658537423, mp.Vector3(-0.26666666666666666, 0.26666666666666666, 0.0)), - (1.1168107191255379, mp.Vector3(0.0, 0.0, 0.0))), + ( + (0.0, mp.Vector3(0.0, 0.0, 0.0)), + ( + 0.49123581186757737, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + ), + ( + (0.4730722390280754, mp.Vector3(0.0, 0.5, 0.0)), + ( + 0.5631059378714038, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + ), + ( + ( + 0.5631505198559038, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + (0.7939289395839766, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.7676614799039024, mp.Vector3(0.0, 0.5, 0.0)), + ( + 0.8214230044191525, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + ), + ( + ( + 0.865194814441525, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + (1.0334130018594276, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + ( + 0.8652307994936862, + mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0), + ), + (1.0334230910419813, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (1.021367669109368, mp.Vector3(0.0, 0.5, 0.0)), + (1.115966990757518, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + ( + 1.108662658537423, + mp.Vector3(-0.26666666666666666, 0.26666666666666666, 0.0), + ), + (1.1168107191255379, mp.Vector3(0.0, 0.0, 0.0)), + ), ] self.check_band_range_data(expected_brd, ms.band_range_data) @@ -1032,11 +1455,11 @@ def test_tri_rods(self): eps = ms.get_epsilon() md = mpb.MPBData(rectify=True, resolution=32, periods=3, verbose=True) new_eps = md.convert(eps) - ref_fn = 'tri-rods-epsilon-r-m3-n32.h5' + ref_fn = "tri-rods-epsilon-r-m3-n32.h5" ref_path = os.path.join(self.data_dir, ref_fn) - with h5py.File(ref_path, 'r') as f: - ref = f['data-new'][()] + with h5py.File(ref_path, "r") as f: + ref = f["data-new"][()] compare_arrays(self, ref, new_eps, tol=1e-3) def test_subpixel_averaging(self): @@ -1045,33 +1468,52 @@ def test_subpixel_averaging(self): ms.output_epsilon() expected_brd = [ - ((0.0, mp.Vector3(0.0, 0.0, 0.0)), - (0.49683586474489877, mp.Vector3(0.5, 0.5, 0.0))), - ((0.4415884497225449, mp.Vector3(0.5, 0.0, 0.0)), - (0.5931405141160885, mp.Vector3(0.5, 0.5, 0.0))), - ((0.5931535863117832, mp.Vector3(0.5, 0.5, 0.0)), - (0.7732265593069759, mp.Vector3(0.0, 0.0, 0.0))), - ((0.6791690130757013, mp.Vector3(0.5, 0.5, 0.0)), - (0.80968915516771, mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0))), - ((0.8241814443502151, mp.Vector3(0.5, 0.30000000000000004, 0.0)), - (0.9229965195855876, mp.Vector3(0.0, 0.0, 0.0))), - ((0.8819770916660669, mp.Vector3(0.5, 0.5, 0.0)), - (1.0291597050650205, mp.Vector3(0.5, 0.0, 0.0))), - ((0.8819818134421844, mp.Vector3(0.5, 0.5, 0.0)), - (1.086072932359415, mp.Vector3(0.5, 0.0, 0.0))), - ((1.0878689635052692, mp.Vector3(0.5, 0.0, 0.0)), - (1.1119173707556929, mp.Vector3(0.5, 0.5, 0.0))), + ( + (0.0, mp.Vector3(0.0, 0.0, 0.0)), + (0.49683586474489877, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (0.4415884497225449, mp.Vector3(0.5, 0.0, 0.0)), + (0.5931405141160885, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (0.5931535863117832, mp.Vector3(0.5, 0.5, 0.0)), + (0.7732265593069759, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.6791690130757013, mp.Vector3(0.5, 0.5, 0.0)), + ( + 0.80968915516771, + mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0), + ), + ), + ( + (0.8241814443502151, mp.Vector3(0.5, 0.30000000000000004, 0.0)), + (0.9229965195855876, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.8819770916660669, mp.Vector3(0.5, 0.5, 0.0)), + (1.0291597050650205, mp.Vector3(0.5, 0.0, 0.0)), + ), + ( + (0.8819818134421844, mp.Vector3(0.5, 0.5, 0.0)), + (1.086072932359415, mp.Vector3(0.5, 0.0, 0.0)), + ), + ( + (1.0878689635052692, mp.Vector3(0.5, 0.0, 0.0)), + (1.1119173707556929, mp.Vector3(0.5, 0.5, 0.0)), + ), ] expected_gap_list = [ (0.0022038709776893727, 0.5931405141160885, 0.5931535863117832), (1.7739824912427062, 0.80968915516771, 0.8241814443502151), - (0.1652326724344101, 1.086072932359415, 1.0878689635052692) + (0.1652326724344101, 1.086072932359415, 1.0878689635052692), ] - ref_fn = 'subpixel_avg-epsilon.h5' + ref_fn = "subpixel_avg-epsilon.h5" ref_path = os.path.join(self.data_dir, ref_fn) - res_path = re.sub('subpixel_avg', self.filename_prefix, ref_fn) + res_path = re.sub("subpixel_avg", self.filename_prefix, ref_fn) self.compare_h5_files(ref_path, res_path) self.check_band_range_data(expected_brd, ms.band_range_data) @@ -1082,36 +1524,55 @@ def test_run_te_with_mu_material(self): ms.geometry = [mp.Cylinder(0.2, material=mp.Medium(mu=5))] expected_brd = [ - ((0.0, mp.Vector3(0.0, 0.0, 0.0)), - (0.4165291233037574, mp.Vector3(0.5, 0.5, 0.0))), - ((0.47328232348733695, mp.Vector3(0.5, 0.0, 0.0)), - (0.6699867281290507, mp.Vector3(0.0, 0.0, 0.0))), - ((0.6301802646818523, mp.Vector3(0.5, 0.5, 0.0)), - (0.8037365323032135, mp.Vector3(0.5, 0.0, 0.0))), - ((0.7017932556977557, mp.Vector3(0.5, 0.5, 0.0)), - (0.8863448167711359, mp.Vector3(0.5, 0.10000000000000003, 0.0))), - ((0.9047498485809726, mp.Vector3(0.5, 0.10000000000000003, 0.0)), - (1.0557468193007016, mp.Vector3(0.5, 0.5, 0.0))), - ((1.0077925606103986, mp.Vector3(0.2, 0.2, 0.0)), - (1.1815403744341757, mp.Vector3(0.0, 0.0, 0.0))), - ((1.122424251973878, mp.Vector3(0.20000000000000004, 0.0, 0.0)), - (1.2351567679231688, mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0))), - ((1.2059728636717586, mp.Vector3(0.0, 0.0, 0.0)), - (1.3135062523646421, mp.Vector3(0.30000000000000004, 0.0, 0.0))), + ( + (0.0, mp.Vector3(0.0, 0.0, 0.0)), + (0.4165291233037574, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (0.47328232348733695, mp.Vector3(0.5, 0.0, 0.0)), + (0.6699867281290507, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.6301802646818523, mp.Vector3(0.5, 0.5, 0.0)), + (0.8037365323032135, mp.Vector3(0.5, 0.0, 0.0)), + ), + ( + (0.7017932556977557, mp.Vector3(0.5, 0.5, 0.0)), + (0.8863448167711359, mp.Vector3(0.5, 0.10000000000000003, 0.0)), + ), + ( + (0.9047498485809726, mp.Vector3(0.5, 0.10000000000000003, 0.0)), + (1.0557468193007016, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (1.0077925606103986, mp.Vector3(0.2, 0.2, 0.0)), + (1.1815403744341757, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (1.122424251973878, mp.Vector3(0.20000000000000004, 0.0, 0.0)), + ( + 1.2351567679231688, + mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0), + ), + ), + ( + (1.2059728636717586, mp.Vector3(0.0, 0.0, 0.0)), + (1.3135062523646421, mp.Vector3(0.30000000000000004, 0.0, 0.0)), + ), ] ms.run_te() ms.output_mu() self.check_band_range_data(expected_brd, ms.band_range_data) - fname = 'tutorial-mu.h5' + fname = "tutorial-mu.h5" data_path = os.path.join(self.data_dir, fname) - res_path = re.sub('tutorial', self.filename_prefix, fname) + res_path = re.sub("tutorial", self.filename_prefix, fname) self.compare_h5_files(data_path, res_path) mu = ms.get_mu() - with h5py.File(data_path, 'r') as f: - data = f['data'][()] + with h5py.File(data_path, "r") as f: + data = f["data"][()] compare_arrays(self, data, mu) def test_output_tot_pwr(self): @@ -1119,16 +1580,16 @@ def test_output_tot_pwr(self): ms.run_te() mpb.output_tot_pwr(ms, 8) - ref_fname = 'tutorial-tot.rpwr.k16.b08.te.h5' + ref_fname = "tutorial-tot.rpwr.k16.b08.te.h5" ref_path = os.path.join(self.data_dir, ref_fname) - res_path = re.sub('tutorial', self.filename_prefix, ref_fname) + res_path = re.sub("tutorial", self.filename_prefix, ref_fname) self.compare_h5_files(ref_path, res_path) # Test get_tot_pwr arr = ms.get_tot_pwr(8) - with h5py.File(ref_path, 'r') as f: - expected = f['data'][()] + with h5py.File(ref_path, "r") as f: + expected = f["data"][()] compare_arrays(self, expected, arr) @@ -1137,19 +1598,19 @@ def test_get_eigenvectors(self): ms.run_te(mpb.fix_hfield_phase) def compare_eigenvectors(ref_fn, start, cols): - with h5py.File(os.path.join(self.data_dir, ref_fn), 'r') as f: - expected = f['rawdata'][()] + with h5py.File(os.path.join(self.data_dir, ref_fn), "r") as f: + expected = f["rawdata"][()] # Reshape the last dimension of 2 reals into one complex expected = np.vectorize(complex)(expected[..., 0], expected[..., 1]) ev = ms.get_eigenvectors(start, cols) np.testing.assert_allclose(expected, ev, rtol=1e-3) # Get all columns - compare_eigenvectors('tutorial-te-eigenvectors.h5', 1, 8) + compare_eigenvectors("tutorial-te-eigenvectors.h5", 1, 8) # Get last column - compare_eigenvectors('tutorial-te-eigenvectors-8-1.h5', 8, 1) + compare_eigenvectors("tutorial-te-eigenvectors-8-1.h5", 8, 1) # Get columns 3,4, and 5 - compare_eigenvectors('tutorial-te-eigenvectors-3-3.h5', 3, 3) + compare_eigenvectors("tutorial-te-eigenvectors-3-3.h5", 3, 3) def test_set_eigenvectors(self): ms = self.init_solver() @@ -1172,7 +1633,7 @@ def set_H_to_zero_and_check(start, num_bands): def test_load_and_save_eigenvectors(self): ms = self.init_solver() ms.run_te() - fn = self.filename_prefix + '.h5' + fn = self.filename_prefix + ".h5" ev = ms.get_eigenvectors(8, 1) zeros = np.zeros(ev.shape, dtype=np.complex128) @@ -1186,6 +1647,7 @@ def test_load_and_save_eigenvectors(self): def test_handle_cvector(self): from mpb_tri_rods import ms + ms.deterministic = True ms.tolerance = 1e-12 ms.filename_prefix = self.filename_prefix @@ -1200,22 +1662,30 @@ def get_efields(ms, band): md = mpb.MPBData(rectify=True, periods=3, resolution=32, verbose=True) result = md.convert(efields[-1]) - ref_fn = 'converted-tri-rods-e.k11.b08.tm.h5' + ref_fn = "converted-tri-rods-e.k11.b08.tm.h5" ref_path = os.path.join(self.data_dir, ref_fn) - self.check_fields_against_h5(ref_path, result.ravel(), suffix='-new') + self.check_fields_against_h5(ref_path, result.ravel(), suffix="-new") def test_epsilon_input_file(self): ms = self.init_solver(geom=False) - eps_fn = 'eps_input_file_test.h5' + eps_fn = "eps_input_file_test.h5" ms.epsilon_input_file = os.path.join(self.data_dir, eps_fn) ms.run_te() - expected_freqs = np.array([ - 0.0, 0.5543986136451342, 0.7613327775255415, 0.7613339178956054, - 0.8940893915924257, 0.998342969572652, 0.9983441882455961, 1.0747466061007138 - ]) + expected_freqs = np.array( + [ + 0.0, + 0.5543986136451342, + 0.7613327775255415, + 0.7613339178956054, + 0.8940893915924257, + 0.998342969572652, + 0.9983441882455961, + 1.0747466061007138, + ] + ) expected_gap_list = [ (3.848610367089048e-5, 0.5781812856814899, 0.5781815082009817), @@ -1224,22 +1694,47 @@ def test_epsilon_input_file(self): ] expected_brd = [ - ((0.0, mp.Vector3(0.0, 0.0, 0.0)), - (0.4970977843772992, mp.Vector3(0.5, 0.5, 0.0))), - ((0.4402896410505961, mp.Vector3(0.5, 0.0, 0.0)), - (0.5781812856814899, mp.Vector3(0.5, 0.5, 0.0))), - ((0.5781815082009817, mp.Vector3(0.5, 0.5, 0.0)), - (0.761332777525562, mp.Vector3(0.0, 0.0, 0.0))), - ((0.6689126424359774, mp.Vector3(0.5, 0.5, 0.0)), - (0.8051999839699242, mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0))), - ((0.8170847453549156, mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0)), - (0.8940893915924548, mp.Vector3(0.0, 0.0, 0.0))), - ((0.8826671164993868, mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0)), - (1.0014926328155058, mp.Vector3(0.5, 0.0, 0.0))), - ((0.8832199143682116, mp.Vector3(0.5, 0.5, 0.0)), - (1.0580309832489785, mp.Vector3(0.5, 0.0, 0.0))), - ((1.0660233597945266, mp.Vector3(0.2, 0.2, 0.0)), - (1.087345829555555, mp.Vector3(0.5, 0.5, 0.0))), + ( + (0.0, mp.Vector3(0.0, 0.0, 0.0)), + (0.4970977843772992, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (0.4402896410505961, mp.Vector3(0.5, 0.0, 0.0)), + (0.5781812856814899, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (0.5781815082009817, mp.Vector3(0.5, 0.5, 0.0)), + (0.761332777525562, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (0.6689126424359774, mp.Vector3(0.5, 0.5, 0.0)), + ( + 0.8051999839699242, + mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0), + ), + ), + ( + ( + 0.8170847453549156, + mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0), + ), + (0.8940893915924548, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + ( + 0.8826671164993868, + mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0), + ), + (1.0014926328155058, mp.Vector3(0.5, 0.0, 0.0)), + ), + ( + (0.8832199143682116, mp.Vector3(0.5, 0.5, 0.0)), + (1.0580309832489785, mp.Vector3(0.5, 0.0, 0.0)), + ), + ( + (1.0660233597945266, mp.Vector3(0.2, 0.2, 0.0)), + (1.087345829555555, mp.Vector3(0.5, 0.5, 0.0)), + ), ] self.check_band_range_data(expected_brd, ms.band_range_data) @@ -1254,78 +1749,265 @@ def test_hermitian_eps(self): ms = self.init_solver() ms.num_bands = 10 ms.geometry_lattice = mp.Lattice(size=mp.Vector3(1, 1)) - ms.k_points = mp.interpolate(2, [mp.Vector3(), mp.Vector3(0.5), - mp.Vector3(0.5, 0.5), mp.Vector3()]) + ms.k_points = mp.interpolate( + 2, [mp.Vector3(), mp.Vector3(0.5), mp.Vector3(0.5, 0.5), mp.Vector3()] + ) if mpb.with_hermitian_epsilon(): mu_offdiag = mp.Vector3(0 + 12.4j, 0j, 0j) else: mu_offdiag = mp.Vector3(1.1 + 0j, 0j, 0j) - mat = mp.Medium(epsilon=15, mu_diag=mp.Vector3(14, 14, 1), mu_offdiag=mu_offdiag) + mat = mp.Medium( + epsilon=15, mu_diag=mp.Vector3(14, 14, 1), mu_offdiag=mu_offdiag + ) ms.geometry = [mp.Cylinder(0.11, material=mat)] ms.run_tm() expected_freqs_with_herm_eps = [ - (0.0, 0.4632939699892961, 0.5786056046494645, 0.6510415824942094, 0.895078332795855, - 0.9065629078750282, 0.9718615669186841, 1.0031527446201098, 1.0142458802909737, 1.0248230445372033), - (0.12937769848279101, 0.4619527556321284, 0.5815596420443466, 0.6509684019890601, - 0.8515085512592131, 0.8991327667388375, 0.9483381392427291, 0.9868373331614826, - 1.0201294704318276, 1.1113539456722876), - (0.240618523732184, 0.45558173972666255, 0.5943681967388351, 0.650900939169996, - 0.7483572681471874, 0.9008690943027022, 0.9516677787271349, 0.9850364677965752, - 1.0516821906747753, 1.1214943845916658), - (0.2922690373273036, 0.4479821144386504, 0.613801526149148, 0.6509434790185421, - 0.6876982556529582, 0.9015193133195613, 0.9570671227792547, 0.9847711283698155, - 1.0828576982954996, 1.1106109238677777), - (0.30027099141005154, 0.46956697245972573, 0.5973756776701357, 0.6743055424064167, - 0.6920274562199666, 0.8979504826615435, 0.9268408824618528, 0.9691495966240021, - 0.9983260085044127, 1.1065083471050117), - (0.31666208802132145, 0.5137036663942733, 0.5882926042080675, 0.6899229118026092, - 0.730249913793744, 0.8458381750994521, 0.8595877992328249, 0.9137388415537298, - 0.9866008233455089, 1.137383764975547), - (0.3251247277636798, 0.5292011796591106, 0.6018330031246529, 0.7028040151334913, - 0.7794097325510528, 0.7819161956650196, 0.8016335408886606, 0.910192351683647, - 0.98598162196522, 1.1535093885340242), - (0.29904860785910004, 0.49821749875617755, 0.5818628214691952, 0.6702162529015839, - 0.792305404698029, 0.8010082951265327, 0.9011331789530838, 0.9347832593312477, - 0.9878915728570912, 1.1274287845362319), - (0.17916974535365005, 0.46423758343427207, 0.5818626159151191, 0.6522567432851836, - 0.8578543711269236, 0.8654932847250656, 0.914866301019591, 0.9836433091978996, - 1.0332068416637614, 1.1280615056475125), - (0.0, 0.46329396998948535, 0.5786056046501502, 0.6510415824943165, 0.8950783327952294, - 0.9065629078748172, 0.9718615669185836, 1.0031527446209287, 1.01424588029229, 1.0248230445379556) + ( + 0.0, + 0.4632939699892961, + 0.5786056046494645, + 0.6510415824942094, + 0.895078332795855, + 0.9065629078750282, + 0.9718615669186841, + 1.0031527446201098, + 1.0142458802909737, + 1.0248230445372033, + ), + ( + 0.12937769848279101, + 0.4619527556321284, + 0.5815596420443466, + 0.6509684019890601, + 0.8515085512592131, + 0.8991327667388375, + 0.9483381392427291, + 0.9868373331614826, + 1.0201294704318276, + 1.1113539456722876, + ), + ( + 0.240618523732184, + 0.45558173972666255, + 0.5943681967388351, + 0.650900939169996, + 0.7483572681471874, + 0.9008690943027022, + 0.9516677787271349, + 0.9850364677965752, + 1.0516821906747753, + 1.1214943845916658, + ), + ( + 0.2922690373273036, + 0.4479821144386504, + 0.613801526149148, + 0.6509434790185421, + 0.6876982556529582, + 0.9015193133195613, + 0.9570671227792547, + 0.9847711283698155, + 1.0828576982954996, + 1.1106109238677777, + ), + ( + 0.30027099141005154, + 0.46956697245972573, + 0.5973756776701357, + 0.6743055424064167, + 0.6920274562199666, + 0.8979504826615435, + 0.9268408824618528, + 0.9691495966240021, + 0.9983260085044127, + 1.1065083471050117, + ), + ( + 0.31666208802132145, + 0.5137036663942733, + 0.5882926042080675, + 0.6899229118026092, + 0.730249913793744, + 0.8458381750994521, + 0.8595877992328249, + 0.9137388415537298, + 0.9866008233455089, + 1.137383764975547, + ), + ( + 0.3251247277636798, + 0.5292011796591106, + 0.6018330031246529, + 0.7028040151334913, + 0.7794097325510528, + 0.7819161956650196, + 0.8016335408886606, + 0.910192351683647, + 0.98598162196522, + 1.1535093885340242, + ), + ( + 0.29904860785910004, + 0.49821749875617755, + 0.5818628214691952, + 0.6702162529015839, + 0.792305404698029, + 0.8010082951265327, + 0.9011331789530838, + 0.9347832593312477, + 0.9878915728570912, + 1.1274287845362319, + ), + ( + 0.17916974535365005, + 0.46423758343427207, + 0.5818626159151191, + 0.6522567432851836, + 0.8578543711269236, + 0.8654932847250656, + 0.914866301019591, + 0.9836433091978996, + 1.0332068416637614, + 1.1280615056475125, + ), + ( + 0.0, + 0.46329396998948535, + 0.5786056046501502, + 0.6510415824943165, + 0.8950783327952294, + 0.9065629078748172, + 0.9718615669185836, + 1.0031527446209287, + 1.01424588029229, + 1.0248230445379556, + ), ] expected_freqs = [ - (0.0, 0.2658849785488965, 0.35685238626885807, 0.3689901366690736, 0.5038968919475888, - 0.5065518587501845, 0.5399110558762593, 0.6356807845993113, 0.6458520209139631, 0.6600163331973673), - (0.1233059084828522, 0.2782923927646106, 0.3573659215347579, 0.36946091907607376, - 0.5037974922871195, 0.5066416041828202, 0.538216765672376, 0.6355701950896693, 0.6455953849366743, - 0.6594309541221774), - (0.1946550854369502, 0.3314575373594674, 0.3616788807546181, 0.3779471264000764, - 0.5026931348465893, 0.5067552606455699, 0.5272272884443048, 0.6333347872001693, - 0.6442148265479308, 0.6532866817588999), - (0.20879926720698877, 0.34897792345617423, 0.3652783351764913, 0.443855894582484, - 0.47790148240242897, 0.506844624322928, 0.5090758743980286, 0.6175265666609957, - 0.6397097609325341, 0.6468898906944409), - (0.21067290783587236, 0.35110317640925215, 0.3649145592788066, 0.4533551114677223, - 0.5005024186371949, 0.507017761099229, 0.5101250893240828, 0.6168213478492276, - 0.6424780509991848, 0.6468935605826212), - (0.214080585764866, 0.353216867533926, 0.3650014330955567, 0.47197667085082984, - 0.5071647195850403, 0.5107899381039265, 0.563894415993932, 0.6150518764874886, - 0.6461781982138443, 0.6483568369087811), - (0.21564852631365375, 0.3536024256611885, 0.3652692866946287, 0.4807484678430083, - 0.5073352894281589, 0.5125343692391049, 0.6079200818245155, 0.6197842747116765, - 0.648907835949042, 0.6503229392874306), - (0.21087876573006833, 0.35463024054783404, 0.3612449317676656, 0.43948603208371123, - 0.5070218413172007, 0.508251630347181, 0.5438146806988851, 0.6205991881007313, - 0.6465891122723096, 0.6511544851425487), - (0.16235265342991828, 0.2958744870280601, 0.3562142355919711, 0.37216060317897104, - 0.5042580244528116, 0.5067350381508423, 0.5373546859406302, 0.6332312603115383, - 0.6459156623195174, 0.6571698237808499), - (0.0, 0.2658849786929068, 0.3568523862640937, 0.36899013667229497, 0.5038968919421172, - 0.506551858753244, 0.5399110559018708, 0.6356807846017583, 0.6458520213315968, 0.6600163321775416), + ( + 0.0, + 0.2658849785488965, + 0.35685238626885807, + 0.3689901366690736, + 0.5038968919475888, + 0.5065518587501845, + 0.5399110558762593, + 0.6356807845993113, + 0.6458520209139631, + 0.6600163331973673, + ), + ( + 0.1233059084828522, + 0.2782923927646106, + 0.3573659215347579, + 0.36946091907607376, + 0.5037974922871195, + 0.5066416041828202, + 0.538216765672376, + 0.6355701950896693, + 0.6455953849366743, + 0.6594309541221774, + ), + ( + 0.1946550854369502, + 0.3314575373594674, + 0.3616788807546181, + 0.3779471264000764, + 0.5026931348465893, + 0.5067552606455699, + 0.5272272884443048, + 0.6333347872001693, + 0.6442148265479308, + 0.6532866817588999, + ), + ( + 0.20879926720698877, + 0.34897792345617423, + 0.3652783351764913, + 0.443855894582484, + 0.47790148240242897, + 0.506844624322928, + 0.5090758743980286, + 0.6175265666609957, + 0.6397097609325341, + 0.6468898906944409, + ), + ( + 0.21067290783587236, + 0.35110317640925215, + 0.3649145592788066, + 0.4533551114677223, + 0.5005024186371949, + 0.507017761099229, + 0.5101250893240828, + 0.6168213478492276, + 0.6424780509991848, + 0.6468935605826212, + ), + ( + 0.214080585764866, + 0.353216867533926, + 0.3650014330955567, + 0.47197667085082984, + 0.5071647195850403, + 0.5107899381039265, + 0.563894415993932, + 0.6150518764874886, + 0.6461781982138443, + 0.6483568369087811, + ), + ( + 0.21564852631365375, + 0.3536024256611885, + 0.3652692866946287, + 0.4807484678430083, + 0.5073352894281589, + 0.5125343692391049, + 0.6079200818245155, + 0.6197842747116765, + 0.648907835949042, + 0.6503229392874306, + ), + ( + 0.21087876573006833, + 0.35463024054783404, + 0.3612449317676656, + 0.43948603208371123, + 0.5070218413172007, + 0.508251630347181, + 0.5438146806988851, + 0.6205991881007313, + 0.6465891122723096, + 0.6511544851425487, + ), + ( + 0.16235265342991828, + 0.2958744870280601, + 0.3562142355919711, + 0.37216060317897104, + 0.5042580244528116, + 0.5067350381508423, + 0.5373546859406302, + 0.6332312603115383, + 0.6459156623195174, + 0.6571698237808499, + ), + ( + 0.0, + 0.2658849786929068, + 0.3568523862640937, + 0.36899013667229497, + 0.5038968919421172, + 0.506551858753244, + 0.5399110559018708, + 0.6356807846017583, + 0.6458520213315968, + 0.6600163321775416, + ), ] if mpb.with_hermitian_epsilon(): @@ -1354,7 +2036,9 @@ def f2(F, eps, r): ms.get_efield(8) field_integral = ms.compute_field_integral(f2) - self.assertAlmostEqual(field_integral, 02.0735366548785272e-18 - 3.0259168624899837e-6j) + self.assertAlmostEqual( + field_integral, 02.0735366548785272e-18 - 3.0259168624899837e-6j + ) def test_multiply_bloch_phase(self): ms = self.init_solver() @@ -1364,7 +2048,7 @@ def test_multiply_bloch_phase(self): efield = ms.get_efield(8, False) bloch_efield = ms.multiply_bloch_phase(efield) - ref_fn = 'tutorial-e.k16.b08.te.h5' + ref_fn = "tutorial-e.k16.b08.te.h5" ref_path = os.path.join(self.data_dir, ref_fn) self.check_fields_against_h5(ref_path, bloch_efield) @@ -1394,9 +2078,9 @@ def test_poynting(self): ms.run_te(mpb.output_at_kpoint(mp.Vector3(0.5, 0.5), mpb.output_poynting)) - ref_fn = 'tutorial-flux.v.k11.b08.te.h5' + ref_fn = "tutorial-flux.v.k11.b08.te.h5" ref_path = os.path.join(self.data_dir, ref_fn) - res_path = re.sub('tutorial', self.filename_prefix, ref_fn) + res_path = re.sub("tutorial", self.filename_prefix, ref_fn) self.compare_h5_files(ref_path, res_path) @@ -1407,14 +2091,38 @@ def test_fractional_lattice(self): ms.run_te() expected_brd = [ - ((0.0, mp.Vector3(0.0, 0.0, 0.0)), (2.041241452319313, mp.Vector3(0.5, 0.5, 0.0))), - ((1.4433756729740665, mp.Vector3(0.5, 0.0, 0.0)), (2.886751345948131, mp.Vector3(0.0, 0.0, 0.0))), - ((2.041241452319316, mp.Vector3(0.5, 0.5, 0.0)), (3.2274861218395094, mp.Vector3(0.5, 0.0, 0.0))), - ((2.0412414523193187, mp.Vector3(0.5, 0.5, 0.0)), (3.2659863237109055, mp.Vector3(0.2, 0.2, 0.0))), - ((2.88675134594813, mp.Vector3(0.0, 0.0, 0.0)), (4.564354645876381, mp.Vector3(0.5, 0.5, 0.0))), - ((3.227486121839514, mp.Vector3(0.5, 0.0, 0.0)), (4.564354645876382, mp.Vector3(0.5, 0.5, 0.0))), - ((3.6968455021364752, mp.Vector3(0.20000000000000004, 0.0, 0.0)), (4.564354645876384, mp.Vector3(0.5, 0.5, 0.0))), - ((4.0824829046386295, mp.Vector3(0.0, 0.0, 0.0)), (5.204164998665332, mp.Vector3(0.5, 0.0, 0.0))), + ( + (0.0, mp.Vector3(0.0, 0.0, 0.0)), + (2.041241452319313, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (1.4433756729740665, mp.Vector3(0.5, 0.0, 0.0)), + (2.886751345948131, mp.Vector3(0.0, 0.0, 0.0)), + ), + ( + (2.041241452319316, mp.Vector3(0.5, 0.5, 0.0)), + (3.2274861218395094, mp.Vector3(0.5, 0.0, 0.0)), + ), + ( + (2.0412414523193187, mp.Vector3(0.5, 0.5, 0.0)), + (3.2659863237109055, mp.Vector3(0.2, 0.2, 0.0)), + ), + ( + (2.88675134594813, mp.Vector3(0.0, 0.0, 0.0)), + (4.564354645876381, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (3.227486121839514, mp.Vector3(0.5, 0.0, 0.0)), + (4.564354645876382, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (3.6968455021364752, mp.Vector3(0.20000000000000004, 0.0, 0.0)), + (4.564354645876384, mp.Vector3(0.5, 0.5, 0.0)), + ), + ( + (4.0824829046386295, mp.Vector3(0.0, 0.0, 0.0)), + (5.204164998665332, mp.Vector3(0.5, 0.0, 0.0)), + ), ] self.check_band_range_data(expected_brd, ms.band_range_data) @@ -1422,59 +2130,64 @@ def test_fractional_lattice(self): def test_symmetry_overlap(self): ms = mpb.ModeSolver( num_bands=6, - k_points = [mp.Vector3(0.5, 0.5, 0.5),], - geometry = [mp.Sphere(0.25, material=mp.Medium(epsilon=13))], - geometry_lattice = mp.Lattice(size=mp.Vector3(1, 1, 1)), - resolution = 32, - filename_prefix = self.filename_prefix, - deterministic = True, - tolerance = 1e-12 + k_points=[ + mp.Vector3(0.5, 0.5, 0.5), + ], + geometry=[mp.Sphere(0.25, material=mp.Medium(epsilon=13))], + geometry_lattice=mp.Lattice(size=mp.Vector3(1, 1, 1)), + resolution=32, + filename_prefix=self.filename_prefix, + deterministic=True, + tolerance=1e-12, ) ms.run() # inversion symmetry - Wi = mp.Matrix([-1,0,0], [0,-1,0], [0,0,-1]) - w = mp.Vector3(0,0,0) - symeigs = ms.compute_symmetries(Wi, w) - symeigs_expected = [1,1,1,-1,-1,-1] - for i in range(0,5): + Wi = mp.Matrix([-1, 0, 0], [0, -1, 0], [0, 0, -1]) + w = mp.Vector3(0, 0, 0) + symeigs = ms.compute_symmetries(Wi, w) + symeigs_expected = [1, 1, 1, -1, -1, -1] + for i in range(0, 5): self.assertAlmostEqual(symeigs[i].real, symeigs_expected[i], places=3) self.assertAlmostEqual(symeigs[i].imag, 0, places=3) - + # check that transformed_overlap agrees when called manually, with a # "preloaded" bfield - for i in range(0,5): - ms.get_bfield(i+1, bloch_phase=False) + for i in range(0, 5): + ms.get_bfield(i + 1, bloch_phase=False) symeig_bfield = ms.transformed_overlap(Wi, w) self.assertAlmostEqual(symeigs[i].real, symeig_bfield.real, places=3) self.assertAlmostEqual(symeigs[i].imag, symeig_bfield.imag, places=3) - ms.get_dfield(i+1, bloch_phase=False) + ms.get_dfield(i + 1, bloch_phase=False) symeig_dfield = ms.transformed_overlap(Wi, w) self.assertAlmostEqual(symeigs[i].real, symeig_dfield.real, places=3) self.assertAlmostEqual(symeigs[i].imag, symeig_dfield.imag, places=3) # 2-fold symmetry (across MPI xy-transposition dimensions) - W2 = mp.Matrix([-1,0,0], [0,1,0], [0,0,-1]) + W2 = mp.Matrix([-1, 0, 0], [0, 1, 0], [0, 0, -1]) symeigs = ms.compute_symmetries(W2, w) - self.assertAlmostEqual(sum(symeigs[0:3]), -1+0j, places=3) - self.assertAlmostEqual(sum(symeigs[3:6]), -1+0j, places=3) + self.assertAlmostEqual(sum(symeigs[0:3]), -1 + 0j, places=3) + self.assertAlmostEqual(sum(symeigs[3:6]), -1 + 0j, places=3) - # mirror symmetry: compare with run_zeven & run_zodd - ms.k_points = [mp.Vector3(0,0,0)] # must be at Γ cf. https://github.com/NanoComp/mpb/issues/114 - Wz = mp.Matrix([1,0,0], [0,1,0], [0,0,-1]) + # mirror symmetry: compare with run_zeven & run_zodd + ms.k_points = [ + mp.Vector3(0, 0, 0) + ] # must be at Γ cf. https://github.com/NanoComp/mpb/issues/114 + Wz = mp.Matrix([1, 0, 0], [0, 1, 0], [0, 0, -1]) ms.run_zeven() symeigs_zeven = ms.compute_symmetries(Wz, w) - for i in range(0,5): + for i in range(0, 5): self.assertAlmostEqual(symeigs_zeven[i].real, 1, places=3) self.assertAlmostEqual(symeigs_zeven[i].imag, 0, places=3) ms.run_zodd() symeigs_zodd = ms.compute_symmetries(Wz, w) - for i in range(0,5): + for i in range(0, 5): self.assertAlmostEqual(symeigs_zodd[i].real, -1, places=3) - self.assertAlmostEqual(symeigs_zodd[i].imag, 0, places=3) + self.assertAlmostEqual(symeigs_zodd[i].imag, 0, places=3) + -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_multilevel_atom.py b/python/tests/test_multilevel_atom.py index 33aa17b39..c0db13e22 100644 --- a/python/tests/test_multilevel_atom.py +++ b/python/tests/test_multilevel_atom.py @@ -1,11 +1,13 @@ -import meep as mp import math import unittest +import meep as mp + class TestMultiLevelAtom(unittest.TestCase): - - @unittest.skipIf(mp.is_single_precision(), "double-precision floating point specific test") + @unittest.skipIf( + mp.is_single_precision(), "double-precision floating point specific test" + ) def test_multilevel_atom(self): resolution = 40 ncav = 1.5 @@ -37,26 +39,37 @@ def test_multilevel_atom(self): pumping_rate=Rp, frequency=freq_21, gamma=gamma_21, - sigma_diag=mp.Vector3(sigma_21, sigma_21, sigma_21) + sigma_diag=mp.Vector3(sigma_21, sigma_21, sigma_21), ) t2 = mp.Transition(2, 1, transition_rate=rate_21) - ml_atom = mp.MultilevelAtom(sigma=1, transitions=[t1, t2], initial_populations=[N0]) + ml_atom = mp.MultilevelAtom( + sigma=1, transitions=[t1, t2], initial_populations=[N0] + ) two_level = mp.Medium(index=ncav, E_susceptibilities=[ml_atom]) - geometry = [mp.Block(center=mp.Vector3(z=(-0.5 * sz) + (0.5 * Lcav)), - size=mp.Vector3(mp.inf, mp.inf, Lcav), material=two_level)] - - sim = mp.Simulation(cell_size=cell_size, - resolution=resolution, - boundary_layers=pml_layers, - geometry=geometry, - dimensions=dimensions) + geometry = [ + mp.Block( + center=mp.Vector3(z=(-0.5 * sz) + (0.5 * Lcav)), + size=mp.Vector3(mp.inf, mp.inf, Lcav), + material=two_level, + ) + ] + + sim = mp.Simulation( + cell_size=cell_size, + resolution=resolution, + boundary_layers=pml_layers, + geometry=geometry, + dimensions=dimensions, + ) def field_func(p): return 1 if p.z == (-0.5 * sz) + (0.5 * Lcav) else 0 def check_field(sim): - fp = sim.get_field_point(mp.Ex, mp.Vector3(z=(-0.5 * sz) + Lcav + (0.5 * dpad))).real + fp = sim.get_field_point( + mp.Ex, mp.Vector3(z=(-0.5 * sz) + Lcav + (0.5 * dpad)) + ).real self.assertAlmostEqual(fp, -2.7110969214986387) sim.init_sim() @@ -64,5 +77,5 @@ def check_field(sim): sim.run(mp.at_end(check_field), until=7000) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_n2f_periodic.py b/python/tests/test_n2f_periodic.py index 5cac78d5c..bca8b4384 100644 --- a/python/tests/test_n2f_periodic.py +++ b/python/tests/test_n2f_periodic.py @@ -1,68 +1,100 @@ -import unittest -import meep as mp import math +import unittest + import numpy as np from numpy import linalg as LA -class TestNear2FarPeriodicBoundaries(unittest.TestCase): +import meep as mp + +class TestNear2FarPeriodicBoundaries(unittest.TestCase): def test_nea2far_periodic(self): - dpml = 1.0 # PML thickness - dsub = 3.0 # substrate thickness - dpad = 20.0 # padding between grating and PML - gp = 10.0 # grating period - gh = 0.5 # grating height - gdc = 0.5 # grating duty cycle - - sx = dpml+dsub+gh+dpad+dpml + dpml = 1.0 # PML thickness + dsub = 3.0 # substrate thickness + dpad = 20.0 # padding between grating and PML + gp = 10.0 # grating period + gh = 0.5 # grating height + gdc = 0.5 # grating duty cycle + + sx = dpml + dsub + gh + dpad + dpml sy = gp - pml_layers = [mp.PML(thickness=dpml,direction=mp.X)] + pml_layers = [mp.PML(thickness=dpml, direction=mp.X)] - wvl = 0.5 # center wavelength - fcen = 1/wvl # center frequency - df = 0.05*fcen # frequency width + wvl = 0.5 # center wavelength + fcen = 1 / wvl # center frequency + df = 0.05 * fcen # frequency width - src_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub) - sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=src_pt, size=mp.Vector3(y=sy))] + src_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * dsub) + sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=df), + component=mp.Ez, + center=src_pt, + size=mp.Vector3(y=sy), + ) + ] glass = mp.Medium(index=1.5) - geometry = [mp.Block(material=glass, size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub))), - mp.Block(material=glass, size=mp.Vector3(gh,gdc*gp,mp.inf), center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh))] - - k_point = mp.Vector3(0,0,0) + geometry = [ + mp.Block( + material=glass, + size=mp.Vector3(dpml + dsub, mp.inf, mp.inf), + center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub)), + ), + mp.Block( + material=glass, + size=mp.Vector3(gh, gdc * gp, mp.inf), + center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh), + ), + ] + + k_point = mp.Vector3(0, 0, 0) symmetries = [mp.Mirror(mp.Y)] - n2f_pt = mp.Vector3(-0.5*sx+dpml+dsub+gh+1.0) - dft_pt = mp.Vector3(0.5*sx-dpml) + n2f_pt = mp.Vector3(-0.5 * sx + dpml + dsub + gh + 1.0) + dft_pt = mp.Vector3(0.5 * sx - dpml) - res = [20,25,30] + res = [20, 25, 30] norm = np.empty(3) for j in range(3): - sim = mp.Simulation(resolution=res[j], - cell_size=mp.Vector3(sx,sy), - boundary_layers=pml_layers, - geometry=geometry, - k_point=k_point, - sources=sources, - symmetries=symmetries) - - n2f_obj = sim.add_near2far(fcen, 0, 1, mp.Near2FarRegion(center=n2f_pt, size=mp.Vector3(y=sy)), nperiods=10) - dft_obj = sim.add_dft_fields([mp.Ez], fcen, 0, 1, center=dft_pt, size=mp.Vector3(y=sy)) + sim = mp.Simulation( + resolution=res[j], + cell_size=mp.Vector3(sx, sy), + boundary_layers=pml_layers, + geometry=geometry, + k_point=k_point, + sources=sources, + symmetries=symmetries, + ) + + n2f_obj = sim.add_near2far( + fcen, + 0, + 1, + mp.Near2FarRegion(center=n2f_pt, size=mp.Vector3(y=sy)), + nperiods=10, + ) + dft_obj = sim.add_dft_fields( + [mp.Ez], fcen, 0, 1, center=dft_pt, size=mp.Vector3(y=sy) + ) sim.run(until_after_sources=300) - n2f_Ez = sim.get_farfields(n2f_obj, res[j], center=dft_pt, size=mp.Vector3(y=sy)) + n2f_Ez = sim.get_farfields( + n2f_obj, res[j], center=dft_pt, size=mp.Vector3(y=sy) + ) dft_Ez = sim.get_dft_array(dft_obj, mp.Ez, 0) - norm[j] = LA.norm(n2f_Ez['Ez']-dft_Ez[1:-1]) - print("norm:, {}, {:.5f}".format(res[j],norm[j])) + norm[j] = LA.norm(n2f_Ez["Ez"] - dft_Ez[1:-1]) + print(f"norm:, {res[j]}, {norm[j]:.5f}") sim.reset_meep() - self.assertGreater(norm[0],norm[1]) - self.assertGreater(norm[1],norm[2]) + self.assertGreater(norm[0], norm[1]) + self.assertGreater(norm[1], norm[2]) + -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_oblique_source.py b/python/tests/test_oblique_source.py index edf0042a0..558f8551b 100644 --- a/python/tests/test_oblique_source.py +++ b/python/tests/test_oblique_source.py @@ -1,56 +1,71 @@ -import meep as mp import math import unittest -class TestEigenmodeSource(unittest.TestCase): +import meep as mp + +class TestEigenmodeSource(unittest.TestCase): def test_waveguide_flux(self): - cell_size = mp.Vector3(10,10) + cell_size = mp.Vector3(10, 10) pml_layers = [mp.PML(thickness=2.0)] - rot_angles = range(0,60,20) # rotation angle of waveguide, CCW around z-axis + rot_angles = range(0, 60, 20) # rotation angle of waveguide, CCW around z-axis fluxes = [] coeff_fluxes = [] for t in rot_angles: rot_angle = math.radians(t) - kpoint = mp.Vector3(math.cos(rot_angle),math.sin(rot_angle),0) - sources = [mp.EigenModeSource(src=mp.GaussianSource(1.0,fwidth=0.1), - size=mp.Vector3(y=10), - center=mp.Vector3(x=-3), - direction=mp.NO_DIRECTION, - eig_kpoint=kpoint, - eig_band=1, - eig_parity=mp.ODD_Z, - eig_match_freq=True)] - - geometry = [mp.Block(center=mp.Vector3(), - size=mp.Vector3(mp.inf,1,mp.inf), - e1 = mp.Vector3(1).rotate(mp.Vector3(z=1), rot_angle), - e2 = mp.Vector3(y=1).rotate(mp.Vector3(z=1), rot_angle), - material=mp.Medium(index=1.5))] - - sim = mp.Simulation(cell_size=cell_size, - resolution=50, - boundary_layers=pml_layers, - sources=sources, - geometry=geometry) - - tran = sim.add_flux(1.0, 0, 1, mp.FluxRegion(center=mp.Vector3(x=3), size=mp.Vector3(y=10))) + kpoint = mp.Vector3(math.cos(rot_angle), math.sin(rot_angle), 0) + sources = [ + mp.EigenModeSource( + src=mp.GaussianSource(1.0, fwidth=0.1), + size=mp.Vector3(y=10), + center=mp.Vector3(x=-3), + direction=mp.NO_DIRECTION, + eig_kpoint=kpoint, + eig_band=1, + eig_parity=mp.ODD_Z, + eig_match_freq=True, + ) + ] + + geometry = [ + mp.Block( + center=mp.Vector3(), + size=mp.Vector3(mp.inf, 1, mp.inf), + e1=mp.Vector3(1).rotate(mp.Vector3(z=1), rot_angle), + e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), rot_angle), + material=mp.Medium(index=1.5), + ) + ] + + sim = mp.Simulation( + cell_size=cell_size, + resolution=50, + boundary_layers=pml_layers, + sources=sources, + geometry=geometry, + ) + + tran = sim.add_flux( + 1.0, 0, 1, mp.FluxRegion(center=mp.Vector3(x=3), size=mp.Vector3(y=10)) + ) sim.run(until_after_sources=100) - res = sim.get_eigenmode_coefficients(tran, - [1], - eig_parity=mp.EVEN_Y+mp.ODD_Z if t == 0 else mp.ODD_Z, - direction=mp.NO_DIRECTION, - kpoint_func=lambda f,n: kpoint) + res = sim.get_eigenmode_coefficients( + tran, + [1], + eig_parity=mp.EVEN_Y + mp.ODD_Z if t == 0 else mp.ODD_Z, + direction=mp.NO_DIRECTION, + kpoint_func=lambda f, n: kpoint, + ) fluxes.append(mp.get_fluxes(tran)[0]) - coeff_fluxes.append(abs(res.alpha[0,0,0])**2) - print("flux:, {:.2f}, {:.6f}".format(t,fluxes[-1])) - print("coef_flux:, {:.2f}, {:.6f}".format(t,coeff_fluxes[-1])) + coeff_fluxes.append(abs(res.alpha[0, 0, 0]) ** 2) + print(f"flux:, {t:.2f}, {fluxes[-1]:.6f}") + print(f"coef_flux:, {t:.2f}, {coeff_fluxes[-1]:.6f}") self.assertAlmostEqual(fluxes[0], fluxes[1], places=0) self.assertAlmostEqual(fluxes[1], fluxes[2], places=0) @@ -61,9 +76,9 @@ def test_waveguide_flux(self): # sadly the above line requires a workaround due to the # following annoying numerical accident: # AssertionError: 100.33815231783535 != 99.81145343586365 within 0 places - f0,f2=fluxes[0],fluxes[2] - self.assertLess( abs(f0-f2), 0.5*max(abs(f0),abs(f2)) ) + f0, f2 = fluxes[0], fluxes[2] + self.assertLess(abs(f0 - f2), 0.5 * max(abs(f0), abs(f2))) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_physical.py b/python/tests/test_physical.py index 08b745a89..f19a98556 100644 --- a/python/tests/test_physical.py +++ b/python/tests/test_physical.py @@ -1,9 +1,9 @@ import unittest + import meep as mp class TestPhysical(unittest.TestCase): - def test_physical(self): a = 10.0 @@ -15,14 +15,22 @@ def test_physical(self): cell_size = mp.Vector3(xmax, ymax) pml_layers = [mp.PML(ymax / 3.0)] - sources = [mp.Source(src=mp.ContinuousSource(w), component=mp.Ez, - center=mp.Vector3(-dx), size=mp.Vector3())] - - sim = mp.Simulation(cell_size=cell_size, - resolution=a, - boundary_layers=pml_layers, - sources=sources, - force_complex_fields=True) + sources = [ + mp.Source( + src=mp.ContinuousSource(w), + component=mp.Ez, + center=mp.Vector3(-dx), + size=mp.Vector3(), + ) + ] + + sim = mp.Simulation( + cell_size=cell_size, + resolution=a, + boundary_layers=pml_layers, + sources=sources, + force_complex_fields=True, + ) sim.init_sim() sim.solve_cw(tol=1e-5 if mp.is_single_precision() else 1e-6) @@ -33,7 +41,7 @@ def test_physical(self): amp2 = sim.get_field_point(mp.Ez, p2) ratio = abs(amp1) / abs(amp2) - ratio = ratio ** 2 # in 2d, decay is ~1/sqrt(r), so square to get 1/r + ratio = ratio**2 # in 2d, decay is ~1/sqrt(r), so square to get 1/r fail_fmt = "Failed: amp1 = ({}, {}), amp2 = ({}, {})\nabs(amp1/amp2){} = {}, too far from 2.0" fail_msg = fail_fmt.format(amp1.real, amp1, amp2.real, amp2, "^2", ratio) @@ -41,5 +49,5 @@ def test_physical(self): self.assertTrue(ratio <= 2.12 and ratio >= 1.88, fail_msg) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_prism.py b/python/tests/test_prism.py index a66f32b5c..1abc472da 100644 --- a/python/tests/test_prism.py +++ b/python/tests/test_prism.py @@ -1,237 +1,256 @@ import os import unittest -import numpy as np -import meep as mp - -class TestPrism(unittest.TestCase): - - def nonconvex_marching_squares(self,idx,npts): - resolution = 25 - - cell = mp.Vector3(10,10) - - data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'data')) - vertices_file = os.path.join(data_dir, 'nonconvex_prism_vertices{}.npz'.format(idx)) - vertices_obj = np.load(vertices_file) - - ## prism verticies precomputed from analytic "blob" shape using - ## marching squares algorithm of skimage.measure.find_contours - ## ref: https://github.com/NanoComp/meep/pull/1142 - vertices_data = vertices_obj["N{}".format(npts)] - vertices = [mp.Vector3(v[0],v[1],0) for v in vertices_data] - - geometry = [mp.Prism(vertices, - height=mp.inf, - material=mp.Medium(epsilon=12))] - - sim = mp.Simulation(cell_size=cell, - geometry=geometry, - resolution=resolution) - - sim.init_sim() - prism_eps = sim.integrate_field_function([mp.Dielectric], lambda r,eps: eps) - - print("epsilon-sum:, {} (prism-msq)".format(abs(prism_eps))) - - return prism_eps - - - def convex_marching_squares(self,npts): - resolution = 50 - - cell = mp.Vector3(3,3) - - data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'data')) - vertices_file = os.path.join(data_dir, 'convex_prism_vertices.npz') - vertices_obj = np.load(vertices_file) - - ## prism vertices precomputed for a circle of radius 1.0 using - ## marching squares algorithm of skimage.measure.find_contours - ## ref: https://github.com/NanoComp/meep/issues/1060 - vertices_data = vertices_obj["N{}".format(npts)] - vertices = [mp.Vector3(v[0],v[1],0) for v in vertices_data] - - geometry = [mp.Prism(vertices, - height=mp.inf, - material=mp.Medium(epsilon=12))] +import numpy as np - sim = mp.Simulation(cell_size=cell, - geometry=geometry, - resolution=resolution) +import meep as mp - sim.init_sim() - prism_eps = sim.integrate_field_function([mp.Dielectric], lambda r,eps: eps) +class TestPrism(unittest.TestCase): + def nonconvex_marching_squares(self, idx, npts): + resolution = 25 - sim.reset_meep() + cell = mp.Vector3(10, 10) - geometry = [mp.Cylinder(radius=1.0, - center=mp.Vector3(), - height=mp.inf, - material=mp.Medium(epsilon=12))] + data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "data")) + vertices_file = os.path.join(data_dir, f"nonconvex_prism_vertices{idx}.npz") + vertices_obj = np.load(vertices_file) - sim = mp.Simulation(cell_size=cell, - geometry=geometry, - resolution=resolution) + ## prism verticies precomputed from analytic "blob" shape using + ## marching squares algorithm of skimage.measure.find_contours + ## ref: https://github.com/NanoComp/meep/pull/1142 + vertices_data = vertices_obj[f"N{npts}"] + vertices = [mp.Vector3(v[0], v[1], 0) for v in vertices_data] - sim.init_sim() + geometry = [mp.Prism(vertices, height=mp.inf, material=mp.Medium(epsilon=12))] - cyl_eps = sim.integrate_field_function([mp.Dielectric], lambda r,eps: eps) + sim = mp.Simulation(cell_size=cell, geometry=geometry, resolution=resolution) - print("epsilon-sum:, {} (prism-msq), {} (cylinder), {} (relative error)".format(abs(prism_eps),abs(cyl_eps),abs((prism_eps-cyl_eps)/cyl_eps))) + sim.init_sim() - return abs((prism_eps-cyl_eps)/cyl_eps) + prism_eps = sim.integrate_field_function([mp.Dielectric], lambda r, eps: eps) + print(f"epsilon-sum:, {abs(prism_eps)} (prism-msq)") - def convex_circle(self,npts,r,sym): - resolution = 50 + return prism_eps - cell = mp.Vector3(3,3) + def convex_marching_squares(self, npts): + resolution = 50 - ### prism vertices computed as equally-spaced points - ### along the circumference of a circle with radius r - angles = 2*np.pi/npts * np.arange(npts) - vertices = [mp.Vector3(r*np.cos(ang),r*np.sin(ang)) for ang in angles] - geometry = [mp.Prism(vertices, - height=mp.inf, - material=mp.Medium(epsilon=12))] + cell = mp.Vector3(3, 3) - sim = mp.Simulation(cell_size=cell, - geometry=geometry, - symmetries=[mp.Mirror(direction=mp.X),mp.Mirror(direction=mp.Y)] if sym else [], - resolution=resolution) + data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "data")) + vertices_file = os.path.join(data_dir, "convex_prism_vertices.npz") + vertices_obj = np.load(vertices_file) - sim.init_sim() + ## prism vertices precomputed for a circle of radius 1.0 using + ## marching squares algorithm of skimage.measure.find_contours + ## ref: https://github.com/NanoComp/meep/issues/1060 + vertices_data = vertices_obj[f"N{npts}"] + vertices = [mp.Vector3(v[0], v[1], 0) for v in vertices_data] - prism_eps = sim.integrate_field_function([mp.Dielectric], lambda r,eps: eps) + geometry = [mp.Prism(vertices, height=mp.inf, material=mp.Medium(epsilon=12))] - sim.reset_meep() + sim = mp.Simulation(cell_size=cell, geometry=geometry, resolution=resolution) - geometry = [mp.Cylinder(radius=r, - center=mp.Vector3(), - height=mp.inf, - material=mp.Medium(epsilon=12))] + sim.init_sim() - sim = mp.Simulation(cell_size=cell, - geometry=geometry, - symmetries=[mp.Mirror(direction=mp.X),mp.Mirror(direction=mp.Y)] if sym else [], - resolution=resolution) + prism_eps = sim.integrate_field_function([mp.Dielectric], lambda r, eps: eps) - sim.init_sim() + sim.reset_meep() - cyl_eps = sim.integrate_field_function([mp.Dielectric], lambda r,eps: eps) + geometry = [ + mp.Cylinder( + radius=1.0, + center=mp.Vector3(), + height=mp.inf, + material=mp.Medium(epsilon=12), + ) + ] - print("epsilon-sum:, {} (prism-cyl), {} (cylinder), {} (relative error)".format(abs(prism_eps),abs(cyl_eps),abs((prism_eps-cyl_eps)/cyl_eps))) + sim = mp.Simulation(cell_size=cell, geometry=geometry, resolution=resolution) - return abs((prism_eps-cyl_eps)/cyl_eps) + sim.init_sim() - def spiral_gds(self): - data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'data')) - gdsii_file = os.path.join(data_dir, 'spiral.gds') + cyl_eps = sim.integrate_field_function([mp.Dielectric], lambda r, eps: eps) - resolution = 25 - cell_size = mp.Vector3(12,16) - geometry = mp.get_GDSII_prisms(mp.Medium(index=3.5), gdsii_file, 0, 0, mp.inf) + print( + f"epsilon-sum:, {abs(prism_eps)} (prism-msq), {abs(cyl_eps)} (cylinder), {abs((prism_eps-cyl_eps)/cyl_eps)} (relative error)" + ) - sim = mp.Simulation(cell_size=cell_size, - geometry=geometry, - resolution=resolution) + return abs((prism_eps - cyl_eps) / cyl_eps) - sim.init_sim() + def convex_circle(self, npts, r, sym): + resolution = 50 - prism_eps = sim.integrate_field_function([mp.Dielectric], lambda r,eps: eps) + cell = mp.Vector3(3, 3) - print("epsilon-sum:, {} (prism-gds)".format(abs(prism_eps))) + ### prism vertices computed as equally-spaced points + ### along the circumference of a circle with radius r + angles = 2 * np.pi / npts * np.arange(npts) + vertices = [mp.Vector3(r * np.cos(ang), r * np.sin(ang)) for ang in angles] + geometry = [mp.Prism(vertices, height=mp.inf, material=mp.Medium(epsilon=12))] - return prism_eps + sim = mp.Simulation( + cell_size=cell, + geometry=geometry, + symmetries=[mp.Mirror(direction=mp.X), mp.Mirror(direction=mp.Y)] + if sym + else [], + resolution=resolution, + ) - # lots of tests, turned off by default since they run too long; - # rename to test_something to run these tests. - def bigtest_prism(self): - print("Testing Non-Convex Prism #1 using marching squares algorithm...") - d1_a = self.nonconvex_marching_squares(1,208) - d1_b = self.nonconvex_marching_squares(1,448) - d1_ref = 458.27922623563074 ## self.nonconvex_marching_squares(1,904) + sim.init_sim() - self.assertLess(abs((d1_b-d1_ref)/d1_ref),abs((d1_a-d1_ref)/d1_ref)) + prism_eps = sim.integrate_field_function([mp.Dielectric], lambda r, eps: eps) - print("Testing Non-Convex Prism #2 using marching squares algorithm...") - d2_a = self.nonconvex_marching_squares(2,128) - d2_b = self.nonconvex_marching_squares(2,256) - d2_ref = 506.79940504342534 ## self.nonconvex_marching_squares(2,516) + sim.reset_meep() - self.assertLess(abs((d2_b-d2_ref)/d2_ref),abs((d2_a-d2_ref)/d2_ref)) + geometry = [ + mp.Cylinder( + radius=r, + center=mp.Vector3(), + height=mp.inf, + material=mp.Medium(epsilon=12), + ) + ] - print("Testing Non-Convex Prism #3 using marching squares algorithm...") - d3_a = self.nonconvex_marching_squares(3,164) - d3_b = self.nonconvex_marching_squares(3,336) - d3_ref = 640.0738356076143 ## self.nonconvex_marching_squares(3,672) + sim = mp.Simulation( + cell_size=cell, + geometry=geometry, + symmetries=[mp.Mirror(direction=mp.X), mp.Mirror(direction=mp.Y)] + if sym + else [], + resolution=resolution, + ) - self.assertLess(abs((d3_b-d3_ref)/d3_ref),abs((d3_a-d3_ref)/d3_ref)) + sim.init_sim() - print("Testing Convex Prism using marching squares algorithm...") - d = [self.convex_marching_squares(92), - self.convex_marching_squares(192), - self.convex_marching_squares(392)] + cyl_eps = sim.integrate_field_function([mp.Dielectric], lambda r, eps: eps) - self.assertLess(d[1],d[0]) - self.assertLess(d[2],d[1]) + print( + f"epsilon-sum:, {abs(prism_eps)} (prism-cyl), {abs(cyl_eps)} (cylinder), {abs((prism_eps-cyl_eps)/cyl_eps)} (relative error)" + ) - print("Testing Convex Prism #1 using circle formula (without symmetry)...") - r = 1.0458710786934182 - d_nosym = [self.convex_circle(51,r,False), - self.convex_circle(101,r,False), - self.convex_circle(201,r,False)] + return abs((prism_eps - cyl_eps) / cyl_eps) - self.assertLess(d_nosym[1],d_nosym[0]) - self.assertLess(d_nosym[2],d_nosym[1]) + def spiral_gds(self): + data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "data")) + gdsii_file = os.path.join(data_dir, "spiral.gds") - print("Testing Convex Prism #1 using circle formula (with symmetry)...") - d_sym = [self.convex_circle(51,r,True), - self.convex_circle(101,r,True), - self.convex_circle(201,r,True)] + resolution = 25 + cell_size = mp.Vector3(12, 16) + geometry = mp.get_GDSII_prisms(mp.Medium(index=3.5), gdsii_file, 0, 0, mp.inf) - self.assertLess(d_sym[1],d_sym[0]) - self.assertLess(d_sym[2],d_sym[1]) + sim = mp.Simulation( + cell_size=cell_size, geometry=geometry, resolution=resolution + ) - self.assertAlmostEqual(d_nosym[0],d_sym[0],places=3) - self.assertAlmostEqual(d_nosym[1],d_sym[1],places=3) - self.assertAlmostEqual(d_nosym[2],d_sym[2],places=3) + sim.init_sim() - print("Testing Convex Prism #2 using circle formula (without symmetry)...") - r = 1.2896871096581341 - d_nosym = [self.convex_circle(31,r,False), - self.convex_circle(61,r,False), - self.convex_circle(121,r,False)] + prism_eps = sim.integrate_field_function([mp.Dielectric], lambda r, eps: eps) - self.assertLess(d_nosym[1],d_nosym[0]) - self.assertLess(d_nosym[2],d_nosym[1]) + print(f"epsilon-sum:, {abs(prism_eps)} (prism-gds)") - print("Testing Convex Prism #2 using circle formula (with symmetry)...") - d_sym = [self.convex_circle(31,r,True), - self.convex_circle(61,r,True), - self.convex_circle(121,r,True)] + return prism_eps - self.assertLess(d_sym[1],d_sym[0]) - self.assertLess(d_sym[2],d_sym[1]) + # lots of tests, turned off by default since they run too long; + # rename to test_something to run these tests. + def bigtest_prism(self): + print("Testing Non-Convex Prism #1 using marching squares algorithm...") + d1_a = self.nonconvex_marching_squares(1, 208) + d1_b = self.nonconvex_marching_squares(1, 448) + d1_ref = 458.27922623563074 ## self.nonconvex_marching_squares(1,904) + + self.assertLess(abs((d1_b - d1_ref) / d1_ref), abs((d1_a - d1_ref) / d1_ref)) - self.assertAlmostEqual(d_nosym[0],d_sym[0],places=3) - self.assertAlmostEqual(d_nosym[1],d_sym[1],places=3) - self.assertAlmostEqual(d_nosym[2],d_sym[2],places=3) + print("Testing Non-Convex Prism #2 using marching squares algorithm...") + d2_a = self.nonconvex_marching_squares(2, 128) + d2_b = self.nonconvex_marching_squares(2, 256) + d2_ref = 506.79940504342534 ## self.nonconvex_marching_squares(2,516) - print("Testing Non-Convex Prism from GDSII file...") - d = self.spiral_gds() - d_ref = 455.01744881372224 - self.assertAlmostEqual(d,d_ref,places=5) + self.assertLess(abs((d2_b - d2_ref) / d2_ref), abs((d2_a - d2_ref) / d2_ref)) + + print("Testing Non-Convex Prism #3 using marching squares algorithm...") + d3_a = self.nonconvex_marching_squares(3, 164) + d3_b = self.nonconvex_marching_squares(3, 336) + d3_ref = 640.0738356076143 ## self.nonconvex_marching_squares(3,672) + + self.assertLess(abs((d3_b - d3_ref) / d3_ref), abs((d3_a - d3_ref) / d3_ref)) + + print("Testing Convex Prism using marching squares algorithm...") + d = [ + self.convex_marching_squares(92), + self.convex_marching_squares(192), + self.convex_marching_squares(392), + ] + + self.assertLess(d[1], d[0]) + self.assertLess(d[2], d[1]) + + print("Testing Convex Prism #1 using circle formula (without symmetry)...") + r = 1.0458710786934182 + d_nosym = [ + self.convex_circle(51, r, False), + self.convex_circle(101, r, False), + self.convex_circle(201, r, False), + ] + + self.assertLess(d_nosym[1], d_nosym[0]) + self.assertLess(d_nosym[2], d_nosym[1]) + + print("Testing Convex Prism #1 using circle formula (with symmetry)...") + d_sym = [ + self.convex_circle(51, r, True), + self.convex_circle(101, r, True), + self.convex_circle(201, r, True), + ] + + self.assertLess(d_sym[1], d_sym[0]) + self.assertLess(d_sym[2], d_sym[1]) + + self.assertAlmostEqual(d_nosym[0], d_sym[0], places=3) + self.assertAlmostEqual(d_nosym[1], d_sym[1], places=3) + self.assertAlmostEqual(d_nosym[2], d_sym[2], places=3) + + print("Testing Convex Prism #2 using circle formula (without symmetry)...") + r = 1.2896871096581341 + d_nosym = [ + self.convex_circle(31, r, False), + self.convex_circle(61, r, False), + self.convex_circle(121, r, False), + ] - def test_prism(self): - print("Testing Non-Convex Prism #3 using marching squares algorithm...") - d3_a = self.nonconvex_marching_squares(3,164) - d3_b = self.nonconvex_marching_squares(3,336) - d3_ref = 640.0738356076143 ## self.nonconvex_marching_squares(3,672) - self.assertLess(abs((d3_b-d3_ref)/d3_ref),abs((d3_a-d3_ref)/d3_ref)) - self.assertLess(abs((d3_b-d3_ref)/d3_ref), 0.02) + self.assertLess(d_nosym[1], d_nosym[0]) + self.assertLess(d_nosym[2], d_nosym[1]) -if __name__ == '__main__': - unittest.main() + print("Testing Convex Prism #2 using circle formula (with symmetry)...") + d_sym = [ + self.convex_circle(31, r, True), + self.convex_circle(61, r, True), + self.convex_circle(121, r, True), + ] + + self.assertLess(d_sym[1], d_sym[0]) + self.assertLess(d_sym[2], d_sym[1]) + + self.assertAlmostEqual(d_nosym[0], d_sym[0], places=3) + self.assertAlmostEqual(d_nosym[1], d_sym[1], places=3) + self.assertAlmostEqual(d_nosym[2], d_sym[2], places=3) + + print("Testing Non-Convex Prism from GDSII file...") + d = self.spiral_gds() + d_ref = 455.01744881372224 + self.assertAlmostEqual(d, d_ref, places=5) + + def test_prism(self): + print("Testing Non-Convex Prism #3 using marching squares algorithm...") + d3_a = self.nonconvex_marching_squares(3, 164) + d3_b = self.nonconvex_marching_squares(3, 336) + d3_ref = 640.0738356076143 ## self.nonconvex_marching_squares(3,672) + self.assertLess(abs((d3_b - d3_ref) / d3_ref), abs((d3_a - d3_ref) / d3_ref)) + self.assertLess(abs((d3_b - d3_ref) / d3_ref), 0.02) + + +if __name__ == "__main__": + unittest.main() diff --git a/python/tests/test_pw_source.py b/python/tests/test_pw_source.py index 797e3c894..e42d61804 100644 --- a/python/tests/test_pw_source.py +++ b/python/tests/test_pw_source.py @@ -1,11 +1,13 @@ -import meep as mp import cmath import math import unittest + from utils import ApproxComparisonTestCase -class TestPwSource(ApproxComparisonTestCase): +import meep as mp + +class TestPwSource(ApproxComparisonTestCase): def setUp(self): s = 11 dpml = 1 @@ -19,6 +21,7 @@ def setUp(self): def pw_amp(k, x0): def _pw_amp(x): return cmath.exp(1j * k.dot(x + x0)) + return _pw_amp fcen = 0.8 @@ -32,22 +35,22 @@ def _pw_amp(x): component=mp.Ez, center=mp.Vector3(-0.5 * s, 0), size=mp.Vector3(0, s), - amp_func=pw_amp(self.k, mp.Vector3(x=-0.5 * s)) + amp_func=pw_amp(self.k, mp.Vector3(x=-0.5 * s)), ), mp.Source( mp.ContinuousSource(fcen, fwidth=df), component=mp.Ez, center=mp.Vector3(0, -0.5 * s), size=mp.Vector3(s, 0), - amp_func=pw_amp(self.k, mp.Vector3(y=-0.5 * s)) - ) + amp_func=pw_amp(self.k, mp.Vector3(y=-0.5 * s)), + ), ] self.sim = mp.Simulation( cell_size=cell, sources=sources, boundary_layers=pml_layers, - resolution=resolution + resolution=resolution, ) self.sim.use_output_directory(self.temp_dir) self.s = s @@ -72,7 +75,11 @@ def test_pw_source(self): tol = 1e-4 if mp.is_single_precision() else 1e-9 self.assertClose(pt1 / pt2, 27.557668029008262, epsilon=tol) - self.assertAlmostEqual(cmath.exp(1j * self.k.dot(v1 - v2)), 0.7654030066070924 - 0.6435512702783076j) + self.assertAlmostEqual( + cmath.exp(1j * self.k.dot(v1 - v2)), + 0.7654030066070924 - 0.6435512702783076j, + ) + -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_refl_angular.py b/python/tests/test_refl_angular.py index 0397051b4..6e6bad0b6 100644 --- a/python/tests/test_refl_angular.py +++ b/python/tests/test_refl_angular.py @@ -1,12 +1,12 @@ -# -*- coding: utf-8 -*- - +import math import unittest -import parameterized + import numpy as np -import math -import meep as mp +import parameterized from utils import ApproxComparisonTestCase +import meep as mp + class TestReflAngular(ApproxComparisonTestCase): @classmethod @@ -18,76 +18,81 @@ def setUpClass(cls): cls.dpml = 1.0 cls.dz = 7.0 - cls.sz = cls.dz+2*cls.dpml + cls.sz = cls.dz + 2 * cls.dpml cls.wvl_min = 0.4 cls.wvl_max = 0.8 - cls.fmin = 1/cls.wvl_max - cls.fmax = 1/cls.wvl_min - cls.fcen = 0.5*(cls.fmin+cls.fmax) - cls.df = cls.fmax-cls.fmin + cls.fmin = 1 / cls.wvl_max + cls.fmax = 1 / cls.wvl_min + cls.fcen = 0.5 * (cls.fmin + cls.fmax) + cls.df = cls.fmax - cls.fmin cls.nfreq = 11 def refl_angular(self, theta): theta_r = math.radians(theta) # wavevector (in source medium); plane of incidence is XZ - k = mp.Vector3(0,0,1).rotate(mp.Vector3(0,1,0),theta_r).scale(self.n1*self.fmin) - - if theta == 0: - dimensions = 1 - else: - dimensions = 3 + k = ( + mp.Vector3(0, 0, 1) + .rotate(mp.Vector3(0, 1, 0), theta_r) + .scale(self.n1 * self.fmin) + ) + dimensions = 1 if theta == 0 else 3 cell_size = mp.Vector3(z=self.sz) pml_layers = [mp.PML(self.dpml)] - sources = [mp.Source(mp.GaussianSource(self.fcen, fwidth=self.df), - component=mp.Ex, # P polarization - center=mp.Vector3(z=-0.5*self.sz+self.dpml))] - - sim = mp.Simulation(resolution=self.resolution, - cell_size=cell_size, - dimensions=dimensions, - default_material=mp.Medium(index=self.n1), - sources=sources, - boundary_layers=pml_layers, - k_point=k) - - mon_pt = -0.5*self.sz+self.dpml+0.25*self.dz + sources = [ + mp.Source( + mp.GaussianSource(self.fcen, fwidth=self.df), + component=mp.Ex, # P polarization + center=mp.Vector3(z=-0.5 * self.sz + self.dpml), + ) + ] + + sim = mp.Simulation( + resolution=self.resolution, + cell_size=cell_size, + dimensions=dimensions, + default_material=mp.Medium(index=self.n1), + sources=sources, + boundary_layers=pml_layers, + k_point=k, + ) + + mon_pt = -0.5 * self.sz + self.dpml + 0.25 * self.dz refl_fr = mp.FluxRegion(center=mp.Vector3(z=mon_pt)) - refl = sim.add_flux(self.fcen, - self.df, - self.nfreq, - refl_fr) - - termination_cond = mp.stop_when_fields_decayed(50, - mp.Ex, - mp.Vector3(z=mon_pt), - 1e-9) + refl = sim.add_flux(self.fcen, self.df, self.nfreq, refl_fr) + + termination_cond = mp.stop_when_fields_decayed( + 50, mp.Ex, mp.Vector3(z=mon_pt), 1e-9 + ) sim.run(until_after_sources=termination_cond) empty_data = sim.get_flux_data(refl) empty_flux = mp.get_fluxes(refl) sim.reset_meep() - geometry = [mp.Block(size=mp.Vector3(mp.inf,mp.inf,0.5*self.sz), - center=mp.Vector3(z=0.25*self.sz), - material=mp.Medium(index=self.n2))] - - sim = mp.Simulation(resolution=self.resolution, - cell_size=cell_size, - dimensions=dimensions, - default_material=mp.Medium(index=self.n1), - sources=sources, - boundary_layers=pml_layers, - k_point=k, - geometry=geometry) - - refl = sim.add_flux(self.fcen, - self.df, - self.nfreq, - refl_fr) + geometry = [ + mp.Block( + size=mp.Vector3(mp.inf, mp.inf, 0.5 * self.sz), + center=mp.Vector3(z=0.25 * self.sz), + material=mp.Medium(index=self.n2), + ) + ] + + sim = mp.Simulation( + resolution=self.resolution, + cell_size=cell_size, + dimensions=dimensions, + default_material=mp.Medium(index=self.n1), + sources=sources, + boundary_layers=pml_layers, + k_point=k, + geometry=geometry, + ) + + refl = sim.add_flux(self.fcen, self.df, self.nfreq, refl_fr) sim.load_minus_flux_data(refl, empty_data) sim.run(until_after_sources=termination_cond) @@ -95,41 +100,48 @@ def refl_angular(self, theta): refl_flux = mp.get_fluxes(refl) freqs = mp.get_flux_freqs(refl) - Rs = -np.array(refl_flux)/np.array(empty_flux) - - thetas = [] - for i in range(self.nfreq): - thetas.append(math.asin(k.x/(self.n1*freqs[i]))) + Rs = -np.array(refl_flux) / np.array(empty_flux) + thetas = [math.asin(k.x / (self.n1 * freqs[i])) for i in range(self.nfreq)] return freqs, thetas, Rs @parameterized.parameterized.expand([(0,), (20.6,)]) - def test_refl_angular(self,theta): + def test_refl_angular(self, theta): fmeep, tmeep, Rmeep = self.refl_angular(theta) # angle of refracted planewave in medium n2 for an # incident planewave in medium n1 at angle theta_in - theta_out = lambda theta_in: math.asin(self.n1*math.sin(theta_in)/self.n2) + theta_out = lambda theta_in: math.asin(self.n1 * math.sin(theta_in) / self.n2) # Fresnel reflectance for P polarization in medium n2 for # an incident planewave in medium n1 at angle theta_in - Rfresnel = lambda theta_in: (math.fabs((self.n1*math.cos(theta_out(theta_in))-self.n2*math.cos(theta_in)) / - (self.n1*math.cos(theta_out(theta_in))+self.n2*math.cos(theta_in)))**2) + Rfresnel = lambda theta_in: ( + math.fabs( + (self.n1 * math.cos(theta_out(theta_in)) - self.n2 * math.cos(theta_in)) + / ( + self.n1 * math.cos(theta_out(theta_in)) + + self.n2 * math.cos(theta_in) + ) + ) + ** 2 + ) Ranalytic = np.empty((self.nfreq,)) - print("refl:, wavelength (μm), incident angle (°), reflectance (Meep), reflectance (analytic), error") + print( + "refl:, wavelength (μm), incident angle (°), reflectance (Meep), reflectance (analytic), error" + ) for i in range(self.nfreq): Ranalytic[i] = Rfresnel(tmeep[i]) - err = abs(Rmeep[i]-Ranalytic[i])/Ranalytic[i] - print("refl:, {:4.2f}, {:4.2f}, {:8.6f}, {:8.6f}, {:6.4f}".format(1/fmeep[i], - math.degrees(tmeep[i]), - Rmeep[i], - Ranalytic[i], - err)) + err = abs(Rmeep[i] - Ranalytic[i]) / Ranalytic[i] + print( + "refl:, {:4.2f}, {:4.2f}, {:8.6f}, {:8.6f}, {:6.4f}".format( + 1 / fmeep[i], math.degrees(tmeep[i]), Rmeep[i], Ranalytic[i], err + ) + ) tol = 0.005 if mp.is_single_precision() else 0.004 self.assertClose(Rmeep, Ranalytic, epsilon=tol) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_ring.py b/python/tests/test_ring.py index 7970f23dc..d4f5eaa9b 100644 --- a/python/tests/test_ring.py +++ b/python/tests/test_ring.py @@ -1,10 +1,11 @@ # Python port of meep/examples/ring.ctl # Calculating 2d ring-resonator modes, from the Meep tutorial. import unittest + import meep as mp -class TestRing(unittest.TestCase): +class TestRing(unittest.TestCase): @classmethod def setUpClass(cls): cls.temp_dir = mp.make_output_directory() @@ -21,7 +22,7 @@ def init(self): dpml = 2 sxy = 2 * (r + w + pad + dpml) - dielectric = mp.Medium(epsilon=n * n) + dielectric = mp.Medium(epsilon=n**2) air = mp.Medium() c1 = mp.Cylinder(r + w, material=dielectric) @@ -32,12 +33,14 @@ def init(self): src = mp.Source(mp.GaussianSource(fcen, fwidth=df), mp.Ez, mp.Vector3(r + 0.1)) - self.sim = mp.Simulation(cell_size=mp.Vector3(sxy, sxy), - geometry=[c1, c2], - sources=[src], - resolution=10, - symmetries=[mp.Mirror(mp.Y)], - boundary_layers=[mp.PML(dpml)]) + self.sim = mp.Simulation( + cell_size=mp.Vector3(sxy, sxy), + geometry=[c1, c2], + sources=[src], + resolution=10, + symmetries=[mp.Mirror(mp.Y)], + boundary_layers=[mp.PML(dpml)], + ) self.sim.use_output_directory(self.temp_dir) self.h = mp.Harminv(mp.Ez, mp.Vector3(r + 0.1), fcen, df) @@ -48,7 +51,7 @@ def test_harminv(self): self.sim.run( mp.at_beginning(mp.output_epsilon), mp.after_sources(self.h), - until_after_sources=300 + until_after_sources=300, ) m1 = self.h.modes[0] @@ -68,5 +71,5 @@ def test_harminv(self): self.assertAlmostEqual(fp, -0.08185972142450348, places=places) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_ring_cyl.py b/python/tests/test_ring_cyl.py index a6ec6c27d..525ac7c09 100644 --- a/python/tests/test_ring_cyl.py +++ b/python/tests/test_ring_cyl.py @@ -1,9 +1,11 @@ import unittest -import meep as mp + from utils import ApproxComparisonTestCase -class TestRingCyl(ApproxComparisonTestCase): +import meep as mp + +class TestRingCyl(ApproxComparisonTestCase): def setUp(self): n = 3.4 w = 1 @@ -19,7 +21,7 @@ def setUp(self): mp.Block( center=mp.Vector3(self.r + (w / 2)), size=mp.Vector3(w, mp.inf, mp.inf), - material=mp.Medium(index=n) + material=mp.Medium(index=n), ) ] @@ -32,7 +34,7 @@ def setUp(self): mp.Source( src=mp.GaussianSource(self.fcen, fwidth=self.df), component=mp.Ez, - center=mp.Vector3(self.r + 0.1) + center=mp.Vector3(self.r + 0.1), ) ] @@ -44,7 +46,7 @@ def setUp(self): sources=sources, dimensions=dimensions, m=m, - split_chunks_evenly=False + split_chunks_evenly=False, ) def test_ring_cyl(self): @@ -67,5 +69,5 @@ def test_ring_cyl(self): self.assertClose(expected, res, epsilon=tol) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_simulation.py b/python/tests/test_simulation.py index 24d183467..a0c3b3b7a 100644 --- a/python/tests/test_simulation.py +++ b/python/tests/test_simulation.py @@ -4,8 +4,10 @@ import sys import unittest import warnings + import h5py import numpy as np + import meep as mp try: @@ -16,11 +18,11 @@ class TestSimulation(unittest.TestCase): - fname_base = re.sub(r'\.py$', '', os.path.split(sys.argv[0])[1]) - fname = fname_base + '-ez-000200.00.h5' + fname_base = re.sub(r"\.py$", "", os.path.split(sys.argv[0])[1]) + fname = fname_base + "-ez-000200.00.h5" def setUp(self): - print("Running {}".format(self._testMethodName)) + print(f"Running {self._testMethodName}") @classmethod def setUpClass(cls): @@ -33,16 +35,106 @@ def tearDownClass(cls): def test_interpolate_numbers(self): expected = [ - 1.0, 1.0909090909090908, 1.1818181818181819, 1.2727272727272727, 1.3636363636363635, 1.4545454545454546, 1.5454545454545454, 1.6363636363636365, 1.7272727272727273, 1.8181818181818181, 1.9090909090909092, - 2.0, 2.090909090909091, 2.1818181818181817, 2.272727272727273, 2.3636363636363638, 2.4545454545454546, 2.5454545454545454, 2.6363636363636362, 2.727272727272727, 2.8181818181818183, 2.909090909090909, - 3.0, 3.090909090909091, 3.1818181818181817, 3.272727272727273, 3.3636363636363638, 3.4545454545454546, 3.5454545454545454, 3.6363636363636362, 3.727272727272727, 3.8181818181818183, 3.909090909090909, - 4.0, 4.090909090909091, 4.181818181818182, 4.2727272727272725, 4.363636363636363, 4.454545454545454, 4.545454545454546, 4.636363636363637, 4.7272727272727275, 4.818181818181818, 4.909090909090909, - 5.0, 5.090909090909091, 5.181818181818182, 5.2727272727272725, 5.363636363636363, 5.454545454545454, 5.545454545454546, 5.636363636363637, 5.7272727272727275, 5.818181818181818, 5.909090909090909, - 6.0, 6.090909090909091, 6.181818181818182, 6.2727272727272725, 6.363636363636363, 6.454545454545454, 6.545454545454546, 6.636363636363637, 6.7272727272727275, 6.818181818181818, 6.909090909090909, - 7.0, 7.090909090909091, 7.181818181818182, 7.2727272727272725, 7.363636363636363, 7.454545454545454, 7.545454545454546, 7.636363636363637, 7.7272727272727275, 7.818181818181818, 7.909090909090909, - 8.0, 8.090909090909092, 8.181818181818182, 8.272727272727273, 8.363636363636363, 8.454545454545455, 8.545454545454545, 8.636363636363637, 8.727272727272727, 8.818181818181818, 8.909090909090908, - 9.0, 9.090909090909092, 9.181818181818182, 9.272727272727273, 9.363636363636363, 9.454545454545455, 9.545454545454545, 9.636363636363637, 9.727272727272727, 9.818181818181818, 9.909090909090908, - 10.0 + 1.0, + 1.0909090909090908, + 1.1818181818181819, + 1.2727272727272727, + 1.3636363636363635, + 1.4545454545454546, + 1.5454545454545454, + 1.6363636363636365, + 1.7272727272727273, + 1.8181818181818181, + 1.9090909090909092, + 2.0, + 2.090909090909091, + 2.1818181818181817, + 2.272727272727273, + 2.3636363636363638, + 2.4545454545454546, + 2.5454545454545454, + 2.6363636363636362, + 2.727272727272727, + 2.8181818181818183, + 2.909090909090909, + 3.0, + 3.090909090909091, + 3.1818181818181817, + 3.272727272727273, + 3.3636363636363638, + 3.4545454545454546, + 3.5454545454545454, + 3.6363636363636362, + 3.727272727272727, + 3.8181818181818183, + 3.909090909090909, + 4.0, + 4.090909090909091, + 4.181818181818182, + 4.2727272727272725, + 4.363636363636363, + 4.454545454545454, + 4.545454545454546, + 4.636363636363637, + 4.7272727272727275, + 4.818181818181818, + 4.909090909090909, + 5.0, + 5.090909090909091, + 5.181818181818182, + 5.2727272727272725, + 5.363636363636363, + 5.454545454545454, + 5.545454545454546, + 5.636363636363637, + 5.7272727272727275, + 5.818181818181818, + 5.909090909090909, + 6.0, + 6.090909090909091, + 6.181818181818182, + 6.2727272727272725, + 6.363636363636363, + 6.454545454545454, + 6.545454545454546, + 6.636363636363637, + 6.7272727272727275, + 6.818181818181818, + 6.909090909090909, + 7.0, + 7.090909090909091, + 7.181818181818182, + 7.2727272727272725, + 7.363636363636363, + 7.454545454545454, + 7.545454545454546, + 7.636363636363637, + 7.7272727272727275, + 7.818181818181818, + 7.909090909090909, + 8.0, + 8.090909090909092, + 8.181818181818182, + 8.272727272727273, + 8.363636363636363, + 8.454545454545455, + 8.545454545454545, + 8.636363636363637, + 8.727272727272727, + 8.818181818181818, + 8.909090909090908, + 9.0, + 9.090909090909092, + 9.181818181818182, + 9.272727272727273, + 9.363636363636363, + 9.454545454545455, + 9.545454545454545, + 9.636363636363637, + 9.727272727272727, + 9.818181818181818, + 9.909090909090908, + 10.0, ] nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] @@ -73,7 +165,7 @@ def test_interpolate_vectors(self): mp.Vector3(0.42499999999999993), mp.Vector3(0.44999999999999996), mp.Vector3(0.475), - mp.Vector3(0.5) + mp.Vector3(0.5), ] res = mp.interpolate(19, [mp.Vector3(), mp.Vector3(0.5)]) @@ -94,7 +186,7 @@ def test_arith_sequence(self): 0.15240480961923594, 0.15280561122244193, 0.15320641282564793, - 0.15360721442885392 + 0.15360721442885392, ] res = np.linspace(0.15, 0.15 + 0.000400801603206 * 10, num=10, endpoint=False) @@ -112,17 +204,20 @@ def init_simple_simulation(self, **kwargs): fcen = 1.0 df = 1.0 - sources = mp.Source(src=mp.GaussianSource(fcen, fwidth=df), center=mp.Vector3(), - component=mp.Ez) + sources = mp.Source( + src=mp.GaussianSource(fcen, fwidth=df), center=mp.Vector3(), component=mp.Ez + ) symmetries = [mp.Mirror(mp.X), mp.Mirror(mp.Y)] - return mp.Simulation(resolution=resolution, - cell_size=cell, - boundary_layers=[pml_layers], - sources=[sources], - symmetries=symmetries, - **kwargs) + return mp.Simulation( + resolution=resolution, + cell_size=cell, + boundary_layers=[pml_layers], + sources=[sources], + symmetries=symmetries, + **kwargs, + ) @unittest.skipIf(not mp.with_mpi(), "MPI specific test") def test_mpi(self): @@ -130,7 +225,7 @@ def test_mpi(self): def test_use_output_directory_default(self): sim = self.init_simple_simulation() - output_dir = os.path.join(self.temp_dir, 'simulation-out') + output_dir = os.path.join(self.temp_dir, "simulation-out") sim.use_output_directory(output_dir) sim.run(mp.at_end(mp.output_efield_z), until=200) @@ -141,8 +236,10 @@ def test_at_time(self): sim.use_output_directory(self.temp_dir) sim.run(mp.at_time(100, mp.output_efield_z), until=200) - fname = os.path.join(self.temp_dir, - sim.get_filename_prefix() + '-ez-000100.00.h5') + fname = os.path.join( + self.temp_dir, f"{sim.get_filename_prefix()}-ez-000100.00.h5" + ) + self.assertTrue(os.path.exists(fname)) def test_after_sources_and_time(self): @@ -160,10 +257,15 @@ def _done(sim, todo): def test_with_prefix(self): sim = self.init_simple_simulation() sim.use_output_directory(self.temp_dir) - sim.run(mp.with_prefix('test_prefix-', mp.at_end(mp.output_efield_z)), until=200) + sim.run( + mp.with_prefix("test_prefix-", mp.at_end(mp.output_efield_z)), until=200 + ) + + fname = os.path.join( + self.temp_dir, + (f"test_prefix-{sim.get_filename_prefix()}" + "-ez-000200.00.h5"), + ) - fname = os.path.join(self.temp_dir, 'test_prefix-' + sim.get_filename_prefix() + - '-ez-000200.00.h5') self.assertTrue(os.path.exists(fname)) def test_extra_materials(self): @@ -189,25 +291,29 @@ def test_infer_dimensions(self): def test_in_volume(self): sim = self.init_simple_simulation() sim.use_output_directory(self.temp_dir) - sim.filename_prefix = 'test_in_volume' + sim.filename_prefix = "test_in_volume" vol = mp.Volume(mp.Vector3(), size=mp.Vector3(x=2)) sim.run(mp.at_end(mp.in_volume(vol, mp.output_efield_z)), until=200) - fn = os.path.join(self.temp_dir, 'test_in_volume-ez-000200.00.h5') + fn = os.path.join(self.temp_dir, "test_in_volume-ez-000200.00.h5") self.assertTrue(os.path.exists(fn)) def test_in_point(self): sim = self.init_simple_simulation() sim.use_output_directory(self.temp_dir) - sim.filename_prefix = 'test_in_point' + sim.filename_prefix = "test_in_point" pt = mp.Vector3() sim.run(mp.at_end(mp.in_point(pt, mp.output_efield_z)), until=200) - fn = os.path.join(self.temp_dir, 'test_in_point-ez-000200.00.h5') + fn = os.path.join(self.temp_dir, "test_in_point-ez-000200.00.h5") self.assertTrue(os.path.exists(fn)) def test_epsilon_input_file(self): sim = self.init_simple_simulation() - eps_input_fname = 'cyl-ellipsoid-eps-ref.h5' - eps_input_dir = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..', 'tests')) + eps_input_fname = "cyl-ellipsoid-eps-ref.h5" + eps_input_dir = os.path.abspath( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), "..", "..", "tests" + ) + ) eps_input_path = os.path.join(eps_input_dir, eps_input_fname) sim.epsilon_input_file = eps_input_path @@ -219,19 +325,25 @@ def test_epsilon_input_file(self): # Test unicode file name for Python 2 if sys.version_info[0] == 2: - sim = self.init_simple_simulation(epsilon_input_file=unicode(eps_input_path)) + sim = self.init_simple_simulation( + epsilon_input_file=unicode(eps_input_path) + ) sim.run(until=200) fp = sim.get_field_point(mp.Ez, mp.Vector3(x=1)) self.assertAlmostEqual(fp, -0.002989654055823199) def test_numpy_epsilon(self): sim = self.init_simple_simulation() - eps_input_fname = 'cyl-ellipsoid-eps-ref.h5' - eps_input_dir = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..', 'tests')) + eps_input_fname = "cyl-ellipsoid-eps-ref.h5" + eps_input_dir = os.path.abspath( + os.path.join( + os.path.dirname(os.path.abspath(__file__)), "..", "..", "tests" + ) + ) eps_input_path = os.path.join(eps_input_dir, eps_input_fname) - with h5py.File(eps_input_path, 'r') as f: - sim.default_material = f['eps'][()] + with h5py.File(eps_input_path, "r") as f: + sim.default_material = f["eps"][()] sim.run(until=200) fp = sim.get_field_point(mp.Ez, mp.Vector3(x=1)) @@ -240,51 +352,68 @@ def test_numpy_epsilon(self): self.assertAlmostEqual(fp, -0.002989654055823199, places=places) def test_set_materials(self): - def change_geom(sim): t = sim.meep_time() fn = t * 0.02 - geom = [mp.Cylinder(radius=3, material=mp.Medium(index=3.5), center=mp.Vector3(fn, fn)), - mp.Ellipsoid(size=mp.Vector3(1, 2, mp.inf), center=mp.Vector3(fn, fn))] + geom = [ + mp.Cylinder( + radius=3, material=mp.Medium(index=3.5), center=mp.Vector3(fn, fn) + ), + mp.Ellipsoid(size=mp.Vector3(1, 2, mp.inf), center=mp.Vector3(fn, fn)), + ] sim.set_materials(geometry=geom) c = mp.Cylinder(radius=3, material=mp.Medium(index=3.5)) e = mp.Ellipsoid(size=mp.Vector3(1, 2, mp.inf)) - sources = mp.Source(src=mp.GaussianSource(1, fwidth=0.1), component=mp.Hz, center=mp.Vector3()) + sources = mp.Source( + src=mp.GaussianSource(1, fwidth=0.1), component=mp.Hz, center=mp.Vector3() + ) symmetries = [mp.Mirror(mp.X, -1), mp.Mirror(mp.Y, -1)] - sim = mp.Simulation(cell_size=mp.Vector3(10, 10), - geometry=[c, e], - boundary_layers=[mp.PML(1.0)], - sources=[sources], - symmetries=symmetries, - resolution=16) + sim = mp.Simulation( + cell_size=mp.Vector3(10, 10), + geometry=[c, e], + boundary_layers=[mp.PML(1.0)], + sources=[sources], + symmetries=symmetries, + resolution=16, + ) - eps = {'arr1': None, 'arr2': None} + eps = {"arr1": None, "arr2": None} def get_arr1(sim): - eps['arr1'] = sim.get_array(mp.Dielectric, mp.Volume(mp.Vector3(), mp.Vector3(10, 10))) + eps["arr1"] = sim.get_array( + mp.Dielectric, mp.Volume(mp.Vector3(), mp.Vector3(10, 10)) + ) def get_arr2(sim): - eps['arr2'] = sim.get_array(mp.Dielectric, mp.Volume(mp.Vector3(), mp.Vector3(10, 10))) - - sim.run(mp.at_time(50, get_arr1), mp.at_time(100, change_geom), - mp.at_end(get_arr2), until=200) + eps["arr2"] = sim.get_array( + mp.Dielectric, mp.Volume(mp.Vector3(), mp.Vector3(10, 10)) + ) + + sim.run( + mp.at_time(50, get_arr1), + mp.at_time(100, change_geom), + mp.at_end(get_arr2), + until=200, + ) - self.assertFalse(np.array_equal(eps['arr1'], eps['arr2'])) + self.assertFalse(np.array_equal(eps["arr1"], eps["arr2"])) def test_modal_volume_in_box(self): sim = self.init_simple_simulation() sim.run(until=200) vol = sim.fields.total_volume() - self.assertAlmostEqual(sim.fields.modal_volume_in_box(vol), - sim.modal_volume_in_box()) + self.assertAlmostEqual( + sim.fields.modal_volume_in_box(vol), sim.modal_volume_in_box() + ) vol = mp.Volume(mp.Vector3(), size=mp.Vector3(1, 1, 1)) - self.assertAlmostEqual(sim.fields.modal_volume_in_box(vol.swigobj), - sim.modal_volume_in_box(vol)) + self.assertAlmostEqual( + sim.fields.modal_volume_in_box(vol.swigobj), sim.modal_volume_in_box(vol) + ) def test_in_box_volumes(self): sim = self.init_simple_simulation() @@ -307,7 +436,7 @@ def test_get_array_output(self): sim.use_output_directory(self.temp_dir) sim.symmetries = [] sim.geometry = [mp.Cylinder(0.2, material=mp.Medium(index=3))] - sim.filename_prefix = 'test_get_array_output' + sim.filename_prefix = "test_get_array_output" sim.run(until=20) mp.output_epsilon(sim) @@ -320,21 +449,21 @@ def test_get_array_output(self): energy_arr = sim.get_tot_pwr(snap=True) efield_arr = sim.get_efield(snap=True) - fname_fmt = os.path.join(self.temp_dir, 'test_get_array_output-{}-000020.00.h5') + fname_fmt = os.path.join(self.temp_dir, "test_get_array_output-{}-000020.00.h5") - with h5py.File(fname_fmt.format('eps'), 'r') as f: - eps = f['eps'][()] + with h5py.File(fname_fmt.format("eps"), "r") as f: + eps = f["eps"][()] - with h5py.File(fname_fmt.format('ez'), 'r') as f: - efield_z = f['ez'][()] + with h5py.File(fname_fmt.format("ez"), "r") as f: + efield_z = f["ez"][()] - with h5py.File(fname_fmt.format('energy'), 'r') as f: - energy = f['energy'][()] + with h5py.File(fname_fmt.format("energy"), "r") as f: + energy = f["energy"][()] - with h5py.File(fname_fmt.format('e'), 'r') as f: - ex = f['ex'][()] - ey = f['ey'][()] - ez = f['ez'][()] + with h5py.File(fname_fmt.format("e"), "r") as f: + ex = f["ex"][()] + ey = f["ey"][()] + ez = f["ez"][()] efield = np.stack([ex, ey, ez], axis=-1) np.testing.assert_allclose(eps, eps_arr) @@ -346,13 +475,21 @@ def test_synchronized_magnetic(self): # Issue 309 cell = mp.Vector3(16, 8, 0) - geometry = [mp.Block(mp.Vector3(1e20, 1, 1e20), - center=mp.Vector3(0, 0), - material=mp.Medium(epsilon=12))] + geometry = [ + mp.Block( + mp.Vector3(1e20, 1, 1e20), + center=mp.Vector3(0, 0), + material=mp.Medium(epsilon=12), + ) + ] - sources = [mp.Source(mp.ContinuousSource(frequency=0.15), - component=mp.Ez, - center=mp.Vector3(-7, 0))] + sources = [ + mp.Source( + mp.ContinuousSource(frequency=0.15), + component=mp.Ez, + center=mp.Vector3(-7, 0), + ) + ] pml_layers = [mp.PML(1.0)] resolution = 10 @@ -362,14 +499,13 @@ def test_synchronized_magnetic(self): boundary_layers=pml_layers, geometry=geometry, sources=sources, - resolution=resolution + resolution=resolution, ) sim.use_output_directory(self.temp_dir) sim.run(mp.synchronized_magnetic(mp.output_bfield_y), until=10) def test_harminv_warnings(self): - def check_warnings(sim, h, should_warn=True): with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") @@ -381,21 +517,30 @@ def check_warnings(sim, h, should_warn=True): else: self.assertEqual(len(w), 0) - sources = [mp.Source(src=mp.GaussianSource(1, fwidth=1), center=mp.Vector3(), component=mp.Ez)] - sim = mp.Simulation(cell_size=mp.Vector3(10, 10), resolution=10, sources=sources) + sources = [ + mp.Source( + src=mp.GaussianSource(1, fwidth=1), center=mp.Vector3(), component=mp.Ez + ) + ] + sim = mp.Simulation( + cell_size=mp.Vector3(10, 10), resolution=10, sources=sources + ) h = mp.Harminv(mp.Ez, mp.Vector3(), 1.4, 0.5) check_warnings(sim, h) - sim = mp.Simulation(cell_size=mp.Vector3(10, 10), resolution=10, sources=sources) + sim = mp.Simulation( + cell_size=mp.Vector3(10, 10), resolution=10, sources=sources + ) h = mp.Harminv(mp.Ez, mp.Vector3(), 0.5, 0.5) check_warnings(sim, h) - sim = mp.Simulation(cell_size=mp.Vector3(10, 10), resolution=10, sources=sources) + sim = mp.Simulation( + cell_size=mp.Vector3(10, 10), resolution=10, sources=sources + ) h = mp.Harminv(mp.Ez, mp.Vector3(), 1, 1) check_warnings(sim, h, should_warn=False) def test_vec_constructor(self): - def assert_one(v): self.assertEqual(v.z(), 1) @@ -429,14 +574,16 @@ def check_iterable(one, two, three, four): assert_two(v2) v3 = mp.vec(three) assert_three(v3) - assert_raises(four, (NotImplementedError,TypeError)) + assert_raises(four, (NotImplementedError, TypeError)) check_iterable([1], [1, 2], [1, 2, 3], [1, 2, 3, 4]) check_iterable((1,), (1, 2), (1, 2, 3), (1, 2, 3, 4)) - check_iterable(np.array([1.]), - np.array([1., 2.]), - np.array([1., 2., 3.]), - np.array([1., 2., 3., 4.])) + check_iterable( + np.array([1.0]), + np.array([1.0, 2.0]), + np.array([1.0, 2.0, 3.0]), + np.array([1.0, 2.0, 3.0, 4.0]), + ) with self.assertRaises(TypeError): mp.vec([1, 2], 3) @@ -444,7 +591,9 @@ def check_iterable(one, two, three, four): with self.assertRaises(TypeError): mp.vec(1, [2, 3]) - @unittest.skipIf(mp.is_single_precision(), "double-precision floating point specific test") + @unittest.skipIf( + mp.is_single_precision(), "double-precision floating point specific test" + ) def test_epsilon_warning(self): ## fields blow up using dispersive material ## when compiled using single precision @@ -452,9 +601,11 @@ def test_epsilon_warning(self): with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") from meep.materials import Si + self.assertEqual(len(w), 0) from meep.materials import Mo + geom = [mp.Sphere(radius=0.2, material=Mo)] sim = self.init_simple_simulation(geometry=geom) with warnings.catch_warnings(record=True) as w: @@ -464,6 +615,7 @@ def test_epsilon_warning(self): self.assertIn("Epsilon", str(w[0].message)) from meep.materials import SiO2 + geom = [mp.Sphere(radius=0.2, material=SiO2)] sim = self.init_simple_simulation(geometry=geom) with warnings.catch_warnings(record=True) as w: @@ -475,7 +627,7 @@ def test_epsilon_warning(self): def test_get_filename_prefix(self): sim = self.init_simple_simulation() self.assertEqual(sim.get_filename_prefix(), self.fname_base) - sim.filename_prefix = '' + sim.filename_prefix = "" self.assertEqual(sim.get_filename_prefix(), "") sim.filename_prefix = False with self.assertRaises(TypeError): @@ -506,16 +658,32 @@ def test_geometry_center(self): fcen = 0.15 df = 0.1 - sources = [mp.Source(src=mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, - center=mp.Vector3())] - geometry = [mp.Block(center=mp.Vector3(), size=mp.Vector3(mp.inf, 3, mp.inf), - material=mp.Medium(epsilon=12))] + sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=df), + component=mp.Ez, + center=mp.Vector3(), + ) + ] + geometry = [ + mp.Block( + center=mp.Vector3(), + size=mp.Vector3(mp.inf, 3, mp.inf), + material=mp.Medium(epsilon=12), + ) + ] def print_field(sim): result.append(sim.get_field_point(mp.Ez, mp.Vector3(2, -1))) - sim = mp.Simulation(resolution=resolution, cell_size=cell_size, boundary_layers=pml, - sources=sources, geometry=geometry, geometry_center=center) + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml, + sources=sources, + geometry=geometry, + geometry_center=center, + ) sim.run(mp.at_end(print_field), until=50) self.assertAlmostEqual(result[0], -0.0599602798684155) @@ -529,29 +697,50 @@ def test_timing_data(self): fcen = 0.15 df = 0.1 - sources = [mp.Source(src=mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, - center=mp.Vector3())] - geometry = [mp.Block(center=mp.Vector3(), size=mp.Vector3(mp.inf, 3, mp.inf), - material=mp.Medium(epsilon=12))] + sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=df), + component=mp.Ez, + center=mp.Vector3(), + ) + ] + geometry = [ + mp.Block( + center=mp.Vector3(), + size=mp.Vector3(mp.inf, 3, mp.inf), + material=mp.Medium(epsilon=12), + ) + ] - sim = mp.Simulation(resolution=resolution, cell_size=cell_size, boundary_layers=pml, - sources=sources, geometry=geometry, geometry_center=center) + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=pml, + sources=sources, + geometry=geometry, + geometry_center=center, + ) sim.run(until=50) timing_data = sim.get_timing_data() # Non-exhaustive collection of steps where some time should be spent: - EXPECTED_NONZERO_TIMESINKS = (mp.Stepping, mp.Boundaries, - mp.FieldUpdateB, mp.FieldUpdateH, - mp.FieldUpdateD, mp.FieldUpdateE) + EXPECTED_NONZERO_TIMESINKS = ( + mp.Stepping, + mp.Boundaries, + mp.FieldUpdateB, + mp.FieldUpdateH, + mp.FieldUpdateD, + mp.FieldUpdateE, + ) # Due to the problem setup, no time should be spent on these steps: EXPECTED_ZERO_TIMESINKS = (mp.MPBTime, mp.GetFarfieldsTime) - for sink in itertools.chain(EXPECTED_NONZERO_TIMESINKS, - EXPECTED_ZERO_TIMESINKS): + for sink in itertools.chain( + EXPECTED_NONZERO_TIMESINKS, EXPECTED_ZERO_TIMESINKS + ): self.assertIn(sink, timing_data.keys()) self.assertEqual(len(timing_data[sink]), mp.count_processors()) - np.testing.assert_array_equal(sim.time_spent_on(sink), - timing_data[sink]) + np.testing.assert_array_equal(sim.time_spent_on(sink), timing_data[sink]) for sink in EXPECTED_NONZERO_TIMESINKS: for t in timing_data[sink]: @@ -563,34 +752,40 @@ def test_timing_data(self): self.assertGreaterEqual( sum(timing_data[mp.Stepping]), - sum(timing_data[mp.FieldUpdateB]) + - sum(timing_data[mp.FieldUpdateH]) + - sum(timing_data[mp.FieldUpdateD]) + - sum(timing_data[mp.FieldUpdateE]) + - sum(timing_data[mp.FourierTransforming])) + sum(timing_data[mp.FieldUpdateB]) + + sum(timing_data[mp.FieldUpdateH]) + + sum(timing_data[mp.FieldUpdateD]) + + sum(timing_data[mp.FieldUpdateE]) + + sum(timing_data[mp.FourierTransforming]), + ) def test_source_slice(self): sim = self.init_simple_simulation() sim.run(until=1) - vol1d = mp.Volume(center=mp.Vector3(0.1234,0), size=mp.Vector3(0,5.07)) + vol1d = mp.Volume(center=mp.Vector3(0.1234, 0), size=mp.Vector3(0, 5.07)) source_slice = sim.get_source(mp.Ez, vol=vol1d) - x,y,z,w = sim.get_array_metadata(vol=vol1d) + x, y, z, w = sim.get_array_metadata(vol=vol1d) self.assertEqual(source_slice.shape, w.shape) self.assertEqual(np.sum(source_slice), 0) - vol2d = mp.Volume(center=mp.Vector3(-0.541,0.791), size=mp.Vector3(3.5,2.8)) + vol2d = mp.Volume(center=mp.Vector3(-0.541, 0.791), size=mp.Vector3(3.5, 2.8)) source_slice = sim.get_source(mp.Ez, vol=vol2d) - x,y,z,w = sim.get_array_metadata(vol=vol2d) + x, y, z, w = sim.get_array_metadata(vol=vol2d) self.assertEqual(source_slice.shape, w.shape) self.assertNotEqual(np.sum(source_slice), 0) def test_has_mu(self): - def _check(med, expected, default=mp.Medium()): - geometry = [mp.Block(center=mp.Vector3(), size=mp.Vector3(1, 1), material=med)] - sim = mp.Simulation(cell_size=mp.Vector3(5, 5), resolution=10, geometry=geometry, - default_material=default) + geometry = [ + mp.Block(center=mp.Vector3(), size=mp.Vector3(1, 1), material=med) + ] + sim = mp.Simulation( + cell_size=mp.Vector3(5, 5), + resolution=10, + geometry=geometry, + default_material=default, + ) result = sim.has_mu() if expected: @@ -598,7 +793,7 @@ def _check(med, expected, default=mp.Medium()): else: self.assertFalse(result) - print("Estimated memory usage: {}".format(sim.get_estimated_memory_usage())) + print(f"Estimated memory usage: {sim.get_estimated_memory_usage()}") def mat_func(p): return mp.Medium() @@ -633,5 +828,6 @@ def test_iterable_as_v3(self): self.assertAlmostEqual(pt1, expected) self.assertAlmostEqual(pt2, expected) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_source.py b/python/tests/test_source.py index ce397adcc..adecb5a38 100644 --- a/python/tests/test_source.py +++ b/python/tests/test_source.py @@ -1,18 +1,17 @@ import math import os import unittest -import numpy as np -import meep as mp +import numpy as np from meep.geom import Cylinder, Vector3 -from meep.source import EigenModeSource, ContinuousSource, GaussianSource +from meep.source import ContinuousSource, EigenModeSource, GaussianSource +import meep as mp -data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'data')) +data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "data")) class TestEigenModeSource(unittest.TestCase): - def test_eig_lattice_defaults(self): src = ContinuousSource(5.0) center = Vector3() @@ -23,19 +22,20 @@ def test_eig_lattice_defaults(self): elc = Vector3(1, 1, 1) els = Vector3(1, 1, 1) - custom_lattice = EigenModeSource(src, center, eig_lattice_center=elc, eig_lattice_size=els) + custom_lattice = EigenModeSource( + src, center, eig_lattice_center=elc, eig_lattice_size=els + ) self.assertEqual(custom_lattice.eig_lattice_size, els) self.assertEqual(custom_lattice.eig_lattice_center, elc) class TestSourceTime(unittest.TestCase): - def test_source_wavelength(self): g_src = GaussianSource(wavelength=10) c_src = ContinuousSource(wavelength=10) - self.assertAlmostEqual(1. / 10., g_src.frequency) - self.assertAlmostEqual(1. / 10., c_src.frequency) + self.assertAlmostEqual(1.0 / 10.0, g_src.frequency) + self.assertAlmostEqual(1.0 / 10.0, c_src.frequency) def test_source_frequency(self): g_src = GaussianSource(10) @@ -52,9 +52,7 @@ def test_source_frequency(self): class TestSourceTypemaps(unittest.TestCase): - def setUp(self): - def dummy_eps(v): return 1.0 @@ -88,7 +86,7 @@ def test_custom_source(self): geometry = [ mp.Cylinder(r + w, material=mp.Medium(index=n)), - mp.Cylinder(r, material=mp.air) + mp.Cylinder(r, material=mp.air), ] boundary_layers = [mp.PML(dpml)] @@ -98,27 +96,34 @@ def test_custom_source(self): # Bump function def my_src_func(t): - if t > 0 and t < 2: - return math.exp(-1 / (1 - ((t - 1)**2))) - return 0j - - sources = [mp.Source(src=mp.CustomSource(src_func=my_src_func, end_time=100), - component=mp.Ez, center=mp.Vector3(r + 0.1))] + return math.exp(-1 / (1 - ((t - 1) ** 2))) if t > 0 and t < 2 else 0j + + sources = [ + mp.Source( + src=mp.CustomSource(src_func=my_src_func, end_time=100), + component=mp.Ez, + center=mp.Vector3(r + 0.1), + ) + ] symmetries = [mp.Mirror(mp.Y)] - sim = mp.Simulation(cell_size=cell, - resolution=resolution, - geometry=geometry, - boundary_layers=boundary_layers, - sources=sources, - symmetries=symmetries) + sim = mp.Simulation( + cell_size=cell, + resolution=resolution, + geometry=geometry, + boundary_layers=boundary_layers, + sources=sources, + symmetries=symmetries, + ) h = mp.Harminv(mp.Ez, mp.Vector3(r + 0.1), fcen, df) sim.run(mp.after_sources(h), until_after_sources=200) fp = sim.get_field_point(mp.Ez, mp.Vector3(1)) - self.assertAlmostEqual(fp, -0.021997617628500023 + 0j, 5 if mp.is_single_precision() else 7) + self.assertAlmostEqual( + fp, -0.021997617628500023 + 0j, 5 if mp.is_single_precision() else 7 + ) def amp_fun(p): @@ -126,7 +131,6 @@ def amp_fun(p): class TestAmpFileFunc(unittest.TestCase): - def create_h5data(self): N = 100 M = 200 @@ -147,18 +151,39 @@ def init_and_run(self, test_type): cen = mp.Vector3(0.1, 0.2) sz = mp.Vector3(0.3, 0.2) - amp_file = os.path.join(data_dir, 'amp_func_file') - amp_file += ':amp_data' - - if test_type == 'file': - sources = [mp.Source(mp.ContinuousSource(fcen, fwidth=df), component=mp.Ez, center=cen, - size=sz, amp_func_file=amp_file)] - elif test_type == 'func': - sources = [mp.Source(mp.ContinuousSource(fcen, fwidth=df), component=mp.Ez, center=cen, - size=sz, amp_func=amp_fun)] - elif test_type == 'arr': - sources = [mp.Source(mp.ContinuousSource(fcen, fwidth=df), component=mp.Ez, center=cen, - size=sz, amp_data=self.amp_data)] + amp_file = os.path.join(data_dir, "amp_func_file") + amp_file += ":amp_data" + + if test_type == "file": + sources = [ + mp.Source( + mp.ContinuousSource(fcen, fwidth=df), + component=mp.Ez, + center=cen, + size=sz, + amp_func_file=amp_file, + ) + ] + elif test_type == "func": + sources = [ + mp.Source( + mp.ContinuousSource(fcen, fwidth=df), + component=mp.Ez, + center=cen, + size=sz, + amp_func=amp_fun, + ) + ] + elif test_type == "arr": + sources = [ + mp.Source( + mp.ContinuousSource(fcen, fwidth=df), + component=mp.Ez, + center=cen, + size=sz, + amp_data=self.amp_data, + ) + ] sim = mp.Simulation(cell_size=cell, resolution=resolution, sources=sources) sim.run(until=200) @@ -166,15 +191,15 @@ def init_and_run(self, test_type): def test_amp_file_func(self): self.create_h5data() - field_point_amp_file = self.init_and_run(test_type='file') - field_point_amp_func = self.init_and_run(test_type='func') - field_point_amp_arr = self.init_and_run(test_type='arr') + field_point_amp_file = self.init_and_run(test_type="file") + field_point_amp_func = self.init_and_run(test_type="func") + field_point_amp_arr = self.init_and_run(test_type="arr") self.assertAlmostEqual(field_point_amp_file, field_point_amp_func, places=4) self.assertAlmostEqual(field_point_amp_arr, field_point_amp_func, places=4) -class TestCustomEigenModeSource(unittest.TestCase): +class TestCustomEigenModeSource(unittest.TestCase): def test_custom_em_source(self): resolution = 20 @@ -183,43 +208,56 @@ def test_custom_em_source(self): sx = 40 sy = 12 - cell_size = mp.Vector3(sx+2*dpml,sy) + cell_size = mp.Vector3(sx + 2 * dpml, sy) v0 = 0.15 # pulse center frequency - a = 0.2*v0 # Gaussian envelope half-width + a = 0.2 * v0 # Gaussian envelope half-width b = -0.1 # linear chirp rate (positive: up-chirp, negative: down-chirp) - t0 = 15 # peak time + t0 = 15 # peak time - chirp = lambda t: np.exp(1j*2*np.pi*v0*(t-t0)) * np.exp(-a*(t-t0)**2+1j*b*(t-t0)**2) + chirp = lambda t: np.exp(1j * 2 * np.pi * v0 * (t - t0)) * np.exp( + -a * (t - t0) ** 2 + 1j * b * (t - t0) ** 2 + ) - geometry = [mp.Block(center=mp.Vector3(0,0,0),size=mp.Vector3(mp.inf,1,mp.inf),material=mp.Medium(epsilon=12))] + geometry = [ + mp.Block( + center=mp.Vector3(0, 0, 0), + size=mp.Vector3(mp.inf, 1, mp.inf), + material=mp.Medium(epsilon=12), + ) + ] - kx = 0.4 # initial guess for wavevector in x-direction of eigenmode + kx = 0.4 # initial guess for wavevector in x-direction of eigenmode kpoint = mp.Vector3(kx) bnum = 1 - sources = [mp.EigenModeSource(src=mp.CustomSource(src_func=chirp,center_frequency=v0), - center=mp.Vector3(-0.5*sx + dpml + 1), - size=mp.Vector3(y=sy), - eig_kpoint=kpoint, - eig_band=bnum, - eig_parity=mp.EVEN_Y+mp.ODD_Z, - eig_match_freq=True - )] - - sim = mp.Simulation(cell_size=cell_size, - boundary_layers=pml_layers, - resolution=resolution, - k_point=mp.Vector3(), - sources=sources, - geometry=geometry, - symmetries=[mp.Mirror(mp.Y)]) - - t = np.linspace(0,50,1000) - sim.run(until=t0+50) + sources = [ + mp.EigenModeSource( + src=mp.CustomSource(src_func=chirp, center_frequency=v0), + center=mp.Vector3(-0.5 * sx + dpml + 1), + size=mp.Vector3(y=sy), + eig_kpoint=kpoint, + eig_band=bnum, + eig_parity=mp.EVEN_Y + mp.ODD_Z, + eig_match_freq=True, + ) + ] + + sim = mp.Simulation( + cell_size=cell_size, + boundary_layers=pml_layers, + resolution=resolution, + k_point=mp.Vector3(), + sources=sources, + geometry=geometry, + symmetries=[mp.Mirror(mp.Y)], + ) + + t = np.linspace(0, 50, 1000) + sim.run(until=t0 + 50) # For now, just check to make sure the simulation can run and the fields don't blow up. -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_special_kz.py b/python/tests/test_special_kz.py index 8c0e051b2..08ae722d4 100644 --- a/python/tests/test_special_kz.py +++ b/python/tests/test_special_kz.py @@ -1,71 +1,89 @@ -import unittest -import parameterized -import meep as mp import cmath import math +import unittest from time import time +import parameterized + +import meep as mp -class TestSpecialKz(unittest.TestCase): +class TestSpecialKz(unittest.TestCase): def refl_planar(self, theta, kz_2d): resolution = 100 # pixels/um dpml = 1.0 - sx = 3.0 + 2*dpml - sy = 1/resolution - cell_size = mp.Vector3(sx,sy) - pml_layers = [mp.PML(dpml,direction=mp.X)] + sx = 3.0 + 2 * dpml + sy = 1 / resolution + cell_size = mp.Vector3(sx, sy) + pml_layers = [mp.PML(dpml, direction=mp.X)] fcen = 1.0 # plane of incidence is XZ - k_point = mp.Vector3(1,0,0).rotate(mp.Vector3(0,1,0),theta).scale(fcen) - - sources = [mp.Source(mp.GaussianSource(fcen,fwidth=0.2*fcen), - component=mp.Ez, # P-polarization - center=mp.Vector3(-0.5*sx+dpml), - size=mp.Vector3(y=sy))] - - sim = mp.Simulation(cell_size=cell_size, - boundary_layers=pml_layers, - sources=sources, - k_point=k_point, - kz_2d=kz_2d, - resolution=resolution) - - refl_fr = mp.FluxRegion(center=mp.Vector3(-0.25*sx), - size=mp.Vector3(y=sy)) - refl = sim.add_flux(fcen,0,1,refl_fr) - - sim.run(until_after_sources=mp.stop_when_fields_decayed(50,mp.Ez,mp.Vector3(),1e-9)) + k_point = mp.Vector3(1, 0, 0).rotate(mp.Vector3(0, 1, 0), theta).scale(fcen) + + sources = [ + mp.Source( + mp.GaussianSource(fcen, fwidth=0.2 * fcen), + component=mp.Ez, # P-polarization + center=mp.Vector3(-0.5 * sx + dpml), + size=mp.Vector3(y=sy), + ) + ] + + sim = mp.Simulation( + cell_size=cell_size, + boundary_layers=pml_layers, + sources=sources, + k_point=k_point, + kz_2d=kz_2d, + resolution=resolution, + ) + + refl_fr = mp.FluxRegion(center=mp.Vector3(-0.25 * sx), size=mp.Vector3(y=sy)) + refl = sim.add_flux(fcen, 0, 1, refl_fr) + + sim.run( + until_after_sources=mp.stop_when_fields_decayed( + 50, mp.Ez, mp.Vector3(), 1e-9 + ) + ) empty_flux = mp.get_fluxes(refl) empty_data = sim.get_flux_data(refl) sim.reset_meep() - geometry = [mp.Block(material=mp.Medium(index=3.5), - size=mp.Vector3(0.5*sx,mp.inf,mp.inf), - center=mp.Vector3(0.25*sx))] - - sim = mp.Simulation(cell_size=cell_size, - boundary_layers=pml_layers, - geometry=geometry, - sources=sources, - k_point=k_point, - kz_2d=kz_2d, - resolution=resolution) - - refl = sim.add_flux(fcen,0,1,refl_fr) - sim.load_minus_flux_data(refl,empty_data) - - sim.run(until_after_sources=mp.stop_when_fields_decayed(50,mp.Ez,mp.Vector3(),1e-9)) + geometry = [ + mp.Block( + material=mp.Medium(index=3.5), + size=mp.Vector3(0.5 * sx, mp.inf, mp.inf), + center=mp.Vector3(0.25 * sx), + ) + ] + + sim = mp.Simulation( + cell_size=cell_size, + boundary_layers=pml_layers, + geometry=geometry, + sources=sources, + k_point=k_point, + kz_2d=kz_2d, + resolution=resolution, + ) + + refl = sim.add_flux(fcen, 0, 1, refl_fr) + sim.load_minus_flux_data(refl, empty_data) + + sim.run( + until_after_sources=mp.stop_when_fields_decayed( + 50, mp.Ez, mp.Vector3(), 1e-9 + ) + ) refl_flux = mp.get_fluxes(refl) - Rmeep = -refl_flux[0]/empty_flux[0] - return Rmeep - + return -refl_flux[0] / empty_flux[0] def test_special_kz(self): n1 = 1 @@ -73,12 +91,17 @@ def test_special_kz(self): # compute angle of refracted planewave in medium n2 # for incident planewave in medium n1 at angle theta_in - theta_out = lambda theta_in: math.asin(n1*math.sin(theta_in)/n2) + theta_out = lambda theta_in: math.asin(n1 * math.sin(theta_in) / n2) # compute Fresnel reflectance for P-polarization in medium n2 # for incident planewave in medium n1 at angle theta_in - Rfresnel = lambda theta_in: math.fabs((n1*math.cos(theta_out(theta_in))-n2*math.cos(theta_in)) - / (n1*math.cos(theta_out(theta_in))+n2*math.cos(theta_in)))**2 + Rfresnel = ( + lambda theta_in: math.fabs( + (n1 * math.cos(theta_out(theta_in)) - n2 * math.cos(theta_in)) + / (n1 * math.cos(theta_out(theta_in)) + n2 * math.cos(theta_in)) + ) + ** 2 + ) # angle of incident planewave; clockwise (CW) about Y axis, 0 degrees along +X axis theta = math.radians(23) @@ -93,74 +116,79 @@ def test_special_kz(self): Rfres = Rfresnel(theta) - self.assertAlmostEqual(Rmeep_complex,Rfres,places=2) - self.assertAlmostEqual(Rmeep_real_imag,Rfres,places=2) - + self.assertAlmostEqual(Rmeep_complex, Rfres, places=2) + self.assertAlmostEqual(Rmeep_real_imag, Rfres, places=2) + # the real/imag algorithm should be faster, but on CI machines performance is too variable # for this to reliably hold - # self.assertLess(t_real_imag,t_complex) - + # self.assertLess(t_real_imag,t_complex) - @parameterized.parameterized.expand([("complex",),("real/imag",)]) + @parameterized.parameterized.expand([("complex",), ("real/imag",)]) def test_eigsrc_kz(self, kz_2d): - resolution = 30 # pixels/um + resolution = 30 # pixels/um - cell_size = mp.Vector3(14,14) + cell_size = mp.Vector3(14, 14) pml_layers = [mp.PML(thickness=2)] - geometry = [mp.Block(center=mp.Vector3(), - size=mp.Vector3(mp.inf,1,mp.inf), - material=mp.Medium(epsilon=12))] + geometry = [ + mp.Block( + center=mp.Vector3(), + size=mp.Vector3(mp.inf, 1, mp.inf), + material=mp.Medium(epsilon=12), + ) + ] fsrc = 0.3 # frequency of eigenmode or constant-amplitude source - bnum = 1 # band number of eigenmode - kz = 0.2 # fixed out-of-plane wavevector component - - sources = [mp.EigenModeSource(src=mp.GaussianSource(fsrc,fwidth=0.2*fsrc), - center=mp.Vector3(), - size=mp.Vector3(y=14), - eig_band=bnum, - eig_parity=mp.EVEN_Y, - eig_match_freq=True)] - - sim = mp.Simulation(cell_size=cell_size, - resolution=resolution, - boundary_layers=pml_layers, - sources=sources, - geometry=geometry, - symmetries=[mp.Mirror(mp.Y)], - k_point=mp.Vector3(z=kz), - kz_2d=kz_2d) - - tran = sim.add_flux(fsrc, - 0, - 1, - mp.FluxRegion(center=mp.Vector3(x=5), - size=mp.Vector3(y=14))) + bnum = 1 # band number of eigenmode + kz = 0.2 # fixed out-of-plane wavevector component + + sources = [ + mp.EigenModeSource( + src=mp.GaussianSource(fsrc, fwidth=0.2 * fsrc), + center=mp.Vector3(), + size=mp.Vector3(y=14), + eig_band=bnum, + eig_parity=mp.EVEN_Y, + eig_match_freq=True, + ) + ] + + sim = mp.Simulation( + cell_size=cell_size, + resolution=resolution, + boundary_layers=pml_layers, + sources=sources, + geometry=geometry, + symmetries=[mp.Mirror(mp.Y)], + k_point=mp.Vector3(z=kz), + kz_2d=kz_2d, + ) + + tran = sim.add_flux( + fsrc, 0, 1, mp.FluxRegion(center=mp.Vector3(x=5), size=mp.Vector3(y=14)) + ) sim.run(until_after_sources=50) - res = sim.get_eigenmode_coefficients(tran, - [1,2], - eig_parity=mp.EVEN_Y) + res = sim.get_eigenmode_coefficients(tran, [1, 2], eig_parity=mp.EVEN_Y) total_flux = mp.get_fluxes(tran)[0] - mode1_flux = abs(res.alpha[0,0,0])**2 - mode2_flux = abs(res.alpha[1,0,0])**2 + mode1_flux = abs(res.alpha[0, 0, 0]) ** 2 + mode2_flux = abs(res.alpha[1, 0, 0]) ** 2 mode1_frac = 0.99 - self.assertGreater(mode1_flux/total_flux, mode1_frac) - self.assertLess(mode2_flux/total_flux, 1-mode1_frac) + self.assertGreater(mode1_flux / total_flux, mode1_frac) + self.assertLess(mode2_flux / total_flux, 1 - mode1_frac) d = 3.5 - ez1 = sim.get_field_point(mp.Ez, mp.Vector3(2.3,-5.7,4.8)) - ez2 = sim.get_field_point(mp.Ez, mp.Vector3(2.3,-5.7,4.8+d)) - ratio_ez = ez2/ez1 - phase_diff = cmath.exp(1j*2*cmath.pi*kz*d) - self.assertAlmostEqual(ratio_ez.real,phase_diff.real,places=10) - self.assertAlmostEqual(ratio_ez.imag,phase_diff.imag,places=10) + ez1 = sim.get_field_point(mp.Ez, mp.Vector3(2.3, -5.7, 4.8)) + ez2 = sim.get_field_point(mp.Ez, mp.Vector3(2.3, -5.7, 4.8 + d)) + ratio_ez = ez2 / ez1 + phase_diff = cmath.exp(1j * 2 * cmath.pi * kz * d) + self.assertAlmostEqual(ratio_ez.real, phase_diff.real, places=10) + self.assertAlmostEqual(ratio_ez.imag, phase_diff.imag, places=10) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_timing_measurements.py b/python/tests/test_timing_measurements.py index 93ec0ca02..e748cbbab 100644 --- a/python/tests/test_timing_measurements.py +++ b/python/tests/test_timing_measurements.py @@ -6,7 +6,6 @@ class TimingTest(unittest.TestCase): - def test_timing_measurements(self): """Tests that timing measurements have expected names and can be updated.""" sim = mp.Simulation( @@ -22,11 +21,15 @@ def test_timing_measurements(self): set(timing_measurements.measurement_names), set(timing.TIMING_MEASUREMENT_IDS.keys()), ) - self.assertTrue(timing_measurements.elapsed_time > 0 or timing_measurements.elapsed_time == -1) + self.assertTrue( + timing_measurements.elapsed_time > 0 + or timing_measurements.elapsed_time == -1 + ) self.assertGreater(timing_measurements.num_time_steps, 0) self.assertGreaterEqual(timing_measurements.comm_efficiency, 0) self.assertGreaterEqual(timing_measurements.comm_efficiency_one_to_one, 0) self.assertGreaterEqual(timing_measurements.comm_efficiency_all_to_all, 0) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_user_defined_material.py b/python/tests/test_user_defined_material.py index 5a363e4dc..54dc746f7 100644 --- a/python/tests/test_user_defined_material.py +++ b/python/tests/test_user_defined_material.py @@ -1,4 +1,5 @@ import unittest + import meep as mp @@ -39,22 +40,28 @@ def my_epsilon_func(p): class TestUserMaterials(unittest.TestCase): - def setUp(self): self.resolution = 10 self.cell = mp.Vector3(10, 10) self.symmetries = [mp.Mirror(mp.X), mp.Mirror(mp.Y)] self.boundary_layers = [mp.PML(1.0)] - self.sources = [mp.Source(src=mp.GaussianSource(0.2, fwidth=0.1), - component=mp.Ez, center=mp.Vector3())] + self.sources = [ + mp.Source( + src=mp.GaussianSource(0.2, fwidth=0.1), + component=mp.Ez, + center=mp.Vector3(), + ) + ] def test_user_material_func(self): - sim = mp.Simulation(cell_size=self.cell, - resolution=self.resolution, - symmetries=self.symmetries, - boundary_layers=self.boundary_layers, - sources=self.sources, - material_function=my_material_func) + sim = mp.Simulation( + cell_size=self.cell, + resolution=self.resolution, + symmetries=self.symmetries, + boundary_layers=self.boundary_layers, + sources=self.sources, + material_function=my_material_func, + ) sim.run(until=200) fp = sim.get_field_point(mp.Ez, mp.Vector3(x=1)) @@ -63,12 +70,14 @@ def test_user_material_func(self): self.assertAlmostEqual(fp, 4.816403627871773e-4, places=places) def test_epsilon_func(self): - sim = mp.Simulation(cell_size=self.cell, - resolution=self.resolution, - symmetries=self.symmetries, - boundary_layers=self.boundary_layers, - sources=self.sources, - epsilon_func=my_epsilon_func) + sim = mp.Simulation( + cell_size=self.cell, + resolution=self.resolution, + symmetries=self.symmetries, + boundary_layers=self.boundary_layers, + sources=self.sources, + epsilon_func=my_epsilon_func, + ) sim.run(until=100) fp = sim.get_field_point(mp.Ez, mp.Vector3(x=1)) @@ -78,12 +87,14 @@ def test_epsilon_func(self): def test_geometric_obj_with_user_material(self): geometry = [mp.Cylinder(5, material=my_material_func)] - sim = mp.Simulation(cell_size=self.cell, - resolution=self.resolution, - symmetries=self.symmetries, - geometry=geometry, - boundary_layers=self.boundary_layers, - sources=self.sources) + sim = mp.Simulation( + cell_size=self.cell, + resolution=self.resolution, + symmetries=self.symmetries, + geometry=geometry, + boundary_layers=self.boundary_layers, + sources=self.sources, + ) sim.run(until=200) fp = sim.get_field_point(mp.Ez, mp.Vector3(x=1)) @@ -93,16 +104,19 @@ def test_geometric_obj_with_user_material(self): def test_geometric_obj_with_epsilon_func(self): geometry = [mp.Cylinder(5, epsilon_func=my_epsilon_func)] - sim = mp.Simulation(cell_size=self.cell, - resolution=self.resolution, - symmetries=self.symmetries, - geometry=geometry, - boundary_layers=self.boundary_layers, - sources=self.sources) + sim = mp.Simulation( + cell_size=self.cell, + resolution=self.resolution, + symmetries=self.symmetries, + geometry=geometry, + boundary_layers=self.boundary_layers, + sources=self.sources, + ) sim.run(until=100) fp = sim.get_field_point(mp.Ez, mp.Vector3(x=1)) self.assertAlmostEqual(fp, -7.895783750440999e-4) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_verbosity_mgr.py b/python/tests/test_verbosity_mgr.py index f36688f98..da4fd5b92 100644 --- a/python/tests/test_verbosity_mgr.py +++ b/python/tests/test_verbosity_mgr.py @@ -1,31 +1,31 @@ import unittest + from meep.verbosity_mgr import Verbosity class VerbosityForTest(Verbosity): - """Allows for testing of Verbosity without interfering with the singleton.""" - _instance = None + """Allows for testing of Verbosity without interfering with the singleton.""" + + _instance = None class MyCvar: - def __init__(self): self.verbosity = 1 + def __init__(self): + self.verbosity = 1 class TestVerbosity(unittest.TestCase): - def setUp(self): VerbosityForTest.reset() - self.v1 = VerbosityForTest(name='foo') - self.v2 = VerbosityForTest(MyCvar(), 'bar') - + self.v1 = VerbosityForTest(name="foo") + self.v2 = VerbosityForTest(MyCvar(), "bar") def test_identity(self): # Ensure each verbosity is really the same singleton instance v1, v2 = self.v1, self.v2 self.assertTrue(v1 is v2) self.assertEqual(id(v1), id(v2)) - self.assertEqual(v1.get_all(), [1,1]) - + self.assertEqual(v1.get_all(), [1, 1]) def test_initial_value(self): v1, v2 = self.v1, self.v2 @@ -33,7 +33,6 @@ def test_initial_value(self): v2.set(2) self.assertEqual(v1.get(), 2) - def test_properties(self): v1, v2 = self.v1, self.v2 self.assertEqual(v1.foo, 1) @@ -43,7 +42,6 @@ def test_properties(self): self.assertEqual(v2.foo, 2) self.assertEqual(v2.bar, 3) - def test_operators(self): v1, v2 = self.v1, self.v2 @@ -72,6 +70,5 @@ def test_out_of_range(self): v2.bar = -5 - -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/python/tests/test_visualization.py b/python/tests/test_visualization.py index 064e50635..627686b0e 100644 --- a/python/tests/test_visualization.py +++ b/python/tests/test_visualization.py @@ -3,116 +3,179 @@ # boundary conditions. Checks for subdomain plots. # # Also tests the animation run function, mp4 output, jshtml output, and git output. - +import os import unittest from subprocess import call -import meep as mp +import matplotlib import numpy as np -import os + +import meep as mp # Make sure we have matplotlib installed -import matplotlib -matplotlib.use('agg') # Set backend for consistency and to pull pixels quickly -from matplotlib import pyplot as plt + +matplotlib.use("agg") # Set backend for consistency and to pull pixels quickly import io +from matplotlib import pyplot as plt + + def hash_figure(fig): buf = io.BytesIO() - fig.savefig(buf, format='raw') + fig.savefig(buf, format="raw") buf.seek(0) data = np.frombuffer(buf.getvalue(), dtype=np.uint8) return np.sum((data > np.mean(data)) + data) + def setup_sim(zDim=0): - cell = mp.Vector3(16,8,zDim) + cell = mp.Vector3(16, 8, zDim) # A simple waveguide - geometry = [mp.Block(mp.Vector3(mp.inf,1,1), - center=mp.Vector3(), - material=mp.Medium(epsilon=12))] + geometry = [ + mp.Block( + mp.Vector3(mp.inf, 1, 1), + center=mp.Vector3(), + material=mp.Medium(epsilon=12), + ) + ] # Add point sources - sources = [mp.Source(mp.ContinuousSource(frequency=0.15), - component=mp.Ez, - center=mp.Vector3(-5,0), - size=mp.Vector3(0,0,2)), - mp.Source(mp.ContinuousSource(frequency=0.15), - component=mp.Ez, - center=mp.Vector3(0,2), - size=mp.Vector3(0,0,2)), - mp.Source(mp.ContinuousSource(frequency=0.15), - component=mp.Ez, - center=mp.Vector3(-1,1), - size=mp.Vector3(0,0,2)), - mp.Source(mp.ContinuousSource(frequency=0.15), - component=mp.Ez, - center=mp.Vector3(-2,-2,1), - size=mp.Vector3(0,0,0)), - ] + sources = [ + mp.Source( + mp.ContinuousSource(frequency=0.15), + component=mp.Ez, + center=mp.Vector3(-5, 0), + size=mp.Vector3(0, 0, 2), + ), + mp.Source( + mp.ContinuousSource(frequency=0.15), + component=mp.Ez, + center=mp.Vector3(0, 2), + size=mp.Vector3(0, 0, 2), + ), + mp.Source( + mp.ContinuousSource(frequency=0.15), + component=mp.Ez, + center=mp.Vector3(-1, 1), + size=mp.Vector3(0, 0, 2), + ), + mp.Source( + mp.ContinuousSource(frequency=0.15), + component=mp.Ez, + center=mp.Vector3(-2, -2, 1), + size=mp.Vector3(0, 0, 0), + ), + ] # Add line sources - sources += [mp.Source(mp.ContinuousSource(frequency=0.15), - component=mp.Ez, - size=mp.Vector3(0,2,2), - center=mp.Vector3(-6,0)), - mp.Source(mp.ContinuousSource(frequency=0.15), - component=mp.Ez, - size=mp.Vector3(0,2,2), - center=mp.Vector3(0,1))] + sources += [ + mp.Source( + mp.ContinuousSource(frequency=0.15), + component=mp.Ez, + size=mp.Vector3(0, 2, 2), + center=mp.Vector3(-6, 0), + ), + mp.Source( + mp.ContinuousSource(frequency=0.15), + component=mp.Ez, + size=mp.Vector3(0, 2, 2), + center=mp.Vector3(0, 1), + ), + ] # Add plane sources - sources += [mp.Source(mp.ContinuousSource(frequency=0.15), - component=mp.Ez, - size=mp.Vector3(2,2,2), - center=mp.Vector3(-3,0)), - mp.Source(mp.ContinuousSource(frequency=0.15), - component=mp.Ez, - size=mp.Vector3(2,2,2), - center=mp.Vector3(0,-2))] + sources += [ + mp.Source( + mp.ContinuousSource(frequency=0.15), + component=mp.Ez, + size=mp.Vector3(2, 2, 2), + center=mp.Vector3(-3, 0), + ), + mp.Source( + mp.ContinuousSource(frequency=0.15), + component=mp.Ez, + size=mp.Vector3(2, 2, 2), + center=mp.Vector3(0, -2), + ), + ] # Different pml layers - pml_layers = [mp.PML(2.0,mp.X),mp.PML(1.0,mp.Y,mp.Low),mp.PML(1.5,mp.Y,mp.High)] + pml_layers = [ + mp.PML(2.0, mp.X), + mp.PML(1.0, mp.Y, mp.Low), + mp.PML(1.5, mp.Y, mp.High), + ] if zDim > 0: - pml_layers += [mp.PML(1.5,mp.Z)] + pml_layers += [mp.PML(1.5, mp.Z)] resolution = 10 - sim = mp.Simulation(cell_size=cell, - boundary_layers=pml_layers, - geometry=geometry, - sources=sources, - resolution=resolution) + sim = mp.Simulation( + cell_size=cell, + boundary_layers=pml_layers, + geometry=geometry, + sources=sources, + resolution=resolution, + ) # Line monitor - sim.add_flux(1,0,1,mp.FluxRegion(center=mp.Vector3(5,0,0),size=mp.Vector3(0,4,4), direction=mp.X)) + sim.add_flux( + 1, + 0, + 1, + mp.FluxRegion( + center=mp.Vector3(5, 0, 0), size=mp.Vector3(0, 4, 4), direction=mp.X + ), + ) # Plane monitor - sim.add_flux(1,0,1,mp.FluxRegion(center=mp.Vector3(2,0,0),size=mp.Vector3(4,4,4), direction=mp.X)) + sim.add_flux( + 1, + 0, + 1, + mp.FluxRegion( + center=mp.Vector3(2, 0, 0), size=mp.Vector3(4, 4, 4), direction=mp.X + ), + ) return sim + def view_sim(): sim = setup_sim(8) - xy0 = mp.Volume(center=mp.Vector3(0,0,0), size=mp.Vector3(sim.cell_size.x,sim.cell_size.y,0)) - xy1 = mp.Volume(center=mp.Vector3(0,0,1), size=mp.Vector3(sim.cell_size.x,sim.cell_size.y,0)) - yz0 = mp.Volume(center=mp.Vector3(0,0,0), size=mp.Vector3(0,sim.cell_size.y,sim.cell_size.z)) - yz1 = mp.Volume(center=mp.Vector3(1,0,0), size=mp.Vector3(0,sim.cell_size.y,sim.cell_size.z)) - xz0 = mp.Volume(center=mp.Vector3(0,0,0), size=mp.Vector3(sim.cell_size.x,0,sim.cell_size.z)) - xz1 = mp.Volume(center=mp.Vector3(0,1,0), size=mp.Vector3(sim.cell_size.x,0,sim.cell_size.z)) - vols = [xy0,xy1,yz0,yz1,xz0,xz1] - titles = ['xy0','xy1','yz0','yz1','xz0','xz1'] - xlabel = ['x','x','y','y','x','x'] - ylabel = ['y','y','z','z','z','z'] + xy0 = mp.Volume( + center=mp.Vector3(0, 0, 0), size=mp.Vector3(sim.cell_size.x, sim.cell_size.y, 0) + ) + xy1 = mp.Volume( + center=mp.Vector3(0, 0, 1), size=mp.Vector3(sim.cell_size.x, sim.cell_size.y, 0) + ) + yz0 = mp.Volume( + center=mp.Vector3(0, 0, 0), size=mp.Vector3(0, sim.cell_size.y, sim.cell_size.z) + ) + yz1 = mp.Volume( + center=mp.Vector3(1, 0, 0), size=mp.Vector3(0, sim.cell_size.y, sim.cell_size.z) + ) + xz0 = mp.Volume( + center=mp.Vector3(0, 0, 0), size=mp.Vector3(sim.cell_size.x, 0, sim.cell_size.z) + ) + xz1 = mp.Volume( + center=mp.Vector3(0, 1, 0), size=mp.Vector3(sim.cell_size.x, 0, sim.cell_size.z) + ) + vols = [xy0, xy1, yz0, yz1, xz0, xz1] + titles = ["xy0", "xy1", "yz0", "yz1", "xz0", "xz1"] + xlabel = ["x", "x", "y", "y", "x", "x"] + ylabel = ["y", "y", "z", "z", "z", "z"] for k in range(len(vols)): - ax = plt.subplot(2,3,k+1) - sim.plot2D(ax=ax,output_plane=vols[k]) + ax = plt.subplot(2, 3, k + 1) + sim.plot2D(ax=ax, output_plane=vols[k]) ax.set_xlabel(xlabel[k]) ax.set_ylabel(ylabel[k]) ax.set_title(titles[k]) plt.tight_layout() plt.show() -class TestVisualization(unittest.TestCase): + +class TestVisualization(unittest.TestCase): @classmethod def setUpClass(cls): cls.temp_dir = mp.make_output_directory() @@ -129,79 +192,120 @@ def test_plot2D(self): ax = sim.plot2D(ax=ax) if mp.am_master(): hash_figure(f) - #self.assertAlmostEqual(hash_figure(f),10231488) + # self.assertAlmostEqual(hash_figure(f),10231488) # Check plotting of fields after timestepping f = plt.figure() ax = f.gca() sim.run(until=200) - ax = sim.plot2D(ax=ax,fields=mp.Ez) + ax = sim.plot2D(ax=ax, fields=mp.Ez) if mp.am_master(): hash_figure(f) - #self.assertAlmostEqual(hash_figure(f),79786722) + # self.assertAlmostEqual(hash_figure(f),79786722) # Check output_plane feature f = plt.figure() ax = f.gca() - vol = mp.Volume(center=mp.Vector3(),size=mp.Vector3(2,2)) - ax = sim.plot2D(ax=ax,fields=mp.Ez,output_plane=vol) + vol = mp.Volume(center=mp.Vector3(), size=mp.Vector3(2, 2)) + ax = sim.plot2D(ax=ax, fields=mp.Ez, output_plane=vol) if mp.am_master(): hash_figure(f) - #self.assertAlmostEqual(hash_figure(f),68926258) + # self.assertAlmostEqual(hash_figure(f),68926258) - @unittest.skipIf(call(['which', 'ffmpeg']) != 0, "ffmpeg is not installed") + @unittest.skipIf(call(["which", "ffmpeg"]) != 0, "ffmpeg is not installed") def test_animation_output(self): # ------------------------- # # Check over 2D domain # ------------------------- # - sim = setup_sim() # generate 2D simulation + sim = setup_sim() # generate 2D simulation - Animate = mp.Animate2D(sim,fields=mp.Ez, realtime=False, normalize=False) # Check without normalization - Animate_norm = mp.Animate2D(sim, mp.Ez, realtime=False, normalize=True) # Check with normalization + Animate = mp.Animate2D( + sim, fields=mp.Ez, realtime=False, normalize=False + ) # Check without normalization + Animate_norm = mp.Animate2D( + sim, mp.Ez, realtime=False, normalize=True + ) # Check with normalization # test both animation objects during same run - sim.run( - mp.at_every(1,Animate), - mp.at_every(1,Animate_norm), - until=5) + sim.run(mp.at_every(1, Animate), mp.at_every(1, Animate_norm), until=5) # Test outputs - Animate.to_mp4(5,os.path.join(self.temp_dir, 'test_2D.mp4')) # Check mp4 output - Animate.to_gif(150,os.path.join(self.temp_dir, 'test_2D.gif')) # Check gif output - Animate.to_jshtml(10) # Check jshtml output - Animate_norm.to_mp4(5,os.path.join(self.temp_dir, 'test_2D_norm.mp4')) # Check mp4 output - Animate_norm.to_gif(150,os.path.join(self.temp_dir, 'test_2D_norm.gif')) # Check gif output - Animate_norm.to_jshtml(10) # Check jshtml output + Animate.to_mp4( + 5, os.path.join(self.temp_dir, "test_2D.mp4") + ) # Check mp4 output + Animate.to_gif( + 150, os.path.join(self.temp_dir, "test_2D.gif") + ) # Check gif output + Animate.to_jshtml(10) # Check jshtml output + Animate_norm.to_mp4( + 5, os.path.join(self.temp_dir, "test_2D_norm.mp4") + ) # Check mp4 output + Animate_norm.to_gif( + 150, os.path.join(self.temp_dir, "test_2D_norm.gif") + ) # Check gif output + Animate_norm.to_jshtml(10) # Check jshtml output # ------------------------- # # Check over 3D domain # ------------------------- # - sim = setup_sim(5) # generate 2D simulation + sim = setup_sim(5) # generate 2D simulation - Animate_xy = mp.Animate2D(sim,fields=mp.Ey, realtime=False, normalize=True) # Check without normalization - Animate_xz = mp.Animate2D(sim,mp.Ey,realtime=False,normalize=True) # Check with normalization + Animate_xy = mp.Animate2D( + sim, fields=mp.Ey, realtime=False, normalize=True + ) # Check without normalization + Animate_xz = mp.Animate2D( + sim, mp.Ey, realtime=False, normalize=True + ) # Check with normalization # test both animation objects during same run sim.run( - mp.at_every(1,mp.in_volume(mp.Volume(center=mp.Vector3(),size=mp.Vector3(sim.cell_size.x,sim.cell_size.y)),Animate_xy)), - mp.at_every(1,mp.in_volume(mp.Volume(center=mp.Vector3(),size=mp.Vector3(sim.cell_size.x,0,sim.cell_size.z)),Animate_xz)), - until=5) + mp.at_every( + 1, + mp.in_volume( + mp.Volume( + center=mp.Vector3(), + size=mp.Vector3(sim.cell_size.x, sim.cell_size.y), + ), + Animate_xy, + ), + ), + mp.at_every( + 1, + mp.in_volume( + mp.Volume( + center=mp.Vector3(), + size=mp.Vector3(sim.cell_size.x, 0, sim.cell_size.z), + ), + Animate_xz, + ), + ), + until=5, + ) # Test outputs - Animate_xy.to_mp4(5,os.path.join(self.temp_dir, 'test_3D_xy.mp4')) # Check mp4 output - Animate_xy.to_gif(150,os.path.join(self.temp_dir, 'test_3D_xy.gif')) # Check gif output - Animate_xy.to_jshtml(10) # Check jshtml output - Animate_xz.to_mp4(5,os.path.join(self.temp_dir, 'test_3D_xz.mp4')) # Check mp4 output - Animate_xz.to_gif(150,os.path.join(self.temp_dir, 'test_3D_xz.gif')) # Check gif output - Animate_xz.to_jshtml(10) # Check jshtml output - ''' + Animate_xy.to_mp4( + 5, os.path.join(self.temp_dir, "test_3D_xy.mp4") + ) # Check mp4 output + Animate_xy.to_gif( + 150, os.path.join(self.temp_dir, "test_3D_xy.gif") + ) # Check gif output + Animate_xy.to_jshtml(10) # Check jshtml output + Animate_xz.to_mp4( + 5, os.path.join(self.temp_dir, "test_3D_xz.mp4") + ) # Check mp4 output + Animate_xz.to_gif( + 150, os.path.join(self.temp_dir, "test_3D_xz.gif") + ) # Check gif output + Animate_xz.to_jshtml(10) # Check jshtml output + + """ Travis does not play well with Mayavi def test_3D_mayavi(self): sim = setup_sim(4) sim.plot3D() - ''' + """ + -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() - diff --git a/python/tests/test_wvg_src.py b/python/tests/test_wvg_src.py index e4b636398..9fc616f80 100644 --- a/python/tests/test_wvg_src.py +++ b/python/tests/test_wvg_src.py @@ -1,26 +1,35 @@ -import unittest import sys +import unittest import meep as mp class TestWvgSrc(unittest.TestCase): - def setUp(self): cell = mp.Vector3(16, 8) geometry = [ - mp.Block(center=mp.Vector3(), size=mp.Vector3(mp.inf, 1, mp.inf), - material=mp.Medium(epsilon=12)), - mp.Block(center=mp.Vector3(y=0.3), size=mp.Vector3(mp.inf, 0.1, mp.inf), - material=mp.Medium()) + mp.Block( + center=mp.Vector3(), + size=mp.Vector3(mp.inf, 1, mp.inf), + material=mp.Medium(epsilon=12), + ), + mp.Block( + center=mp.Vector3(y=0.3), + size=mp.Vector3(mp.inf, 0.1, mp.inf), + material=mp.Medium(), + ), ] sources = [ - mp.EigenModeSource(src=mp.ContinuousSource(0.15), size=mp.Vector3(y=6), - center=mp.Vector3(x=-5), component=mp.Dielectric, - eig_parity=mp.ODD_Z) + mp.EigenModeSource( + src=mp.ContinuousSource(0.15), + size=mp.Vector3(y=6), + center=mp.Vector3(x=-5), + component=mp.Dielectric, + eig_parity=mp.ODD_Z, + ) ] pml_layers = [mp.PML(1.0)] @@ -31,18 +40,23 @@ def setUp(self): sources=sources, boundary_layers=pml_layers, force_complex_fields=True, - resolution=10 + resolution=10, ) def test_wvg_src(self): self.sim.run(until=200) - flux1 = self.sim.flux_in_box(mp.X, mp.Volume(center=mp.Vector3(-6.0), size=mp.Vector3(1.8, 6))) - flux2 = self.sim.flux_in_box(mp.X, mp.Volume(center=mp.Vector3(6.0), size=mp.Vector3(1.8, 6))) + flux1 = self.sim.flux_in_box( + mp.X, mp.Volume(center=mp.Vector3(-6.0), size=mp.Vector3(1.8, 6)) + ) + flux2 = self.sim.flux_in_box( + mp.X, mp.Volume(center=mp.Vector3(6.0), size=mp.Vector3(1.8, 6)) + ) self.assertAlmostEqual(flux1, -1.775216564842667e-03) places = 5 if mp.is_single_precision() else 7 self.assertAlmostEqual(flux2, 7.215785537102116, places=places) -if __name__ == '__main__': + +if __name__ == "__main__": unittest.main() diff --git a/python/tests/utils.py b/python/tests/utils.py index a249e8e26..877e0b384 100644 --- a/python/tests/utils.py +++ b/python/tests/utils.py @@ -1,6 +1,8 @@ import unittest + import numpy as np + def compare_arrays(test_instance, exp, res, tol=1e-3): exp_1d = exp.ravel() res_1d = res.ravel() @@ -18,11 +20,11 @@ def compare_arrays(test_instance, exp, res, tol=1e-3): class ApproxComparisonTestCase(unittest.TestCase): """A mixin for adding proper floating point value and vector comparison.""" - def assertClose(self, x, y, epsilon = 1e-2, msg = ''): + def assertClose(self, x, y, epsilon=1e-2, msg=""): """Asserts that two values or vectors satisfy ‖x-y‖ ≤ ε * max(‖x‖, ‖y‖).""" x = np.atleast_1d(x).ravel() y = np.atleast_1d(y).ravel() x_norm = np.linalg.norm(x, ord=np.inf) y_norm = np.linalg.norm(y, ord=np.inf) diff_norm = np.linalg.norm(x - y, ord=np.inf) - self.assertLessEqual(diff_norm, epsilon * np.maximum(x_norm, y_norm), msg) \ No newline at end of file + self.assertLessEqual(diff_norm, epsilon * np.maximum(x_norm, y_norm), msg) diff --git a/python/timing_measurements.py b/python/timing_measurements.py index 08fc068b6..d9aa0c60d 100644 --- a/python/timing_measurements.py +++ b/python/timing_measurements.py @@ -1,34 +1,36 @@ from typing import Dict, List, Optional -import meep as mp + import numpy as np +import meep as mp + # Codes for different Meep time sinks, used by `mp.Simulation.time_spent_on()`. # See # https://meep.readthedocs.io/en/latest/Python_User_Interface/#simulation-time # for more information. TIMING_MEASUREMENT_IDS = { - 'connecting_chunks': mp.Connecting, - 'time_stepping': mp.Stepping, - 'boundaries_copying': mp.Boundaries, - 'mpi_all_to_all': mp.MpiAllTime, - 'mpi_one_to_one': mp.MpiOneTime, - 'field_output': mp.FieldOutput, - 'fourier_transform': mp.FourierTransforming, - 'mpb': mp.MPBTime, - 'near_to_farfield_transform': mp.GetFarfieldsTime, - 'other': mp.Other, - 'field_update_b': mp.FieldUpdateB, - 'field_update_h': mp.FieldUpdateH, - 'field_update_d': mp.FieldUpdateD, - 'field_update_e': mp.FieldUpdateE, - 'boundary_stepping_b': mp.BoundarySteppingB, - 'boundary_stepping_wh': mp.BoundarySteppingWH, - 'boundary_stepping_ph': mp.BoundarySteppingPH, - 'boundary_stepping_h': mp.BoundarySteppingH, - 'boundary_stepping_d': mp.BoundarySteppingD, - 'boundary_stepping_we': mp.BoundarySteppingWE, - 'boundary_stepping_pe': mp.BoundarySteppingPE, - 'boundary_stepping_e': mp.BoundarySteppingE, + "connecting_chunks": mp.Connecting, + "time_stepping": mp.Stepping, + "boundaries_copying": mp.Boundaries, + "mpi_all_to_all": mp.MpiAllTime, + "mpi_one_to_one": mp.MpiOneTime, + "field_output": mp.FieldOutput, + "fourier_transform": mp.FourierTransforming, + "mpb": mp.MPBTime, + "near_to_farfield_transform": mp.GetFarfieldsTime, + "other": mp.Other, + "field_update_b": mp.FieldUpdateB, + "field_update_h": mp.FieldUpdateH, + "field_update_d": mp.FieldUpdateD, + "field_update_e": mp.FieldUpdateE, + "boundary_stepping_b": mp.BoundarySteppingB, + "boundary_stepping_wh": mp.BoundarySteppingWH, + "boundary_stepping_ph": mp.BoundarySteppingPH, + "boundary_stepping_h": mp.BoundarySteppingH, + "boundary_stepping_d": mp.BoundarySteppingD, + "boundary_stepping_we": mp.BoundarySteppingWE, + "boundary_stepping_pe": mp.BoundarySteppingPE, + "boundary_stepping_e": mp.BoundarySteppingE, } @@ -73,14 +75,16 @@ class MeepTimingMeasurements: transforming. This is zero if no simulation work has been performed. """ - def __init__(self, - measurements: Dict[str, List[float]], - elapsed_time: float, - num_time_steps: int, - time_per_step: List[float], - dft_relative_change: List[float], - overlap_relative_change: List[float], - relative_energy: List[float]): + def __init__( + self, + measurements: Dict[str, List[float]], + elapsed_time: float, + num_time_steps: int, + time_per_step: List[float], + dft_relative_change: List[float], + overlap_relative_change: List[float], + relative_energy: List[float], + ): self.measurements = measurements self.elapsed_time = elapsed_time self.num_time_steps = num_time_steps @@ -91,14 +95,14 @@ def __init__(self, @classmethod def new_from_simulation( - cls, - sim: mp.Simulation, - elapsed_time: Optional[float] = -1, - time_per_step: Optional[List[float]] = None, - dft_relative_change: Optional[List[float]] = None, - overlap_relative_change: Optional[List[float]] = None, - relative_energy: Optional[List[float]] = None, - ) -> 'MeepTimingMeasurements': + cls, + sim: mp.Simulation, + elapsed_time: Optional[float] = -1, + time_per_step: Optional[List[float]] = None, + dft_relative_change: Optional[List[float]] = None, + overlap_relative_change: Optional[List[float]] = None, + relative_energy: Optional[List[float]] = None, + ) -> "MeepTimingMeasurements": """Creates a new `MeepTimingMeasurements` from a Meep simulation object. Usage example: @@ -129,16 +133,22 @@ def new_from_simulation( Returns: the resulting `MeepTimingMeasurements` """ - measurements = {} - for name, timing_id in TIMING_MEASUREMENT_IDS.items(): - measurements[name] = sim.time_spent_on(timing_id).tolist() + measurements = { + name: sim.time_spent_on(timing_id).tolist() + for name, timing_id in TIMING_MEASUREMENT_IDS.items() + } + return cls( measurements=measurements, elapsed_time=elapsed_time, num_time_steps=get_current_time_step(sim), time_per_step=time_per_step if time_per_step is not None else [], - dft_relative_change=dft_relative_change if dft_relative_change is not None else [], - overlap_relative_change=overlap_relative_change if overlap_relative_change is not None else [], + dft_relative_change=dft_relative_change + if dft_relative_change is not None + else [], + overlap_relative_change=overlap_relative_change + if overlap_relative_change is not None + else [], relative_energy=relative_energy if relative_energy is not None else [], ) @@ -148,28 +158,36 @@ def measurement_names(self) -> List[str]: @property def comm_efficiency(self) -> float: - computation_time = np.mean(self.measurements['time_stepping']) + np.mean( - self.measurements['fourier_transform']) + computation_time = np.mean(self.measurements["time_stepping"]) + np.mean( + self.measurements["fourier_transform"] + ) if computation_time == 0: return 0 else: - return np.mean(self.measurements['mpi_all_to_all'] + - self.measurements['mpi_one_to_one']) / computation_time + return ( + np.mean( + self.measurements["mpi_all_to_all"] + + self.measurements["mpi_one_to_one"] + ) + / computation_time + ) @property def comm_efficiency_one_to_one(self) -> float: - computation_time = np.mean(self.measurements['time_stepping']) + np.mean( - self.measurements['fourier_transform']) + computation_time = np.mean(self.measurements["time_stepping"]) + np.mean( + self.measurements["fourier_transform"] + ) if computation_time == 0: return 0 else: - return np.mean(self.measurements['mpi_one_to_one']) / computation_time + return np.mean(self.measurements["mpi_one_to_one"]) / computation_time @property def comm_efficiency_all_to_all(self) -> float: - computation_time = np.mean(self.measurements['time_stepping']) + np.mean( - self.measurements['fourier_transform']) + computation_time = np.mean(self.measurements["time_stepping"]) + np.mean( + self.measurements["fourier_transform"] + ) if computation_time == 0: return 0 else: - return np.mean(self.measurements['mpi_all_to_all']) / computation_time + return np.mean(self.measurements["mpi_all_to_all"]) / computation_time diff --git a/python/typemap_utils.cpp b/python/typemap_utils.cpp index 3c1fa1b66..ab8c8a294 100644 --- a/python/typemap_utils.cpp +++ b/python/typemap_utils.cpp @@ -32,7 +32,7 @@ #endif #ifndef SWIG_PYTHON_THREAD_SCOPED_BLOCK -#define SWIG_PYTHON_THREAD_SCOPED_BLOCK SWIG_PYTHON_THREAD_BEGIN_BLOCK +#define SWIG_PYTHON_THREAD_SCOPED_BLOCK SWIG_PYTHON_THREAD_BEGIN_BLOCK #endif PyObject *py_callback = NULL; @@ -57,9 +57,7 @@ static char *py2_string_as_utf8(PyObject *po) { Py_DECREF(s); return result; } - else { - return NULL; - } + else { return NULL; } } #endif @@ -180,8 +178,7 @@ static PyObject *vec2py(const meep::vec &v, bool newobj = false) { Py_INCREF(py_callback_v3); return py_callback_v3; - } - ; + }; } static void py_user_material_func_wrap(vector3 x, void *user_data, medium_struct *medium) { @@ -463,9 +460,7 @@ static int py_susceptibility_to_susceptibility(PyObject *po, susceptibility_stru std::string class_name = py_class_name_as_string(po); if (class_name.find(std::string("Drude")) != std::string::npos) { s->drude = true; } - else { - s->drude = false; - } + else { s->drude = false; } s->is_file = false; @@ -495,7 +490,7 @@ static int pymaterial_grid_to_material_grid(PyObject *po, material_data *md) { int rval = 1; // specify the type of material grid - PyObject * type = PyObject_GetAttrString(po, "grid_type"); + PyObject *type = PyObject_GetAttrString(po, "grid_type"); long gt_enum = PyInt_AsLong(type); Py_DECREF(type); @@ -504,7 +499,7 @@ static int pymaterial_grid_to_material_grid(PyObject *po, material_data *md) { case 1: md->material_grid_kinds = material_data::U_PROD; break; case 2: md->material_grid_kinds = material_data::U_MEAN; break; case 3: md->material_grid_kinds = material_data::U_DEFAULT; break; - default: meep::abort("Invalid material grid enumeration code: %d.\n", (int) gt_enum); + default: meep::abort("Invalid material grid enumeration code: %d.\n", (int)gt_enum); } // initialize grid size @@ -526,9 +521,7 @@ static int pymaterial_grid_to_material_grid(PyObject *po, material_data *md) { PyObject *po_dp = PyObject_GetAttrString(po, "weights"); PyArrayObject *pao = (PyArrayObject *)po_dp; if (!PyArray_Check(pao)) { meep::abort("MaterialGrid weights failed to init."); } - if (!PyArray_ISCARRAY(pao)) { - meep::abort("Numpy array weights must be C-style contiguous."); - } + if (!PyArray_ISCARRAY(pao)) { meep::abort("Numpy array weights must be C-style contiguous."); } md->weights = new double[PyArray_SIZE(pao)]; memcpy(md->weights, (double *)PyArray_DATA(pao), PyArray_SIZE(pao) * sizeof(double)); @@ -584,7 +577,7 @@ static int pymaterial_to_material(PyObject *po, material_type *mt) { PyObject *py_damping = PyObject_GetAttrString(po, "damping"); double damping = 0; if (py_damping) { damping = PyFloat_AsDouble(py_damping); } - md = make_material_grid(do_averaging,beta,eta,damping); + md = make_material_grid(do_averaging, beta, eta, damping); if (!pymaterial_grid_to_material_grid(po, md)) { return 0; } Py_XDECREF(py_do_averaging); Py_XDECREF(py_beta); @@ -597,10 +590,10 @@ static int pymaterial_to_material(PyObject *po, material_type *mt) { PyErr_Clear(); // clear errors from attributes not present bool do_averaging = false; if (py_do_averaging) { do_averaging = PyObject_IsTrue(py_do_averaging); } - if (eps && PyObject_IsTrue(eps)) { md = make_user_material(py_epsilon_func_wrap, po, do_averaging); } - else { - md = make_user_material(py_user_material_func_wrap, po, do_averaging); + if (eps && PyObject_IsTrue(eps)) { + md = make_user_material(py_epsilon_func_wrap, po, do_averaging); } + else { md = make_user_material(py_user_material_func_wrap, po, do_averaging); } Py_XDECREF(eps); Py_XDECREF(py_do_averaging); } @@ -625,9 +618,7 @@ static int pymaterial_to_material(PyObject *po, material_type *mt) { master_printf("read in %zdx%zdx%zd numpy array for epsilon\n", md->epsilon_dims[0], md->epsilon_dims[1], md->epsilon_dims[2]); } - else { - meep::abort("Expected a Medium, a Material Grid, a function, or a filename"); - } + else { meep::abort("Expected a Medium, a Material Grid, a function, or a filename"); } *mt = md; @@ -775,15 +766,14 @@ static PyObject *material_to_py_material(material_type mat) { return py_mat; } case meep_geom::material_data::MATERIAL_USER: { - PyObject *py_mat = (PyObject *) mat->user_data; + PyObject *py_mat = (PyObject *)mat->user_data; Py_INCREF(py_mat); return py_mat; } default: // Only Medium is supported at this time. meep::abort("Can only convert C++ medium_struct subtype %d to Python", mat->which_subclass); - } - ; + }; } static int pymedium_to_medium(PyObject *po, medium_struct *m) { @@ -1015,24 +1005,12 @@ static int py_gobj_to_gobj(PyObject *po, geometric_object *o) { std::string go_type = py_class_name_as_string(po); if (go_type == "Sphere") { success = pysphere_to_sphere(po, o); } - else if (go_type == "Cylinder") { - success = pycylinder_to_cylinder(po, o); - } - else if (go_type == "Wedge") { - success = pywedge_to_wedge(po, o); - } - else if (go_type == "Cone") { - success = pycone_to_cone(po, o); - } - else if (go_type == "Block") { - success = pyblock_to_block(po, o); - } - else if (go_type == "Ellipsoid") { - success = pyellipsoid_to_ellipsoid(po, o); - } - else if (go_type == "Prism") { - success = pyprism_to_prism(po, o); - } + else if (go_type == "Cylinder") { success = pycylinder_to_cylinder(po, o); } + else if (go_type == "Wedge") { success = pywedge_to_wedge(po, o); } + else if (go_type == "Cone") { success = pycone_to_cone(po, o); } + else if (go_type == "Block") { success = pyblock_to_block(po, o); } + else if (go_type == "Ellipsoid") { success = pyellipsoid_to_ellipsoid(po, o); } + else if (go_type == "Prism") { success = pyprism_to_prism(po, o); } else { meep::abort("Error: %s is not a valid GeometricObject type\n", go_type.c_str()); return 0; @@ -1103,8 +1081,7 @@ static PyObject *gobj_to_py_obj(geometric_object *gobj) { // We currently only have the need to create python Prisms from C++. // Other geometry can be added as needed. meep::abort("Conversion of non-prism geometric_object to Python is not supported"); - } - ; + }; } static PyObject *gobj_list_to_py_list(geometric_object_list *objs) { @@ -1123,13 +1100,13 @@ static PyObject *gobj_list_to_py_list(geometric_object_list *objs) { ; } -void gobj_list_freearg(geometric_object_list* objs) { +void gobj_list_freearg(geometric_object_list *objs) { SWIG_PYTHON_THREAD_SCOPED_BLOCK; - for(int i = 0; i < objs->num_items; ++i) { - material_free((material_data *)objs->items[i].material); - geometric_object_destroy(objs->items[i]); - } - delete[] objs->items; + for (int i = 0; i < objs->num_items; ++i) { + material_free((material_data *)objs->items[i].material); + geometric_object_destroy(objs->items[i]); + } + delete[] objs->items; ; } @@ -1152,8 +1129,7 @@ static std::unique_ptr py_bp_to_bp(PyObject *pybp) { else { bp.reset(new meep::binary_partition( meep::split_plane{direction(PyLong_AsLong(split_dir)), PyFloat_AsDouble(split_pos)}, - py_bp_to_bp(left), - py_bp_to_bp(right))); + py_bp_to_bp(left), py_bp_to_bp(right))); } Py_XDECREF(id); @@ -1169,9 +1145,7 @@ static PyObject *py_binary_partition_object() { SWIG_PYTHON_THREAD_SCOPED_BLOCK; // Return value: Borrowed reference static PyObject *bp_type = NULL; - if (bp_type == NULL) { - bp_type = PyObject_GetAttrString(get_meep_mod(), "BinaryPartition"); - } + if (bp_type == NULL) { bp_type = PyObject_GetAttrString(get_meep_mod(), "BinaryPartition"); } return bp_type; ; } @@ -1180,7 +1154,7 @@ static PyObject *py_binary_partition_object() { static PyObject *bp_to_py_bp(const meep::binary_partition *bp) { SWIG_PYTHON_THREAD_SCOPED_BLOCK; PyObject *bp_class = py_binary_partition_object(); - PyObject *args = PyTuple_New(0); // no numbered arguments to pass + PyObject *args = PyTuple_New(0); // no numbered arguments to pass if (bp->is_leaf()) { // leaf nodes will have proc_id and no other properties int proc_id = bp->get_proc_id(); @@ -1189,19 +1163,18 @@ static PyObject *bp_to_py_bp(const meep::binary_partition *bp) { Py_DECREF(args); Py_DECREF(kwargs); return py_bp; - } else { + } + else { // other nodes will have left, right, split_dir, split_pos PyObject *left = bp_to_py_bp(bp->left_tree()); PyObject *right = bp_to_py_bp(bp->right_tree()); meep::direction split_dir = bp->get_plane().dir; double split_pos = bp->get_plane().pos; - PyObject *kwargs = - Py_BuildValue("{s:O,s:O,s:i,s:d}", "left", left, "right", right, - "split_dir", split_dir, "split_pos", split_pos); + PyObject *kwargs = Py_BuildValue("{s:O,s:O,s:i,s:d}", "left", left, "right", right, "split_dir", + split_dir, "split_pos", split_pos); PyObject *py_bp = PyObject_Call(bp_class, args, kwargs); Py_DECREF(args); Py_DECREF(kwargs); return py_bp; - } - ; + }; } diff --git a/python/verbosity_mgr.py b/python/verbosity_mgr.py index 5b9fcc686..755f8f314 100644 --- a/python/verbosity_mgr.py +++ b/python/verbosity_mgr.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- - - -class Verbosity(object): +class Verbosity: """ A class to help make accessing and setting the global verbosity level a bit more pythonic. It manages one or more verbosity flags that are located in @@ -53,7 +50,7 @@ def __new__(cls, *args, **kw): # Create the real instance only the first time, and return the same each # time Verbosity is called thereafter. if cls._instance is None: - cls._instance = super(Verbosity, cls).__new__(cls) + cls._instance = super().__new__(cls) cls._instance._init() return cls._instance @@ -63,7 +60,7 @@ def _init(self): instance is created. """ self._master_verbosity = -1 - self._cvars = dict() + self._cvars = {} @classmethod def reset(cls): @@ -83,18 +80,20 @@ def add_verbosity_var(self, cvar=None, name=None, initial_level=1): Add a new verbosity flag to be managed. `cvar` should be some object that has a `verbosity` attribute, such as `meep.cvar` or `mpb.cvar`. """ - if cvar is None or not hasattr(cvar, 'verbosity'): + if cvar is None or not hasattr(cvar, "verbosity"): # If we're not given a module.cvar (e.g., while testing) or if the # cvar does not have a verbosity member (e.g. the lib hasn't been # updated to have a verbosity flag yet) then use a dummy object so # things can still run without it. - class _dummy(): - def __init__(self): self.verbosity = 1 + class _dummy: + def __init__(self): + self.verbosity = 1 + cvar = _dummy() # If a name is not given then manufacture one if name is None: - name = 'cvar_{}'.format(len(self._cvars)) + name = f"cvar_{len(self._cvars)}" self._cvars[name] = cvar # And create a property for so it can be accessed like `verbosity.mpb` @@ -116,7 +115,7 @@ def get_all(self): is mostly intended for debugging this class and won't likely be useful otherwise. """ - return [value.verbosity for value in self._cvars.values() ] + return [value.verbosity for value in self._cvars.values()] def set(self, level): """ @@ -124,7 +123,7 @@ def set(self, level): former value. """ if level < 0 or level > 3: - raise ValueError('Only verbosity levels 0-3 are supported') + raise ValueError("Only verbosity levels 0-3 are supported") old = self._master_verbosity for cvar in self._cvars.values(): cvar.verbosity = level @@ -152,26 +151,39 @@ def __int__(self): return self.get() def __repr__(self): - return "Verbosity: level={}".format(self.get()) + return f"Verbosity: level={self.get()}" # Some comparison operators - def __gt__(self, o): return self.get() > o - def __lt__(self, o): return self.get() < o - def __eq__(self, o): return self.get() == o - def __ne__(self, o): return self.get() != o - def __le__(self, o): return self.get() <= o - def __ge__(self, o): return self.get() >= o + def __gt__(self, o): + return self.get() > o + + def __lt__(self, o): + return self.get() < o + + def __eq__(self, o): + return self.get() == o + + def __ne__(self, o): + return self.get() != o + + def __le__(self, o): + return self.get() <= o + + def __ge__(self, o): + return self.get() >= o def make_property(self, name): """ Add a property to the class with the given name that gets or sets the verbosity in the cvar with that name in self._cvars. """ + def _getter(self, name=name): return self._cvars[name].verbosity + def _setter(self, level, name=name): if level < 0 or level > 3: - raise ValueError('Only verbosity levels 0-3 are supported') + raise ValueError("Only verbosity levels 0-3 are supported") self._cvars[name].verbosity = level setattr(Verbosity, name, property(_getter, _setter)) diff --git a/python/visualization.py b/python/visualization.py index 4d6d1eb10..4f4879e8e 100644 --- a/python/visualization.py +++ b/python/visualization.py @@ -1,13 +1,11 @@ -# -*- coding: utf-8 -*- -from collections import namedtuple import warnings +from collections import namedtuple import numpy as np - -import meep as mp from meep.geom import Vector3, init_do_averaging from meep.source import EigenModeSource, check_positive +import meep as mp # ------------------------------------------------------- # # Visualization @@ -20,68 +18,65 @@ # for the different plotting routines. default_source_parameters = { - 'color':'r', - 'edgecolor':'r', - 'facecolor':'none', - 'hatch':'/', - 'linewidth':2 - } + "color": "r", + "edgecolor": "r", + "facecolor": "none", + "hatch": "/", + "linewidth": 2, +} default_monitor_parameters = { - 'color':'b', - 'edgecolor':'b', - 'facecolor':'none', - 'hatch':'/', - 'linewidth':2 - } + "color": "b", + "edgecolor": "b", + "facecolor": "none", + "hatch": "/", + "linewidth": 2, +} default_field_parameters = { - 'interpolation':'spline36', - 'cmap':'RdBu', - 'alpha':0.8, - 'post_process':np.real - } + "interpolation": "spline36", + "cmap": "RdBu", + "alpha": 0.8, + "post_process": np.real, +} default_eps_parameters = { - 'interpolation':'spline36', - 'cmap':'binary', - 'alpha':1.0, - 'contour':False, - 'contour_linewidth':1, - 'frequency':None, - 'resolution':None - } + "interpolation": "spline36", + "cmap": "binary", + "alpha": 1.0, + "contour": False, + "contour_linewidth": 1, + "frequency": None, + "resolution": None, +} default_boundary_parameters = { - 'color':'g', - 'edgecolor':'g', - 'facecolor':'none', - 'hatch':'/' - } + "color": "g", + "edgecolor": "g", + "facecolor": "none", + "hatch": "/", +} default_volume_parameters = { - 'alpha':1.0, - 'color':'k', - 'linestyle':'-', - 'linewidth':1, - 'marker':'.', - 'edgecolor':'k', - 'facecolor':'none', - 'hatch':'/' - } - -default_label_parameters = { - 'label_color':'r', - 'offset':20, - 'label_alpha':0.3 + "alpha": 1.0, + "color": "k", + "linestyle": "-", + "linewidth": 1, + "marker": ".", + "edgecolor": "k", + "facecolor": "none", + "hatch": "/", } +default_label_parameters = {"label_color": "r", "offset": 20, "label_alpha": 0.3} + # Used to remove the elements of a dictionary (dict_to_filter) that # don't correspond to the keyword arguments of a particular # function (func_with_kwargs.) # Adapted from https://stackoverflow.com/questions/26515595/how-does-one-ignore-unexpected-keyword-arguments-passed-to-a-function/44052550 def filter_dict(dict_to_filter, func_with_kwargs): import inspect + filter_keys = [] try: # Python3 ... @@ -91,12 +86,17 @@ def filter_dict(dict_to_filter, func_with_kwargs): # Python2 ... filter_keys = inspect.getargspec(func_with_kwargs)[0] - filtered_dict = {filter_key:dict_to_filter[filter_key] for filter_key in filter_keys if filter_key in dict_to_filter} - return filtered_dict + return { + filter_key: dict_to_filter[filter_key] + for filter_key in filter_keys + if filter_key in dict_to_filter + } + # ------------------------------------------------------- # # Routines to add legends to plot + def place_label(ax, label_text, x, y, centerx, centery, label_parameters=None): if label_parameters is None: @@ -104,26 +104,25 @@ def place_label(ax, label_text, x, y, centerx, centery, label_parameters=None): else: label_parameters = dict(default_label_parameters, **label_parameters) - offset = label_parameters['offset'] - alpha = label_parameters['label_alpha'] - color = label_parameters['label_color'] - - if x > centerx: - xtext = -offset - else: - xtext = offset - if y > centery: - ytext = -offset - else: - ytext = offset - - ax.annotate(label_text, xy=(x, y), xytext=(xtext, ytext), - textcoords='offset points', ha='center', va='bottom', - bbox=dict(boxstyle='round,pad=0.2', fc=color, alpha=alpha), - arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=0.5', - color=color)) + offset = label_parameters["offset"] + alpha = label_parameters["label_alpha"] + color = label_parameters["label_color"] + + xtext = -offset if x > centerx else offset + ytext = -offset if y > centery else offset + ax.annotate( + label_text, + xy=(x, y), + xytext=(xtext, ytext), + textcoords="offset points", + ha="center", + va="bottom", + bbox=dict(boxstyle="round,pad=0.2", fc=color, alpha=alpha), + arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=0.5", color=color), + ) return ax + # ------------------------------------------------------- # # Helper functions used to plot volumes on a 2D plane @@ -135,45 +134,56 @@ def intersect_volume_volume(volume1, volume2): # volume2 ............... [volume] # Represent the volumes by an "upper" and "lower" coordinate - U1 = [volume1.center.x+volume1.size.x/2, - volume1.center.y+volume1.size.y/2, - volume1.center.z+volume1.size.z/2] - L1 = [volume1.center.x-volume1.size.x/2, - volume1.center.y-volume1.size.y/2, - volume1.center.z-volume1.size.z/2] - - U2 = [volume2.center.x+volume2.size.x/2, - volume2.center.y+volume2.size.y/2, - volume2.center.z+volume2.size.z/2] - L2 = [volume2.center.x-volume2.size.x/2, - volume2.center.y-volume2.size.y/2, - volume2.center.z-volume2.size.z/2] + U1 = [ + volume1.center.x + volume1.size.x / 2, + volume1.center.y + volume1.size.y / 2, + volume1.center.z + volume1.size.z / 2, + ] + L1 = [ + volume1.center.x - volume1.size.x / 2, + volume1.center.y - volume1.size.y / 2, + volume1.center.z - volume1.size.z / 2, + ] + + U2 = [ + volume2.center.x + volume2.size.x / 2, + volume2.center.y + volume2.size.y / 2, + volume2.center.z + volume2.size.z / 2, + ] + L2 = [ + volume2.center.x - volume2.size.x / 2, + volume2.center.y - volume2.size.y / 2, + volume2.center.z - volume2.size.z / 2, + ] # Evaluate intersection - U = np.min([U1,U2],axis=0) - L = np.max([L1,L2],axis=0) + U = np.min([U1, U2], axis=0) + L = np.max([L1, L2], axis=0) # For single points we have to check manually - if np.all(U-L == 0): - if (not volume1.pt_in_volume(Vector3(*U))) or (not volume2.pt_in_volume(Vector3(*U))): - return [] + if np.all(U - L == 0) and ( + (not volume1.pt_in_volume(Vector3(*U))) + or (not volume2.pt_in_volume(Vector3(*U))) + ): + return [] # Check for two volumes that don't intersect - if np.any(U-L < 0): + if np.any(U - L < 0): return [] # Pull all possible vertices vertices = [] - for x_vals in [L[0],U[0]]: - for y_vals in [L[1],U[1]]: - for z_vals in [L[2],U[2]]: - vertices.append(Vector3(x_vals,y_vals,z_vals)) - + for x_vals in [L[0], U[0]]: + for y_vals in [L[1], U[1]]: + vertices.extend(Vector3(x_vals, y_vals, z_vals) for z_vals in [L[2], U[2]]) # Remove any duplicate points caused by coplanar lines - vertices = [vertices[i] for i, x in enumerate(vertices) if x not in vertices[i+1:]] + vertices = [ + vertices[i] for i, x in enumerate(vertices) if x not in vertices[i + 1 :] + ] return vertices + # All of the 2D plotting routines need an output plane over which to plot. # The user has many options to specify this output plane. They can pass # the output_plane parameter, which is a 2D volume object. They can specify @@ -191,29 +201,37 @@ def get_2D_dimensions(sim, output_plane): plane_center, plane_size = (output_plane.center, output_plane.size) elif sim.output_volume: plane_center, plane_size = mp.get_center_and_size(sim.output_volume) + elif (sim.dimensions == mp.CYLINDRICAL) or sim.is_cylindrical: + plane_center, plane_size = ( + sim.geometry_center + mp.Vector3(sim.cell_size.x / 2), + sim.cell_size, + ) else: - if (sim.dimensions == mp.CYLINDRICAL) or sim.is_cylindrical: - plane_center, plane_size = (sim.geometry_center+mp.Vector3(sim.cell_size.x/2), sim.cell_size) - else: - plane_center, plane_size = (sim.geometry_center, sim.cell_size) - plane_volume = Volume(center=plane_center,size=plane_size) + plane_center, plane_size = (sim.geometry_center, sim.cell_size) + plane_volume = Volume(center=plane_center, size=plane_size) if plane_size.x != 0 and plane_size.y != 0 and plane_size.z != 0: raise ValueError("Plane volume must be 2D (a plane).") if (sim.dimensions == mp.CYLINDRICAL) or sim.is_cylindrical: - center = sim.geometry_center+mp.Vector3(sim.cell_size.x/2) - check_volume = mp.Volume(center=center, size = sim.cell_size) + center = sim.geometry_center + mp.Vector3(sim.cell_size.x / 2) + check_volume = mp.Volume(center=center, size=sim.cell_size) else: check_volume = Volume(center=sim.geometry_center, size=sim.cell_size) vertices = intersect_volume_volume(check_volume, plane_volume) if len(vertices) == 0: - raise ValueError("The specified user volume is completely outside of the simulation domain.") + raise ValueError( + "The specified user volume is completely outside of the simulation domain." + ) intersection_vol = Volume(vertices=vertices) - if (intersection_vol.size != plane_volume.size) or (intersection_vol.center != plane_volume.center): - warnings.warn('The specified user volume is larger than the simulation domain and has been truncated.') + if (intersection_vol.size != plane_volume.size) or ( + intersection_vol.center != plane_volume.center + ): + warnings.warn( + "The specified user volume is larger than the simulation domain and has been truncated." + ) sim_center, sim_size = (intersection_vol.center, intersection_vol.size) return sim_center, sim_size @@ -227,19 +245,23 @@ def box_vertices(box_center, box_size, is_cylindrical=False): xmin = 0 xmax = box_size.x else: - xmin = box_center.x - 0.5*box_size.x - xmax = box_center.x + 0.5*box_size.x - ymin = box_center.y - 0.5*box_size.y - ymax = box_center.y + 0.5*box_size.y - zmin = box_center.z - 0.5*box_size.z - zmax = box_center.z + 0.5*box_size.z + xmin = box_center.x - 0.5 * box_size.x + xmax = box_center.x + 0.5 * box_size.x + ymin = box_center.y - 0.5 * box_size.y + ymax = box_center.y + 0.5 * box_size.y + zmin = box_center.z - 0.5 * box_size.z + zmax = box_center.z + 0.5 * box_size.z return xmin, xmax, ymin, ymax, zmin, zmax + # ------------------------------------------------------- # # actual plotting routines -def plot_volume(sim, ax, volume, output_plane=None, plotting_parameters=None, label=None): + +def plot_volume( + sim, ax, volume, output_plane=None, plotting_parameters=None, label=None +): import matplotlib.patches as patches from matplotlib import pyplot as plt from meep.simulation import Volume @@ -258,36 +280,40 @@ def plot_volume(sim, ax, volume, output_plane=None, plotting_parameters=None, la size = volume.size center = volume.center - xmin, xmax, ymin, ymax, zmin, zmax = box_vertices(center, - size, - sim.is_cylindrical) + xmin, xmax, ymin, ymax, zmin, zmax = box_vertices(center, size, sim.is_cylindrical) # Add labels if requested if label is not None and mp.am_master(): if sim_size.x == 0: - ax = place_label(ax, - label, - center.y, - center.z, - sim_center.y, - sim_center.z, - label_parameters=plotting_parameters) + ax = place_label( + ax, + label, + center.y, + center.z, + sim_center.y, + sim_center.z, + label_parameters=plotting_parameters, + ) elif sim_size.y == 0: - ax = place_label(ax, - label, - center.x, - center.z, - sim_center.x, - sim_center.z, - label_parameters=plotting_parameters) + ax = place_label( + ax, + label, + center.x, + center.z, + sim_center.x, + sim_center.z, + label_parameters=plotting_parameters, + ) elif sim_size.z == 0: - ax = place_label(ax, - label, - center.x, - center.y, - sim_center.x, - sim_center.y, - label_parameters=plotting_parameters) + ax = place_label( + ax, + label, + center.x, + center.y, + sim_center.x, + sim_center.y, + label_parameters=plotting_parameters, + ) # Intersect plane with volume intersection = intersect_volume_volume(volume, plane) @@ -296,57 +322,93 @@ def plot_volume(sim, ax, volume, output_plane=None, plotting_parameters=None, la def sort_points(xy): xy = np.squeeze(xy) xy_mean = np.mean(xy, axis=0) - theta = np.arctan2(xy[:,1] - xy_mean[1], xy[:,0] - xy_mean[0]) + theta = np.arctan2(xy[:, 1] - xy_mean[1], xy[:, 0] - xy_mean[0]) return xy[np.argsort(theta, axis=0), :] if mp.am_master(): # Point volume if len(intersection) == 1: - point_args = {key:value for key, value in plotting_parameters.items() if key in ['color','marker','alpha','linewidth']} - if sim_size.y==0: - ax.scatter(center.x,center.z, **point_args) + point_args = { + key: value + for key, value in plotting_parameters.items() + if key in ["color", "marker", "alpha", "linewidth"] + } + if sim_size.y == 0: + ax.scatter(center.x, center.z, **point_args) return ax - elif sim_size.x==0: - ax.scatter(center.y,center.z, **point_args) + elif sim_size.x == 0: + ax.scatter(center.y, center.z, **point_args) return ax - elif sim_size.z==0: - ax.scatter(center.x,center.y, **point_args) + elif sim_size.z == 0: + ax.scatter(center.x, center.y, **point_args) return ax else: return ax # Line volume elif len(intersection) == 2: - line_args = {key:value for key, value in plotting_parameters.items() if key in ['color','linestyle','linewidth','alpha']} + line_args = { + key: value + for key, value in plotting_parameters.items() + if key in ["color", "linestyle", "linewidth", "alpha"] + } # Plot YZ if sim_size.x == 0: - ax.plot([a.y for a in intersection], [a.z for a in intersection], **line_args) + ax.plot( + [a.y for a in intersection], + [a.z for a in intersection], + **line_args, + ) return ax # Plot XZ elif sim_size.y == 0: - ax.plot([a.x for a in intersection], [a.z for a in intersection], **line_args) + ax.plot( + [a.x for a in intersection], + [a.z for a in intersection], + **line_args, + ) return ax # Plot XY elif sim_size.z == 0: - ax.plot([a.x for a in intersection], [a.y for a in intersection], **line_args) + ax.plot( + [a.x for a in intersection], + [a.y for a in intersection], + **line_args, + ) return ax else: return ax # Planar volume elif len(intersection) > 2: - planar_args = {key:value for key, value in plotting_parameters.items() if key in ['edgecolor','linewidth','facecolor','hatch','alpha']} + planar_args = { + key: value + for key, value in plotting_parameters.items() + if key in ["edgecolor", "linewidth", "facecolor", "hatch", "alpha"] + } # Plot YZ if sim_size.x == 0: - ax.add_patch(patches.Polygon(sort_points([[a.y,a.z] for a in intersection]), **planar_args)) + ax.add_patch( + patches.Polygon( + sort_points([[a.y, a.z] for a in intersection]), **planar_args + ) + ) return ax # Plot XZ - elif sim_size.y==0: - ax.add_patch(patches.Polygon(sort_points([[a.x,a.z] for a in intersection]), **planar_args)) + elif sim_size.y == 0: + ax.add_patch( + patches.Polygon( + sort_points([[a.x, a.z] for a in intersection]), **planar_args + ) + ) return ax # Plot XY elif sim_size.z == 0: - ax.add_patch(patches.Polygon(sort_points([[a.x,a.y] for a in intersection]), **planar_args)) + ax.add_patch( + patches.Polygon( + sort_points([[a.x, a.y] for a in intersection]), **planar_args + ) + ) return ax else: return ax @@ -354,6 +416,7 @@ def sort_points(xy): return ax return ax + def plot_eps(sim, ax, output_plane=None, eps_parameters=None, frequency=None): # consolidate plotting parameters if eps_parameters is None: @@ -363,37 +426,35 @@ def plot_eps(sim, ax, output_plane=None, eps_parameters=None, frequency=None): # Determine a frequency to plot all epsilon if frequency is not None: - warnings.warn("The frequency parameter of plot2D has been deprecated. " - "Use the frequency key of the eps_parameters dictionary instead.") - eps_parameters['frequency'] = frequency - if eps_parameters['frequency'] is None: + warnings.warn( + "The frequency parameter of plot2D has been deprecated. " + "Use the frequency key of the eps_parameters dictionary instead." + ) + eps_parameters["frequency"] = frequency + if eps_parameters["frequency"] is None: try: # Continuous sources - eps_parameters['frequency'] = sim.sources[0].frequency + eps_parameters["frequency"] = sim.sources[0].frequency except: try: # Gaussian sources - eps_parameters['frequency'] = sim.sources[0].src.frequency + eps_parameters["frequency"] = sim.sources[0].src.frequency except: try: # Custom sources - eps_parameters['frequency'] = sim.sources[0].src.center_frequency + eps_parameters["frequency"] = sim.sources[0].src.center_frequency except: # No sources - eps_parameters['frequency'] = 0 + eps_parameters["frequency"] = 0 # Get domain measurements sim_center, sim_size = get_2D_dimensions(sim, output_plane) - xmin, xmax, ymin, ymax, zmin, zmax = box_vertices(sim_center, - sim_size, - sim.is_cylindrical) - - if eps_parameters['resolution']: - grid_resolution = eps_parameters['resolution'] - else: - grid_resolution = sim.resolution + xmin, xmax, ymin, ymax, zmin, zmax = box_vertices( + sim_center, sim_size, sim.is_cylindrical + ) + grid_resolution = eps_parameters["resolution"] or sim.resolution Nx = int((xmax - xmin) * grid_resolution + 1) Ny = int((ymax - ymin) * grid_resolution + 1) Nz = int((zmax - zmin) * grid_resolution + 1) @@ -401,38 +462,48 @@ def plot_eps(sim, ax, output_plane=None, eps_parameters=None, frequency=None): if sim_size.x == 0: # Plot y on x axis, z on y axis (YZ plane) extent = [ymin, ymax, zmin, zmax] - xlabel = 'Y' - ylabel = 'Z' + xlabel = "Y" + ylabel = "Z" xtics = np.array([sim_center.x]) ytics = np.linspace(ymin, ymax, Ny) ztics = np.linspace(zmin, zmax, Nz) elif sim_size.y == 0: # Plot x on x axis, z on y axis (XZ plane) extent = [xmin, xmax, zmin, zmax] - if (sim.dimensions == mp.CYLINDRICAL) or sim.is_cylindrical: - xlabel = 'R' - else: - xlabel = "X" - ylabel = 'Z' + xlabel = ( + "R" if (sim.dimensions == mp.CYLINDRICAL) or sim.is_cylindrical else "X" + ) + + ylabel = "Z" xtics = np.linspace(xmin, xmax, Nx) ytics = np.array([sim_center.y]) ztics = np.linspace(zmin, zmax, Nz) elif sim_size.z == 0: # Plot x on x axis, y on y axis (XY plane) extent = [xmin, xmax, ymin, ymax] - xlabel = 'X' - ylabel = 'Y' + xlabel = "X" + ylabel = "Y" xtics = np.linspace(xmin, xmax, Nx) ytics = np.linspace(ymin, ymax, Ny) ztics = np.array([sim_center.z]) else: raise ValueError("A 2D plane has not been specified...") - eps_data = np.rot90(np.real(sim.get_epsilon_grid(xtics, ytics, ztics, eps_parameters['frequency']))) + eps_data = np.rot90( + np.real(sim.get_epsilon_grid(xtics, ytics, ztics, eps_parameters["frequency"])) + ) if mp.am_master(): - if eps_parameters['contour']: - ax.contour(eps_data, 0, levels=np.unique(eps_data), colors='black', origin='upper', extent=extent, linewidths=eps_parameters['contour_linewidth']) + if eps_parameters["contour"]: + ax.contour( + eps_data, + 0, + levels=np.unique(eps_data), + colors="black", + origin="upper", + extent=extent, + linewidths=eps_parameters["contour_linewidth"], + ) else: ax.imshow(eps_data, extent=extent, **filter_dict(eps_parameters, ax.imshow)) ax.set_xlabel(xlabel) @@ -440,6 +511,7 @@ def plot_eps(sim, ax, output_plane=None, eps_parameters=None, frequency=None): return ax + def plot_boundaries(sim, ax, output_plane=None, boundary_parameters=None): # consolidate plotting parameters if boundary_parameters is None: @@ -452,62 +524,59 @@ def get_boundary_volumes(thickness, direction, side): thickness = boundary.thickness - xmin, xmax, ymin, ymax, zmin, zmax = box_vertices(sim.geometry_center, - sim.cell_size, - sim.is_cylindrical) + xmin, xmax, ymin, ymax, zmin, zmax = box_vertices( + sim.geometry_center, sim.cell_size, sim.is_cylindrical + ) if direction == mp.X and side == mp.Low: - return Volume(center=Vector3(xmin+0.5*thickness, - sim.geometry_center.y, - sim.geometry_center.z), - size=Vector3(thickness, - sim.cell_size.y, - sim.cell_size.z)) + return Volume( + center=Vector3( + xmin + 0.5 * thickness, sim.geometry_center.y, sim.geometry_center.z + ), + size=Vector3(thickness, sim.cell_size.y, sim.cell_size.z), + ) elif (direction == mp.X and side == mp.High) or direction == mp.R: - return Volume(center=Vector3(xmax-0.5*thickness, - sim.geometry_center.y, - sim.geometry_center.z), - size=Vector3(thickness, - sim.cell_size.y, - sim.cell_size.z)) + return Volume( + center=Vector3( + xmax - 0.5 * thickness, sim.geometry_center.y, sim.geometry_center.z + ), + size=Vector3(thickness, sim.cell_size.y, sim.cell_size.z), + ) elif direction == mp.Y and side == mp.Low: - return Volume(center=Vector3(sim.geometry_center.x, - ymin+0.5*thickness, - sim.geometry_center.z), - size=Vector3(sim.cell_size.x, - thickness, - sim.cell_size.z)) + return Volume( + center=Vector3( + sim.geometry_center.x, ymin + 0.5 * thickness, sim.geometry_center.z + ), + size=Vector3(sim.cell_size.x, thickness, sim.cell_size.z), + ) elif direction == mp.Y and side == mp.High: - return Volume(center=Vector3(sim.geometry_center.x, - ymax-0.5*thickness, - sim.geometry_center.z), - size=Vector3(sim.cell_size.x, - thickness, - sim.cell_size.z)) + return Volume( + center=Vector3( + sim.geometry_center.x, ymax - 0.5 * thickness, sim.geometry_center.z + ), + size=Vector3(sim.cell_size.x, thickness, sim.cell_size.z), + ) elif direction == mp.Z and side == mp.Low: xcen = sim.geometry_center.x if sim.is_cylindrical: - xcen += 0.5*sim.cell_size.x - return Volume(center=Vector3(xcen, - sim.geometry_center.y, - zmin+0.5*thickness), - size=Vector3(sim.cell_size.x, - sim.cell_size.y, - thickness)) + xcen += 0.5 * sim.cell_size.x + return Volume( + center=Vector3(xcen, sim.geometry_center.y, zmin + 0.5 * thickness), + size=Vector3(sim.cell_size.x, sim.cell_size.y, thickness), + ) elif direction == mp.Z and side == mp.High: xcen = sim.geometry_center.x if sim.is_cylindrical: - xcen += 0.5*sim.cell_size.x - return Volume(center=Vector3(xcen, - sim.geometry_center.y, - zmax-0.5*thickness), - size=Vector3(sim.cell_size.x, - sim.cell_size.y, - thickness)) + xcen += 0.5 * sim.cell_size.x + return Volume( + center=Vector3(xcen, sim.geometry_center.y, zmax - 0.5 * thickness), + size=Vector3(sim.cell_size.x, sim.cell_size.y, thickness), + ) else: raise ValueError("Invalid boundary type") import itertools + for boundary in sim.boundary_layers: # boundary on all four sides if boundary.direction == mp.ALL and boundary.side == mp.ALL: @@ -522,25 +591,40 @@ def get_boundary_volumes(thickness, direction, side): else: raise ValueError("Invalid simulation dimensions") for permutation in itertools.product(dims, [mp.Low, mp.High]): - if ((permutation[0] == mp.X) and (permutation[1] == mp.Low)) and (sim.dimensions == mp.CYLINDRICAL or sim.is_cylindrical): + if ((permutation[0] == mp.X) and (permutation[1] == mp.Low)) and ( + sim.dimensions == mp.CYLINDRICAL or sim.is_cylindrical + ): continue - vol = get_boundary_volumes(boundary.thickness,*permutation) - ax = plot_volume(sim,ax,vol,output_plane,plotting_parameters=boundary_parameters) + vol = get_boundary_volumes(boundary.thickness, *permutation) + ax = plot_volume( + sim, ax, vol, output_plane, plotting_parameters=boundary_parameters + ) # boundary on only two of four sides elif boundary.side == mp.ALL: for side in [mp.Low, mp.High]: - if ((boundary.direction == mp.X) and (side == mp.Low)) and (sim.dimensions == mp.CYLINDRICAL or sim.is_cylindrical): + if ((boundary.direction == mp.X) and (side == mp.Low)) and ( + sim.dimensions == mp.CYLINDRICAL or sim.is_cylindrical + ): continue - vol = get_boundary_volumes(boundary.thickness,boundary.direction,side) - ax = plot_volume(sim,ax,vol,output_plane,plotting_parameters=boundary_parameters) + vol = get_boundary_volumes(boundary.thickness, boundary.direction, side) + ax = plot_volume( + sim, ax, vol, output_plane, plotting_parameters=boundary_parameters + ) # boundary on just one side else: - if ((boundary.direction == mp.X) and (boundary.side == mp.Low)) and (sim.dimensions == mp.CYLINDRICAL or sim.is_cylindrical): + if ((boundary.direction == mp.X) and (boundary.side == mp.Low)) and ( + sim.dimensions == mp.CYLINDRICAL or sim.is_cylindrical + ): continue - vol = get_boundary_volumes(boundary.thickness,boundary.direction,boundary.side) - ax = plot_volume(sim,ax,vol,output_plane,plotting_parameters=boundary_parameters) + vol = get_boundary_volumes( + boundary.thickness, boundary.direction, boundary.side + ) + ax = plot_volume( + sim, ax, vol, output_plane, plotting_parameters=boundary_parameters + ) return ax + def plot_sources(sim, ax, output_plane=None, labels=False, source_parameters=None): from meep.simulation import Volume @@ -550,13 +634,21 @@ def plot_sources(sim, ax, output_plane=None, labels=False, source_parameters=Non else: source_parameters = dict(default_source_parameters, **source_parameters) - label = 'source' if labels else None + label = "source" if labels else None for src in sim.sources: - vol = Volume(center=src.center,size=src.size) - ax = plot_volume(sim,ax,vol,output_plane,plotting_parameters=source_parameters,label=label) + vol = Volume(center=src.center, size=src.size) + ax = plot_volume( + sim, + ax, + vol, + output_plane, + plotting_parameters=source_parameters, + label=label, + ) return ax + def plot_monitors(sim, ax, output_plane=None, labels=False, monitor_parameters=None): from meep.simulation import Volume @@ -566,14 +658,22 @@ def plot_monitors(sim, ax, output_plane=None, labels=False, monitor_parameters=N else: monitor_parametesr = dict(default_monitor_parameters, **monitor_parameters) - label = 'monitor' if labels else None + label = "monitor" if labels else None for mon in sim.dft_objects: for reg in mon.regions: - vol = Volume(center=reg.center,size=reg.size) - ax = plot_volume(sim,ax,vol,output_plane,plotting_parameters=monitor_parameters,label=label) + vol = Volume(center=reg.center, size=reg.size) + ax = plot_volume( + sim, + ax, + vol, + output_plane, + plotting_parameters=monitor_parameters, + label=label, + ) return ax + def plot_fields(sim, ax=None, fields=None, output_plane=None, field_parameters=None): if not sim._is_initialized: sim.init_sim() @@ -586,105 +686,148 @@ def plot_fields(sim, ax=None, fields=None, output_plane=None, field_parameters=N else: field_parameters = dict(default_field_parameters, **field_parameters) - # user specifies a field component - if fields in [mp.Ex, mp.Ey, mp.Ez, mp.Er, mp.Ep, mp.Dx, mp.Dy, mp.Dz, mp.Hx, mp.Hy, mp.Hz]: - # Get domain measurements - sim_center, sim_size = get_2D_dimensions(sim, output_plane) + if fields not in [ + mp.Ex, + mp.Ey, + mp.Ez, + mp.Er, + mp.Ep, + mp.Dx, + mp.Dy, + mp.Dz, + mp.Hx, + mp.Hy, + mp.Hz, + ]: + raise ValueError("Please specify a valid field component (mp.Ex, mp.Ey, ...") - xmin, xmax, ymin, ymax, zmin, zmax = box_vertices(sim_center, - sim_size, - sim.is_cylindrical) + # Get domain measurements + sim_center, sim_size = get_2D_dimensions(sim, output_plane) - if sim_size.x == 0: - # Plot y on x axis, z on y axis (YZ plane) - extent = [ymin, ymax, zmin, zmax] - xlabel = 'Y' - ylabel = 'Z' - elif sim_size.y == 0: - # Plot x on x axis, z on y axis (XZ plane) - extent = [xmin, xmax, zmin, zmax] - if (sim.dimensions == mp.CYLINDRICAL) or sim.is_cylindrical: - xlabel = 'R' - else: - xlabel = "X" - ylabel = 'Z' - elif sim_size.z == 0: - # Plot x on x axis, y on y axis (XY plane) - extent = [xmin, xmax, ymin, ymax] - xlabel = 'X' - ylabel = 'Y' - fields = sim.get_array(center=sim_center, size=sim_size, component=fields) - else: - raise ValueError('Please specify a valid field component (mp.Ex, mp.Ey, ...') + xmin, xmax, ymin, ymax, zmin, zmax = box_vertices( + sim_center, sim_size, sim.is_cylindrical + ) + if sim_size.x == 0: + # Plot y on x axis, z on y axis (YZ plane) + extent = [ymin, ymax, zmin, zmax] + xlabel = "Y" + ylabel = "Z" + elif sim_size.y == 0: + # Plot x on x axis, z on y axis (XZ plane) + extent = [xmin, xmax, zmin, zmax] + xlabel = ( + "R" if (sim.dimensions == mp.CYLINDRICAL) or sim.is_cylindrical else "X" + ) - fields = field_parameters['post_process'](fields) + ylabel = "Z" + elif sim_size.z == 0: + # Plot x on x axis, y on y axis (XY plane) + extent = [xmin, xmax, ymin, ymax] + xlabel = "X" + ylabel = "Y" + fields = sim.get_array(center=sim_center, size=sim_size, component=fields) + fields = field_parameters["post_process"](fields) if (sim.dimensions == mp.CYLINDRICAL) or sim.is_cylindrical: fields = np.flipud(fields) else: fields = np.rot90(fields) - # Either plot the field, or return the array - if ax: - if mp.am_master(): - ax.imshow(fields, extent=extent, **filter_dict(field_parameters,ax.imshow)) - return ax - else: + if not ax: return fields + if mp.am_master(): + ax.imshow(fields, extent=extent, **filter_dict(field_parameters, ax.imshow)) return ax -def plot2D(sim, ax=None, output_plane=None, fields=None, labels=False, - eps_parameters=None, boundary_parameters=None, - source_parameters=None, monitor_parameters=None, - field_parameters=None, frequency=None, - plot_eps_flag=True, plot_sources_flag=True, - plot_monitors_flag=True, plot_boundaries_flag=True): + +def plot2D( + sim, + ax=None, + output_plane=None, + fields=None, + labels=False, + eps_parameters=None, + boundary_parameters=None, + source_parameters=None, + monitor_parameters=None, + field_parameters=None, + frequency=None, + plot_eps_flag=True, + plot_sources_flag=True, + plot_monitors_flag=True, + plot_boundaries_flag=True, +): # Ensure a figure axis exists if ax is None and mp.am_master(): from matplotlib import pyplot as plt + ax = plt.gca() # validate the output plane to ensure proper 2D coordinates from meep.simulation import Volume + sim_center, sim_size = get_2D_dimensions(sim, output_plane) output_plane = Volume(center=sim_center, size=sim_size) # Plot geometry if plot_eps_flag: - ax = plot_eps(sim, ax, output_plane=output_plane, - eps_parameters=eps_parameters, frequency=frequency) + ax = plot_eps( + sim, + ax, + output_plane=output_plane, + eps_parameters=eps_parameters, + frequency=frequency, + ) # Plot boundaries if plot_boundaries_flag: - ax = plot_boundaries(sim, ax, output_plane=output_plane, - boundary_parameters=boundary_parameters) + ax = plot_boundaries( + sim, ax, output_plane=output_plane, boundary_parameters=boundary_parameters + ) # Plot sources if plot_sources_flag: - ax = plot_sources(sim, ax, output_plane=output_plane, - labels=labels, source_parameters=source_parameters) + ax = plot_sources( + sim, + ax, + output_plane=output_plane, + labels=labels, + source_parameters=source_parameters, + ) # Plot monitors if plot_monitors_flag: - ax = plot_monitors(sim, ax, output_plane=output_plane, - labels=labels, monitor_parameters=monitor_parameters) + ax = plot_monitors( + sim, + ax, + output_plane=output_plane, + labels=labels, + monitor_parameters=monitor_parameters, + ) # Plot fields if fields is not None: - ax = plot_fields(sim, ax, fields, output_plane=output_plane, - field_parameters=field_parameters) + ax = plot_fields( + sim, + ax, + fields, + output_plane=output_plane, + field_parameters=field_parameters, + ) return ax + def plot3D(sim): from mayavi import mlab if sim.dimensions < 3: raise ValueError("Simulation must have 3 dimensions to visualize 3D") - xmin, xmax, ymin, ymax, zmin, zmax = box_vertices(sim.geometry_center, - sim.cell_size) + xmin, xmax, ymin, ymax, zmin, zmax = box_vertices( + sim.geometry_center, sim.cell_size + ) Nx = int(sim.cell_size.x * sim.resolution) + 1 Ny = int(sim.cell_size.y * sim.resolution) + 1 @@ -695,16 +838,16 @@ def plot3D(sim): ztics = np.linspace(zmin, zmax, Nz) eps_data = sim.get_epsilon_grid(xtics, ytics, ztics) - s = mlab.contour3d(eps_data, colormap="YlGnBu") - return s + return mlab.contour3d(eps_data, colormap="YlGnBu") + def visualize_chunks(sim): if sim.structure is None: sim.init_sim() - import matplotlib.pyplot as plt import matplotlib.cm import matplotlib.colors + import matplotlib.pyplot as plt if sim.structure.gv.dim == 2: from mpl_toolkits.mplot3d import Axes3D @@ -739,10 +882,10 @@ def plot_box(box, proc, fig, ax): [points[0], points[3], points[5], points[7]], [points[1], points[4], points[2], points[6]], [points[3], points[4], points[1], points[5]], - [points[0], points[7], points[6], points[2]] + [points[0], points[7], points[6], points[2]], ] - faces = Poly3DCollection(edges, linewidths=1, edgecolors='k') + faces = Poly3DCollection(edges, linewidths=1, edgecolors="k") color_with_alpha = matplotlib.colors.to_rgba(chunk_colors[proc], alpha=0.2) faces.set_facecolor(color_with_alpha) ax.add_collection3d(faces) @@ -761,11 +904,9 @@ def plot_box(box, proc, fig, ax): points += [low + y_len] points = np.array([np.array(v)[:-1] for v in points]) - edges = [ - [points[0], points[2], points[1], points[3]] - ] + edges = [[points[0], points[2], points[1], points[3]]] - faces = PolyCollection(edges, linewidths=1, edgecolors='k') + faces = PolyCollection(edges, linewidths=1, edgecolors="k") color_with_alpha = matplotlib.colors.to_rgba(chunk_colors[proc]) faces.set_facecolor(color_with_alpha) ax.add_collection(faces) @@ -775,29 +916,32 @@ def plot_box(box, proc, fig, ax): if mp.am_master(): fig = plt.figure() - ax = fig.add_subplot(111, projection='3d' if sim.structure.gv.dim == 2 else None) + ax = fig.add_subplot( + 111, projection="3d" if sim.structure.gv.dim == 2 else None + ) chunk_colors = matplotlib.cm.rainbow(np.linspace(0, 1, mp.count_processors())) for i, v in enumerate(vols): plot_box(mp.gv2box(v.surroundings()), owners[i], fig, ax) - ax.set_xlabel('x') - ax.set_ylabel('y') - ax.set_aspect('equal') + ax.set_xlabel("x") + ax.set_ylabel("y") + ax.set_aspect("equal") cell_box = mp.gv2box(sim.structure.gv.surroundings()) if sim.structure.gv.dim == 2: - ax.set_xlim3d(left=cell_box.low.x,right=cell_box.high.x) - ax.set_ylim3d(bottom=cell_box.low.y,top=cell_box.high.y) - ax.set_zlim3d(bottom=cell_box.low.z,top=cell_box.high.z) - ax.set_zlabel('z') + ax.set_xlim3d(left=cell_box.low.x, right=cell_box.high.x) + ax.set_ylim3d(bottom=cell_box.low.y, top=cell_box.high.y) + ax.set_zlim3d(bottom=cell_box.low.z, top=cell_box.high.z) + ax.set_zlabel("z") else: - ax.set_xlim(left=cell_box.low.x,right=cell_box.high.x) - ax.set_ylim(bottom=cell_box.low.y,top=cell_box.high.y) + ax.set_xlim(left=cell_box.low.x, right=cell_box.high.x) + ax.set_ylim(bottom=cell_box.low.y, top=cell_box.high.y) plt.tight_layout() plt.show() + # ------------------------------------------------------- # # Animate2D # ------------------------------------------------------- # @@ -818,7 +962,8 @@ def plot_box(box, proc, fig, ax): # customization_args .. [dict] other customization args # to pass to plot2D() -class Animate2D(object): + +class Animate2D: """ A class used to record the fields during timestepping (i.e., a [`run`](#run-functions) function). The object is initialized prior to timestepping by specifying the @@ -849,8 +994,17 @@ class Animate2D(object): Multiple `Animate2D` objects can be initialized and passed to the run function to track different volume locations (using `mp.in_volume`) or field components. """ - def __init__(self, sim, fields, f=None, realtime=False, normalize=False, - plot_modifiers=None, **customization_args): + + def __init__( + self, + sim, + fields, + f=None, + realtime=False, + normalize=False, + plot_modifiers=None, + **customization_args, + ): """ Construct an `Animate2D` object. @@ -894,6 +1048,7 @@ def mod1(ax): self.ax = self.f.gca() elif mp.am_master(): from matplotlib import pyplot as plt + self.f = plt.figure() self.ax = self.f.gca() else: @@ -908,20 +1063,20 @@ def mod1(ax): self.cumulative_fields = [] self._saved_frames = [] - self.frame_format = 'png' # format in which each frame is saved in memory - self.codec = 'h264' # encoding of mp4 video - self.default_mode = 'loop' # html5 video control mode + self.frame_format = "png" # format in which each frame is saved in memory + self.codec = "h264" # encoding of mp4 video + self.default_mode = "loop" # html5 video control mode self.init = False # Needed for step functions - self.__code__ = namedtuple('gna_hack',['co_argcount']) - self.__code__.co_argcount=2 + self.__code__ = namedtuple("gna_hack", ["co_argcount"]) + self.__code__.co_argcount = 2 - def __call__(self,sim,todo): + def __call__(self, sim, todo): from matplotlib import pyplot as plt - if todo == 'step': + if todo == "step": # Initialize the plot if not self.init: filtered_plot2D = filter_dict(self.customization_args, plot2D) @@ -938,11 +1093,13 @@ def __call__(self,sim,todo): self.init = True else: # Update the plot - filtered_plot_fields= filter_dict(self.customization_args, plot_fields) + filtered_plot_fields = filter_dict(self.customization_args, plot_fields) fields = sim.plot_fields(fields=self.fields, **filtered_plot_fields) if mp.am_master(): self.ax.images[-1].set_data(fields) - self.ax.images[-1].set_clim(vmin=0.8*np.min(fields), vmax=0.8*np.max(fields)) + self.ax.images[-1].set_clim( + vmin=0.8 * np.min(fields), vmax=0.8 * np.max(fields) + ) if self.realtime and mp.am_master(): # Redraw the current figure if requested @@ -957,15 +1114,17 @@ def __call__(self,sim,todo): # to avoid writing to disk. self.grab_frame() return - elif todo == 'finish': + elif todo == "finish": # Normalize the frames, if requested, and export if self.normalize and mp.am_master(): if mp.verbosity.meep > 0: print("Normalizing field data...") - fields = np.array(self.cumulative_fields) / np.max(np.abs(self.cumulative_fields), axis=(0,1,2)) + fields = np.array(self.cumulative_fields) / np.max( + np.abs(self.cumulative_fields), axis=(0, 1, 2) + ) for k in range(len(self.cumulative_fields)): - self.ax.images[-1].set_data(fields[k,:,:]) + self.ax.images[-1].set_data(fields[k, :, :]) self.ax.images[-1].set_clim(vmin=-0.8, vmax=0.8) self.grab_frame() @@ -982,9 +1141,10 @@ def grab_frame(self): # Saves the figures frame to memory. # modified from matplotlib library from io import BytesIO + bin_data = BytesIO() self.f.savefig(bin_data, format=self.frame_format) - #imgdata64 = base64.encodebytes(bin_data.getvalue()).decode('ascii') + # imgdata64 = base64.encodebytes(bin_data.getvalue()).decode('ascii') self._saved_frames.append(bin_data.getvalue()) def _embedded_frames(self, frame_list, frame_format): @@ -992,12 +1152,18 @@ def _embedded_frames(self, frame_list, frame_format): # frame_list should be a list of base64-encoded png files # modified from matplotlib import base64 + template = ' frames[{0}] = "data:image/{1};base64,{2}"\n' return "\n" + "".join( - template.format(i, frame_format, base64.encodebytes(frame_data).decode('ascii').replace('\n', '\\\n')) - for i, frame_data in enumerate(frame_list)) - - def to_jshtml(self,fps): + template.format( + i, + frame_format, + base64.encodebytes(frame_data).decode("ascii").replace("\n", "\\\n"), + ) + for i, frame_data in enumerate(frame_list) + ) + + def to_jshtml(self, fps): """ Outputs an interactable JSHTML animation object that is embeddable in Jupyter notebooks. The object is packaged with controls to manipulate the video's @@ -1009,37 +1175,47 @@ def to_jshtml(self,fps): # Only works with Python3 and matplotlib > 3.1.0 from distutils.version import LooseVersion + import matplotlib + if LooseVersion(matplotlib.__version__) < LooseVersion("3.1.0"): - print('-------------------------------') - print('Warning: JSHTML output is not supported with your current matplotlib build. Consider upgrading to 3.1.0+') - print('-------------------------------') + print("-------------------------------") + print( + "Warning: JSHTML output is not supported with your current matplotlib build. Consider upgrading to 3.1.0+" + ) + print("-------------------------------") return if mp.am_master(): from uuid import uuid4 - from matplotlib._animation_data import (DISPLAY_TEMPLATE, INCLUDED_FRAMES, JS_INCLUDE, STYLE_INCLUDE) + + from matplotlib._animation_data import ( + DISPLAY_TEMPLATE, + INCLUDED_FRAMES, + JS_INCLUDE, + STYLE_INCLUDE, + ) # save the frames to an html file fill_frames = self._embedded_frames(self._saved_frames, self.frame_format) Nframes = len(self._saved_frames) - mode_dict = dict(once_checked='', - loop_checked='', - reflect_checked='') - mode_dict[self.default_mode + '_checked'] = 'checked' + mode_dict = dict(once_checked="", loop_checked="", reflect_checked="") + mode_dict[f"{self.default_mode}_checked"] = "checked" interval = 1000 // fps html_string = "" html_string += JS_INCLUDE html_string += STYLE_INCLUDE - html_string += DISPLAY_TEMPLATE.format(id=uuid4().hex, - Nframes=Nframes, - fill_frames=fill_frames, - interval=interval, - **mode_dict) + html_string += DISPLAY_TEMPLATE.format( + id=uuid4().hex, + Nframes=Nframes, + fill_frames=fill_frames, + interval=interval, + **mode_dict, + ) return JS_Animation(html_string) - def to_gif(self,fps,filename): + def to_gif(self, fps, filename): """ Generates and outputs a GIF file of the animation with the filename, `filename`, and the frame rate, `fps`. Note that GIFs are significantly larger than mp4 videos @@ -1051,32 +1227,43 @@ def to_gif(self,fps,filename): # requires ffmpeg to be installed # modified from the matplotlib library if mp.am_master(): - from subprocess import Popen, PIPE - from io import TextIOWrapper, BytesIO - FFMPEG_BIN = 'ffmpeg' - command = [FFMPEG_BIN, - '-f', 'image2pipe', # force piping of rawvideo - '-vcodec', self.frame_format, # raw input codec - '-s', '%dx%d' % (self.frame_size), - '-r', str(fps), # frame rate in frames per second - '-i', 'pipe:', # The input comes from a pipe - '-vcodec', 'gif', # output gif format - '-r', str(fps), # frame rate in frames per second - '-y', - '-vf', 'pad=width=ceil(iw/2)*2:height=ceil(ih/2)*2', - '-an', filename # output filename + from io import BytesIO, TextIOWrapper + from subprocess import PIPE, Popen + + FFMPEG_BIN = "ffmpeg" + command = [ + FFMPEG_BIN, + "-f", + "image2pipe", # force piping of rawvideo + "-vcodec", + self.frame_format, # raw input codec + "-s", + "%dx%d" % (self.frame_size), + "-r", + str(fps), # frame rate in frames per second + "-i", + "pipe:", # The input comes from a pipe + "-vcodec", + "gif", # output gif format + "-r", + str(fps), # frame rate in frames per second + "-y", + "-vf", + "pad=width=ceil(iw/2)*2:height=ceil(ih/2)*2", + "-an", + filename, # output filename ] if mp.verbosity.meep > 0: print("Generating GIF...") proc = Popen(command, stdin=PIPE, stdout=PIPE, stderr=PIPE) for i in range(len(self._saved_frames)): proc.stdin.write(self._saved_frames[i]) - out, err = proc.communicate() # pipe in images + out, err = proc.communicate() # pipe in images proc.stdin.close() proc.wait() return - def to_mp4(self,fps,filename): + def to_mp4(self, fps, filename): """ Generates and outputs an mp4 video file of the animation with the filename, `filename`, and the frame rate, `fps`. Default encoding is h264 with yuv420p @@ -1086,29 +1273,41 @@ def to_mp4(self,fps,filename): # requires ffmpeg to be installed # modified from the matplotlib library if mp.am_master(): - from subprocess import Popen, PIPE - from io import TextIOWrapper, BytesIO - FFMPEG_BIN = 'ffmpeg' - command = [FFMPEG_BIN, - '-f', 'image2pipe', # force piping of rawvideo - '-vcodec', self.frame_format, # raw input codec - '-s', '%dx%d' % (self.frame_size), - #'-pix_fmt', self.frame_format, - '-r', str(fps), # frame rate in frames per second - '-i', 'pipe:', # The input comes from a pipe - '-vcodec', self.codec, # output mp4 format - '-pix_fmt','yuv420p', - '-r', str(fps), # frame rate in frames per second - '-y', - '-vf', 'pad=width=ceil(iw/2)*2:height=ceil(ih/2)*2', - '-an', filename # output filename + from io import BytesIO, TextIOWrapper + from subprocess import PIPE, Popen + + FFMPEG_BIN = "ffmpeg" + command = [ + FFMPEG_BIN, + "-f", + "image2pipe", # force piping of rawvideo + "-vcodec", + self.frame_format, # raw input codec + "-s", + "%dx%d" % (self.frame_size), + #'-pix_fmt', self.frame_format, + "-r", + str(fps), # frame rate in frames per second + "-i", + "pipe:", # The input comes from a pipe + "-vcodec", + self.codec, # output mp4 format + "-pix_fmt", + "yuv420p", + "-r", + str(fps), # frame rate in frames per second + "-y", + "-vf", + "pad=width=ceil(iw/2)*2:height=ceil(ih/2)*2", + "-an", + filename, # output filename ] if mp.verbosity.meep > 0: print("Generating MP4...") proc = Popen(command, stdin=PIPE, stdout=PIPE, stderr=PIPE) for i in range(len(self._saved_frames)): proc.stdin.write(self._saved_frames[i]) - out, err = proc.communicate() # pipe in images + out, err = proc.communicate() # pipe in images proc.stdin.close() proc.wait() return @@ -1118,19 +1317,23 @@ def reset(self): self.ax = None self.f = None - def set_figure(self,f): + def set_figure(self, f): self.f = f + # ------------------------------------------------------- # # JS_Animation # ------------------------------------------------------- # # A helper class used to make jshtml animations embed # seamlessly within Jupyter notebooks. -class JS_Animation(): - def __init__(self,jshtml): + +class JS_Animation: + def __init__(self, jshtml): self.jshtml = jshtml + def _repr_html_(self): return self.jshtml + def get_jshtml(self): return self.jshtml diff --git a/scheme/casimir.scm b/scheme/casimir.scm index 1f01d183a..5c802e3ca 100644 --- a/scheme/casimir.scm +++ b/scheme/casimir.scm @@ -6,15 +6,15 @@ ; return a list (source-vol mx my mz) ; given the volume integration-vol and n, pick out the appropriate side and mx my mz to use ; sides are ordered by decreasing weight -; weights are w(side, m) = area(side)/total area * 1/(m+1)^4, a rough estimate of the -; contribution to the stress tensor from that side and that m +; weights are w(side, m) = area(side)/total area * 1/(m+1)^4, a rough estimate of the +; contribution to the stress tensor from that side and that m (define (casimir-source-info integration-vol n) (define (modround x n) (modulo (inexact->exact (round x)) n)) - (define (get-src-index n) ;given n, extract out the two values of m for 3-d + (define (get-src-index n) ;given n, extract out the two values of m for 3-d (let* ((s 0) ;sum of diagonals (r 0) ;row intersection (c 0));column intersection - (while (< (+ s r) n) + (while (< (+ s r) n) (set! r (+ r 1)) (set! s (+ s r))) (set! c (- n s)) @@ -43,8 +43,8 @@ (list (vector3- center-vec xshift) (vector3+ center-vec xshift) (vector3- center-vec yshift) (vector3+ center-vec yshift) (vector3- center-vec zshift) (vector3+ center-vec zshift))) - (m-list - (list (vector3 0 m1 m2) (vector3 0 m1 m2) (vector3 m1 0 m2) + (m-list + (list (vector3 0 m1 m2) (vector3 0 m1 m2) (vector3 m1 0 m2) (vector3 m1 0 m2) (vector3 m1 m2 0) (vector3 m1 m2 0))) (orientation-list (list -1 1 -1 1 -1 1)) (size-list @@ -75,7 +75,7 @@ (list (vector3- new-center-vec z-shift) (vector3+ new-center-vec z-shift) (vector3+ new-center-vec r-shift) (vector3- new-center-vec r-shift))) (m-list - (list (vector3 m-dct m-phi 0) (vector3 m-dct m-phi 0) + (list (vector3 m-dct m-phi 0) (vector3 m-dct m-phi 0) (vector3 0 m-phi m-dct) (vector3 0 m-phi m-dct))) (orientation-list (list -1 1 1 -1)) (size-list @@ -91,7 +91,7 @@ (m (/ (- n s) 4)) (x-const-size (vector3 0 sy )) ;sz may be non-zero for quasi-3d systems (y-const-size (vector3 sx 0 )) - (center-list + (center-list (list (vector3- center-vec xshift) (vector3+ center-vec xshift) (vector3- center-vec yshift) (vector3+ center-vec yshift))) (m-list @@ -105,7 +105,7 @@ (print "Casimir.scm: working in 2 dimensions\n") (print " Surface center: "(list-ref center-list s)"\n") (print " Surface size: "(list-ref size-list s)"\n") - (list surface-vol + (list surface-vol (vector3-x surface-m) (vector3-y surface-m) (vector3-z surface-m) (list-ref orientation-list s) 1)))))) @@ -113,7 +113,7 @@ ;n contains both the side number and the harmonic expansion index (define (casimir-force-contrib force-direction integration-vol n Sigma T source-component gt . step-funcs) (define (cos-func X mx my mz source-vol) - (let* + (let* ((min-corner (meep-volume-get-min-corner source-vol)) (max-corner (meep-volume-get-max-corner source-vol)) (size-vec (vector3- max-corner min-corner)) @@ -147,11 +147,11 @@ (begin (set! global-B-conductivity Sigma) (set! global-D-conductivity 0))) - (if (eq? dimensions -2) + (if (eq? dimensions -2) (begin (print "Cylindricals: m = "my" and (nr nz) = ("mx", "mz")\n") (print " surface center = "(meep-volume-center source-vol)"\n") - (print " source size = "(vector3- - (meep-volume-get-max-corner source-vol) + (print " source size = "(vector3- + (meep-volume-get-max-corner source-vol) (meep-volume-get-min-corner source-vol))) (set! m my))) ;set exp(i m phi) field dependence (set! sources @@ -173,13 +173,13 @@ (define (integrate-function) (let* ((f-temp (meep-fields-casimir-stress-dct-integral fields - force-direction + force-direction (meep-component-direction source-component) mx (if (eq? dimensions -2) 0 my) mz ft source-vol))) (set! force-integral (+ force-integral - (imag-part (* (list-ref gt counter) dt + (imag-part (* (list-ref gt counter) dt source-orientation (if (eq? dimensions -2) (* (if (eq? my 0) 1 2) @@ -190,8 +190,8 @@ force-integral))) ;%%%%%%%%%%%%%%%%%%%%% BLOCH PBCS %%%%%%%%%%%%%%%%%%%%%% -;here the source is specified in -;the form exp(i k x), k = pi/L (m + k_red), +;here the source is specified in +;the form exp(i k x), k = pi/L (m + k_red), ;m = (mx,my,mz) are integers (reciprocal lattice vectors ;k_red = (kx,ky,kz) is in the 1st BZ, m an integer ;source-vol is assumed to occupy one entire plane intersecting diff --git a/scheme/examples/3rd-harm-1d.ctl b/scheme/examples/3rd-harm-1d.ctl index 36fb77290..261c6812d 100644 --- a/scheme/examples/3rd-harm-1d.ctl +++ b/scheme/examples/3rd-harm-1d.ctl @@ -39,13 +39,13 @@ (make flux-region (center 0 0 (- (* 0.5 sz) dpml 0.5))))) ; also compute a ''single'' flux point at fcen and 3*fcen -(define trans1 (add-flux fcen 0 1 (make flux-region +(define trans1 (add-flux fcen 0 1 (make flux-region (center 0 0 (- (* 0.5 sz) dpml 0.5))))) -(define trans3 (add-flux (* 3 fcen) 0 1 (make flux-region +(define trans3 (add-flux (* 3 fcen) 0 1 (make flux-region (center 0 0 (- (* 0.5 sz) dpml 0.5))))) (run-sources+ - (stop-when-fields-decayed 50 Ex + (stop-when-fields-decayed 50 Ex (vector3 0 0 (- (* 0.5 sz) dpml 0.5)) 1e-6)) diff --git a/scheme/examples/bend-flux.ctl b/scheme/examples/bend-flux.ctl index 9fed645d6..35fda3e21 100644 --- a/scheme/examples/bend-flux.ctl +++ b/scheme/examples/bend-flux.ctl @@ -16,16 +16,16 @@ (set! geometry (if no-bend? (list - (make block + (make block (center 0 wvg-ycen) (size infinity w infinity) (material (make dielectric (epsilon 12))))) (list - (make block + (make block (center (* -0.5 pad) wvg-ycen) (size (- sx pad) w infinity) (material (make dielectric (epsilon 12)))) - (make block + (make block (center wvg-xcen (* 0.5 pad)) (size w (- sy pad) infinity) (material (make dielectric (epsilon 12))))))) @@ -33,7 +33,7 @@ (define-param fcen 0.15) ; pulse center frequency (define-param df 0.1) ; pulse width (in frequency) (set! sources (list - (make source + (make source (src (make gaussian-src (frequency fcen) (fwidth df))) (component Ez) (center (+ 1 (* -0.5 sx)) wvg-ycen) @@ -52,15 +52,15 @@ (center wvg-xcen (- (/ sy 2) 1.5)) (size (* w 2) 0))))) (define refl ; reflected flux (add-flux fcen df nfreq - (make flux-region + (make flux-region (center (+ (* -0.5 sx) 1.5) wvg-ycen) (size 0 (* w 2))))) ; for normal run, load negated fields to subtract incident from refl. fields (if (not no-bend?) (load-minus-flux "refl-flux" refl)) -(run-sources+ +(run-sources+ (stop-when-fields-decayed 50 Ez - (if no-bend? + (if no-bend? (vector3 (- (/ sx 2) 1.5) wvg-ycen) (vector3 wvg-xcen (- (/ sy 2) 1.5))) 1e-3) diff --git a/scheme/examples/holey-wvg-bands.ctl b/scheme/examples/holey-wvg-bands.ctl index 12a463dfc..8b9a82bd9 100644 --- a/scheme/examples/holey-wvg-bands.ctl +++ b/scheme/examples/holey-wvg-bands.ctl @@ -26,7 +26,7 @@ (set! pml-layers (list (make pml (direction Y) (thickness dpml)))) (set-param! resolution 20) -(define-param fcen 0.25) ; pulse center frequency +(define-param fcen 0.25) ; pulse center frequency (define-param df 1.5) ; pulse freq. width: large df = short impulse (set! sources (list @@ -42,7 +42,7 @@ (if kx (begin (set! k-point (vector3 kx)) - (run-sources+ + (run-sources+ 300 (at-beginning output-epsilon) (after-sources (harminv Hz (vector3 0.1234 0) fcen df))) (run-until (/ 1 fcen) (at-every (/ 1 fcen 20) output-hfield-z))) diff --git a/scheme/examples/holey-wvg-cavity.ctl b/scheme/examples/holey-wvg-cavity.ctl index fe0b09f33..3abc97728 100644 --- a/scheme/examples/holey-wvg-cavity.ctl +++ b/scheme/examples/holey-wvg-cavity.ctl @@ -36,8 +36,8 @@ (set! pml-layers (list (make pml (thickness dpml)))) (set-param! resolution 20) -(define-param fcen 0.25) ; pulse center frequency -(define-param df 0.2) ; pulse width (in frequency) +(define-param fcen 0.25) ; pulse center frequency +(define-param df 0.2) ; pulse width (in frequency) (define-param nfreq 500) ; number of frequencies at which to compute flux @@ -58,7 +58,7 @@ (run-sources+ 400 (at-beginning output-epsilon) (after-sources (harminv Hz (vector3 0) fcen df))) - (run-until (/ 1 fcen) (at-every (/ 1 fcen 20) output-hfield-z)) + (run-until (/ 1 fcen) (at-every (/ 1 fcen 20) output-hfield-z)) ) (begin (set! sources (list @@ -69,12 +69,12 @@ (size 0 w)))) (set! symmetries (list (make mirror-sym (direction Y) (phase -1)))) - + (let ((trans ; transmitted flux (add-flux fcen df nfreq (make flux-region (center (- (* 0.5 sx) dpml 0.5) 0) (size 0 (* w 2)))))) - + (run-sources+ (stop-when-fields-decayed 50 Ey (vector3 (- (* 0.5 sx) dpml 0.5) 0) @@ -83,6 +83,6 @@ (during-sources (in-volume (volume (center 0 0) (size sx 0)) (to-appended "hz-slice" (at-every 0.4 output-hfield-z))))) - + (display-fluxes trans) ; print out the flux spectrum ))) diff --git a/scheme/examples/material-dispersion.ctl b/scheme/examples/material-dispersion.ctl index 42d7fa38f..325662c63 100644 --- a/scheme/examples/material-dispersion.ctl +++ b/scheme/examples/material-dispersion.ctl @@ -14,7 +14,7 @@ (set! default-material (make dielectric (epsilon 2.25) - (polarizations + (polarizations (make polarizability (omega 1.1) (gamma 1e-5) (sigma 0.5)) (make polarizability @@ -35,8 +35,8 @@ (define all-freqs (run-k-points 200 kpts)) ; a list of lists of frequencies (map (lambda (kx fs) - (map (lambda (f) - (print "eps:, " (real-part f) ", " (imag-part f) + (map (lambda (f) + (print "eps:, " (real-part f) ", " (imag-part f) ", " (sqr (/ kx f)) "\n")) fs)) (map vector3-x kpts) all-freqs) diff --git a/scheme/examples/ring-cyl.ctl b/scheme/examples/ring-cyl.ctl index 336448128..658520497 100644 --- a/scheme/examples/ring-cyl.ctl +++ b/scheme/examples/ring-cyl.ctl @@ -27,13 +27,13 @@ ; put a single point source at some arbitrary place, pointing in some ; arbitrary direction. We will only look for Ez-polarized modes. -(define-param fcen 0.15) ; pulse center frequency -(define-param df 0.1) ; pulse width (in frequency) +(define-param fcen 0.15) ; pulse center frequency +(define-param df 0.1) ; pulse width (in frequency) (set! sources (list (make source (src (make gaussian-src (frequency fcen) (fwidth df))) (component Ez) (center (+ r 0.1) 0)))) - + ; note that the r -> -r mirror symmetry is exploited automatically @@ -44,8 +44,8 @@ ; almost zero and get a distorted view.) We'll append the fields ; to a file to get an r-by-t picture. We'll also output from -sr to -sr ; instead of from 0 to sr. -(run-until (/ 1 fcen) +(run-until (/ 1 fcen) (in-volume (volume (center 0) (size (* 2 sr))) (at-beginning output-epsilon) - (to-appended "ez" + (to-appended "ez" (at-every (/ 1 fcen 20) output-efield-z)))) diff --git a/scheme/materials.scm b/scheme/materials.scm index 7436801d9..9a79485fd 100644 --- a/scheme/materials.scm +++ b/scheme/materials.scm @@ -24,7 +24,7 @@ (define cSi-sig3 -0.107) (define cSi (make medium (epsilon 1.0) - (E-susceptibilities + (E-susceptibilities (make lorentzian-susceptibility (frequency cSi-frq1) (gamma cSi-gam1) (sigma cSi-sig1)) (make lorentzian-susceptibility @@ -42,7 +42,7 @@ (define aSi-sig1 14.571) (define aSi (make medium (epsilon 3.109) - (E-susceptibilities + (E-susceptibilities (make lorentzian-susceptibility (frequency aSi-frq1) (gamma aSi-gam1) (sigma aSi-sig1))))) @@ -56,7 +56,7 @@ (define aSi-H-sig1 12.31) (define aSi-H (make medium (epsilon 3.22) - (E-susceptibilities + (E-susceptibilities (make lorentzian-susceptibility (frequency aSi-H-frq1) (gamma aSi-H-gam1) (sigma aSi-H-sig1))))) @@ -70,7 +70,7 @@ (define ITO-sig1 2.5) (define ITO (make medium (epsilon 1.0) - (E-susceptibilities + (E-susceptibilities (make lorentzian-susceptibility (frequency ITO-frq1) (gamma ITO-gam1) (sigma ITO-sig1))))) @@ -84,7 +84,7 @@ (define Al2O3-sig1 1.52) (define Al2O3 (make medium (epsilon 1.0) - (E-susceptibilities + (E-susceptibilities (make lorentzian-susceptibility (frequency Al2O3-frq1) (gamma Al2O3-gam1) (sigma Al2O3-sig1))))) @@ -98,7 +98,7 @@ (define AlN-sig1 3.306) (define AlN (make medium (epsilon 1.0) - (E-susceptibilities + (E-susceptibilities (make lorentzian-susceptibility (frequency AlN-frq1) (gamma AlN-gam1) (sigma AlN-sig1))))) @@ -116,7 +116,7 @@ (define AlAs-sig2 1.900) (define AlAs (make medium (epsilon 2.0792) - (E-susceptibilities + (E-susceptibilities (make lorentzian-susceptibility (frequency AlAs-frq1) (gamma AlAs-gam1) (sigma AlAs-sig1)) (make lorentzian-susceptibility @@ -138,7 +138,7 @@ (define BK7-sig3 1.01046945) (define BK7 (make medium (epsilon 1.0) - (E-susceptibilities + (E-susceptibilities (make lorentzian-susceptibility (frequency BK7-frq1) (gamma BK7-gam1) (sigma BK7-sig1)) (make lorentzian-susceptibility @@ -162,7 +162,7 @@ (define fused-quartz-sig3 0.897479400) (define fused-quartz (make medium (epsilon 1.0) - (E-susceptibilities + (E-susceptibilities (make lorentzian-susceptibility (frequency fused-quartz-frq1) (gamma fused-quartz-gam1) (sigma fused-quartz-sig1)) (make lorentzian-susceptibility @@ -186,7 +186,7 @@ (define GaAs-sig3 1.957522) (define GaAs (make medium (epsilon 5.372514) - (E-susceptibilities + (E-susceptibilities (make lorentzian-susceptibility (frequency GaAs-frq1) (gamma GaAs-gam1) (sigma GaAs-sig1)) (make lorentzian-susceptibility @@ -204,7 +204,7 @@ (define Si3N4-VISNIR-sig1 2.8939) (define Si3N4-VISNIR (make medium (epsilon 1.0) - (E-susceptibilities + (E-susceptibilities (make lorentzian-susceptibility (frequency Si3N4-VISNIR-frq1) (gamma Si3N4-VISNIR-gam1) (sigma Si3N4-VISNIR-sig1))))) @@ -221,7 +221,7 @@ (define Si3N4-NIR-sig2 40314) (define Si3N4-NIR (make medium (epsilon 1.0) - (E-susceptibilities + (E-susceptibilities (make lorentzian-susceptibility (frequency Si3N4-NIR-frq1) (gamma Si3N4-NIR-gam1) (sigma Si3N4-NIR-sig1)) (make lorentzian-susceptibility @@ -758,7 +758,7 @@ (make lorentzian-susceptibility (frequency Au-visible-frq1) (gamma Au-visible-gam1) (sigma Au-visible-sig1))))) -;------------------------------------------------------------------ +;------------------------------------------------------------------ ;; UNSTABLE: field divergence may occur ; silver (Au) @@ -936,7 +936,7 @@ (define SiN-sig1 1.2650) (define SiN (make medium (epsilon 2.320) - (E-susceptibilities + (E-susceptibilities (make lorentzian-susceptibility (frequency SiN-frq1) (gamma SiN-gam1) (sigma SiN-sig1))))) @@ -950,7 +950,7 @@ (define Si3N4-sig1 4.377) (define Si3N4 (make medium (epsilon 1.0) - (E-susceptibilities + (E-susceptibilities (make lorentzian-susceptibility (frequency Si3N4-frq1) (gamma Si3N4-gam1) (sigma Si3N4-sig1))))) @@ -964,7 +964,7 @@ (define SiO2-sig1 1.12) (define SiO2 (make medium (epsilon 1.0) - (E-susceptibilities + (E-susceptibilities (make lorentzian-susceptibility (frequency SiO2-frq1) (gamma SiO2-gam1) (sigma SiO2-sig1))))) @@ -982,7 +982,7 @@ (define InP-sig2 2.765) (define InP (make medium (epsilon 7.255) - (E-susceptibilities + (E-susceptibilities (make lorentzian-susceptibility (frequency InP-frq1) (gamma InP-gam1) (sigma InP-sig1)) (make lorentzian-susceptibility @@ -1002,7 +1002,7 @@ (define Ge-sig2 0.21307) (define Ge (make medium (epsilon 9.28156) - (E-susceptibilities + (E-susceptibilities (make lorentzian-susceptibility (frequency Ge-frq1) (gamma Ge-gam1) (sigma Ge-sig1)) (make lorentzian-susceptibility @@ -1026,7 +1026,7 @@ (define Si-sig3 1.54133408) (define Si (make medium (epsilon 9.28156) - (E-susceptibilities + (E-susceptibilities (make lorentzian-susceptibility (frequency Si-frq1) (gamma Si-gam1) (sigma Si-sig1)) (make lorentzian-susceptibility @@ -1044,7 +1044,7 @@ (define PMMA-sig1 1.1819) (define PMMA (make medium (epsilon 1.0) - (E-susceptibilities + (E-susceptibilities (make lorentzian-susceptibility (frequency PMMA-frq1) (gamma PMMA-gam1) (sigma PMMA-sig1))))) @@ -1058,7 +1058,7 @@ (define PC-sig1 1.4182) (define PC (make medium (epsilon 1.0) - (E-susceptibilities + (E-susceptibilities (make lorentzian-susceptibility (frequency PC-frq1) (gamma PC-gam1) (sigma PC-sig1))))) @@ -1072,7 +1072,7 @@ (define PS-sig1 1.4435) (define PS (make medium (epsilon 1.0) - (E-susceptibilities + (E-susceptibilities (make lorentzian-susceptibility (frequency PS-frq1) (gamma PS-gam1) (sigma PS-sig1))))) @@ -1086,7 +1086,7 @@ (define CLS-sig1 1.124) (define CLS (make medium (epsilon 1.0) - (E-susceptibilities + (E-susceptibilities (make lorentzian-susceptibility (frequency CLS-frq1) (gamma CLS-gam1) (sigma CLS-sig1))))) diff --git a/scheme/meep_op_renames.i b/scheme/meep_op_renames.i index 6000c9dee..d644d11c9 100644 --- a/scheme/meep_op_renames.i +++ b/scheme/meep_op_renames.i @@ -12,4 +12,3 @@ %rename(meep_dft_chunk_subeq) meep::dft_chunk::operator-=; %rename(meep_dft_flux_subeq) meep::dft_flux::operator-=; - diff --git a/src/GDSIIgeom.cpp b/src/GDSIIgeom.cpp index 172965c14..180d95e03 100644 --- a/src/GDSIIgeom.cpp +++ b/src/GDSIIgeom.cpp @@ -152,8 +152,7 @@ geometric_object_list get_GDSII_prisms(material_type material, const char *GDSII } double height = zmax - zmin; vector3 zaxis = {0, 0, 1}; - prisms.items[np] = - make_prism(material, vertices.get(), num_vertices, height, zaxis); + prisms.items[np] = make_prism(material, vertices.get(), num_vertices, height, zaxis); } return prisms; } diff --git a/src/adjust_verbosity.hpp b/src/adjust_verbosity.hpp index 3ca7df896..f4014b367 100644 --- a/src/adjust_verbosity.hpp +++ b/src/adjust_verbosity.hpp @@ -27,27 +27,29 @@ namespace meep { class adjust_mpb_verbosity { public: adjust_mpb_verbosity() { - #if defined(HAVE_MPB) && (MPB_VERSION_MAJOR > 1 || (MPB_VERSION_MAJOR == 1 && MPB_VERSION_MINOR >= 11)) - old_level = mpb_verbosity; - mpb_verbosity = verbosity - 1; - if (mpb_verbosity < 0) mpb_verbosity = 0; - if (mpb_verbosity > 3) mpb_verbosity = 3; - #else - // avoid warnings - (void)old_level; - #endif +#if defined(HAVE_MPB) && \ + (MPB_VERSION_MAJOR > 1 || (MPB_VERSION_MAJOR == 1 && MPB_VERSION_MINOR >= 11)) + old_level = mpb_verbosity; + mpb_verbosity = verbosity - 1; + if (mpb_verbosity < 0) mpb_verbosity = 0; + if (mpb_verbosity > 3) mpb_verbosity = 3; +#else + // avoid warnings + (void)old_level; +#endif } ~adjust_mpb_verbosity() { - #if defined(HAVE_MPB) && (MPB_VERSION_MAJOR > 1 || (MPB_VERSION_MAJOR == 1 && MPB_VERSION_MINOR >= 11)) - mpb_verbosity = old_level; - #endif +#if defined(HAVE_MPB) && \ + (MPB_VERSION_MAJOR > 1 || (MPB_VERSION_MAJOR == 1 && MPB_VERSION_MINOR >= 11)) + mpb_verbosity = old_level; +#endif } private: int old_level; }; -} +} // namespace meep -#endif // ADJUST_VERBOSITY_H +#endif // ADJUST_VERBOSITY_H diff --git a/src/array_slice.cpp b/src/array_slice.cpp index e131cdd75..fe053011f 100644 --- a/src/array_slice.cpp +++ b/src/array_slice.cpp @@ -76,9 +76,7 @@ std::complex cdouble(std::complex z) { return std::complex(real(z), imag(z)); } -std::complex cdouble(std::complex z) { - return z; -} +std::complex cdouble(std::complex z) { return z; } typedef struct { @@ -127,7 +125,8 @@ typedef struct { } array_slice_data; /* passthrough field function equivalent to component_fun in h5fields.cpp */ -static complex default_field_func(const complex *fields, const vec &loc, void *data_) { +static complex default_field_func(const complex *fields, const vec &loc, + void *data_) { (void)loc; // unused (void)data_; // unused return cdouble(fields[0]); @@ -523,8 +522,11 @@ bool increment(size_t *n, size_t *nMax, int rank) { return true; } -// get the dimensions of reduced arrays (i.e., arrays collapsed along empty dimensions of original volume) -void reduce_array_dimensions(volume where, int rank, size_t dims[3], direction dirs[3], size_t stride[3], int &reduced_rank, size_t reduced_dims[3], direction reduced_dirs[3], size_t reduced_stride[3]) { +// get the dimensions of reduced arrays (i.e., arrays collapsed along empty dimensions of original +// volume) +void reduce_array_dimensions(volume where, int rank, size_t dims[3], direction dirs[3], + size_t stride[3], int &reduced_rank, size_t reduced_dims[3], + direction reduced_dirs[3], size_t reduced_stride[3]) { reduced_rank = 0; reduced_dims[0] = reduced_dims[1] = reduced_dims[2] = stride[0] = stride[1] = stride[2] = @@ -534,7 +536,8 @@ void reduce_array_dimensions(volume where, int rank, size_t dims[3], direction d reduced_stride[r] = 0; // degenerate dimension, to be collapsed else { reduced_dirs[reduced_rank] = dirs[r]; - reduced_dims[reduced_rank++] = dims[r]; // reduced_dims is the size of the array after collapsing + reduced_dims[reduced_rank++] = + dims[r]; // reduced_dims is the size of the array after collapsing } } /*--------------------------------------------------------------*/ @@ -545,8 +548,7 @@ void reduce_array_dimensions(volume where, int rank, size_t dims[3], direction d else if (rank == 3) { stride[0] = dims[1] * dims[2]; stride[1] = dims[2]; - if (reduced_rank == 2) - reduced_stride[reduced_stride[0] != 0 ? 0 : 1] = reduced_dims[1]; + if (reduced_rank == 2) reduced_stride[reduced_stride[0] != 0 ? 0 : 1] = reduced_dims[1]; } } @@ -563,10 +565,11 @@ realnum *collapse_array(realnum *array, int *rank, size_t dims[3], direction dir direction reduced_dirs[3]; size_t reduced_grid_size; int reduced_rank; - reduce_array_dimensions(where, full_rank, dims, dirs, stride, reduced_rank, reduced_dims, reduced_dirs, reduced_stride); + reduce_array_dimensions(where, full_rank, dims, dirs, stride, reduced_rank, reduced_dims, + reduced_dirs, reduced_stride); if (full_rank == 0) return array; - if (reduced_rank==0) { + if (reduced_rank == 0) { *rank = 0; return array; // return array as is for singleton use case } @@ -575,10 +578,11 @@ realnum *collapse_array(realnum *array, int *rank, size_t dims[3], direction dir /*--------------------------------------------------------------*/ /*- allocate reduced array and compress full array into it -*/ /*--------------------------------------------------------------*/ - reduced_grid_size = reduced_dims[0]*reduced_dims[1]*reduced_dims[2]; + reduced_grid_size = reduced_dims[0] * reduced_dims[1] * reduced_dims[2]; size_t reduced_array_size = data_size * reduced_grid_size; realnum *reduced_array = new realnum[reduced_array_size]; - if (!reduced_array) meep::abort("%s:%i: out of memory (%zu)", __FILE__, __LINE__, reduced_array_size); + if (!reduced_array) + meep::abort("%s:%i: out of memory (%zu)", __FILE__, __LINE__, reduced_array_size); memset(reduced_array, 0, reduced_array_size * sizeof(realnum)); size_t n[3] = {0, 0, 0}; @@ -598,8 +602,8 @@ realnum *collapse_array(realnum *array, int *rank, size_t dims[3], direction dir return reduced_array; } -complex *collapse_array(complex *array, int *rank, size_t dims[3], direction dirs[3], - volume where) { +complex *collapse_array(complex *array, int *rank, size_t dims[3], + direction dirs[3], volume where) { return (complex *)collapse_array((realnum *)array, rank, dims, dirs, where, 2); } @@ -624,7 +628,8 @@ void *fields::do_get_array_slice(const volume &where, std::vector com int elem_size = complex_data ? 2 : 1; void *vslice_uncollapsed; - vslice_uncollapsed = memset(new realnum[slice_size * elem_size], 0, slice_size * elem_size * sizeof(realnum)); + vslice_uncollapsed = + memset(new realnum[slice_size * elem_size], 0, slice_size * elem_size * sizeof(realnum)); data.vslice = vslice_uncollapsed; data.snap = snap; @@ -676,14 +681,15 @@ void *fields::do_get_array_slice(const volume &where, std::vector com loop_in_chunks(get_array_slice_chunkloop, (void *)&data, where, Centered, true, snap); if (!snap) { - realnum *slice = collapse_array((realnum *)vslice_uncollapsed, &rank, dims, dirs, where, elem_size); + realnum *slice = + collapse_array((realnum *)vslice_uncollapsed, &rank, dims, dirs, where, elem_size); rank = get_array_slice_dimensions(where, dims, dirs, true, false, 0, &data); slice_size = data.slice_size; - vslice_uncollapsed = (realnum*) slice; + vslice_uncollapsed = (realnum *)slice; } if (vslice) { memcpy(vslice, vslice_uncollapsed, slice_size * elem_size * sizeof(realnum)); - delete[] (realnum*) vslice_uncollapsed; + delete[](realnum *) vslice_uncollapsed; } else vslice = vslice_uncollapsed; @@ -709,9 +715,11 @@ realnum *fields::get_array_slice(const volume &where, std::vector com frequency, snap); } -complex *fields::get_complex_array_slice(const volume &where, std::vector components, - field_function fun, void *fun_data, complex *slice, - double frequency, bool snap) { +complex *fields::get_complex_array_slice(const volume &where, + std::vector components, + field_function fun, void *fun_data, + complex *slice, double frequency, + bool snap) { return (complex *)do_get_array_slice(where, components, fun, 0, fun_data, (void *)slice, frequency, snap); } @@ -730,16 +738,17 @@ realnum *fields::get_array_slice(const volume &where, derived_component c, realn component carray[12]; field_rfunction rfun = derived_component_func(c, gv, nfields, carray); std::vector cs(carray, carray + nfields); - return (realnum *)do_get_array_slice(where, cs, 0, rfun, &nfields, (void *)slice, - frequency, snap); + return (realnum *)do_get_array_slice(where, cs, 0, rfun, &nfields, (void *)slice, frequency, + snap); } -complex *fields::get_complex_array_slice(const volume &where, component c, complex *slice, - double frequency, bool snap) { +complex *fields::get_complex_array_slice(const volume &where, component c, + complex *slice, double frequency, + bool snap) { std::vector components(1); components[0] = c; - return (complex *)do_get_array_slice(where, components, default_field_func, 0, 0, (void *)slice, - frequency, snap); + return (complex *)do_get_array_slice(where, components, default_field_func, 0, 0, + (void *)slice, frequency, snap); } complex *fields::get_source_slice(const volume &where, component source_slice_component, @@ -765,7 +774,7 @@ complex *fields::get_source_slice(const volume &where, component source if (slice) { memcpy(slice, slice_collapsed, 2 * slice_size * sizeof(realnum)); - delete[] (complex*) slice_collapsed; + delete[](complex *) slice_collapsed; } else slice = slice_collapsed; diff --git a/src/boundaries.cpp b/src/boundaries.cpp index dc136c2f1..be4917090 100644 --- a/src/boundaries.cpp +++ b/src/boundaries.cpp @@ -68,13 +68,13 @@ comms_sequence optimize_comms_operations(const std::vector &ope // Assemble send operations. for (const auto &size_pair : send_op_sizes) { int my_chunk_idx = size_pair.first; - const auto& ops_vector = send_ops_by_my_chunk_idx[my_chunk_idx]; + const auto &ops_vector = send_ops_by_my_chunk_idx[my_chunk_idx]; ret.send_ops.insert(std::end(ret.send_ops), std::begin(ops_vector), std::end(ops_vector)); } return ret; } -} // namespace +} // namespace void fields::set_boundary(boundary_side b, direction d, boundary_condition cond) { if (boundaries[b][d] != cond) { @@ -120,9 +120,9 @@ ivec fields::ilattice_vector(direction d) const { switch (d) { case X: return ivec(user_volume.nx() * 2, 0); case Y: return ivec(0, user_volume.ny() * 2); - case Z: // fall-thru - case R: // fall-thru - case P: // fall-thru + case Z: // fall-thru + case R: // fall-thru + case P: // fall-thru case NO_DIRECTION: break; } case D3: @@ -130,8 +130,8 @@ ivec fields::ilattice_vector(direction d) const { case X: return ivec(user_volume.nx() * 2, 0, 0); case Y: return ivec(0, user_volume.ny() * 2, 0); case Z: return ivec(0, 0, user_volume.nz() * 2); - case R: // fall-thru - case P: // fall-thru + case R: // fall-thru + case P: // fall-thru case NO_DIRECTION: break; } } diff --git a/src/casimir.cpp b/src/casimir.cpp index 10756d595..ebc42cf56 100644 --- a/src/casimir.cpp +++ b/src/casimir.cpp @@ -214,8 +214,10 @@ complex fields::casimir_stress_dct_integral(direction dforce, direction if (where.dim != gv.dim) meep::abort("invalid dimesionality in casimir_stress_dct_integral"); if (coordinate_mismatch(gv.dim, dforce) || coordinate_mismatch(gv.dim, dsource)) meep::abort("invalid directions in casimir_stress_dct_integral"); - if (dnormal == NO_DIRECTION) meep::abort("invalid integration surface in casimir_stress_dct_integral"); - if (ft != E_stuff && ft != H_stuff) meep::abort("invalid field type in casimir_stress_dct_integral"); + if (dnormal == NO_DIRECTION) + meep::abort("invalid integration surface in casimir_stress_dct_integral"); + if (ft != E_stuff && ft != H_stuff) + meep::abort("invalid field type in casimir_stress_dct_integral"); if (dforce != dnormal && dsource != dnormal) return 0.0; diff --git a/src/dft.cpp b/src/dft.cpp index d7780e090..802687df9 100644 --- a/src/dft.cpp +++ b/src/dft.cpp @@ -81,11 +81,11 @@ dft_chunk::dft_chunk(fields_chunk *fc_, ivec is_, ivec ie_, vec s0_, vec s1_, ve by 1 pixel in each dimension, while ensuring we don't step outside of the chunk loop itself */ - if(persist){ + if (persist) { is_old = is_; ie_old = ie_; - is = max(is-one_ivec(fc->gv.dim)*2,fc->gv.little_corner()); - ie = min(ie+one_ivec(fc->gv.dim)*2,fc->gv.big_corner()); + is = max(is - one_ivec(fc->gv.dim) * 2, fc->gv.little_corner()); + ie = min(ie + one_ivec(fc->gv.dim) * 2, fc->gv.big_corner()); } if (use_centered_grid) @@ -174,8 +174,8 @@ static void add_dft_chunkloop(fields_chunk *fc, int ichunk, component cgrid, ive dft_chunk *fields::add_dft(component c, const volume &where, const double *freq, size_t Nfreq, bool include_dV_and_interp_weights, complex stored_weight, dft_chunk *chunk_next, bool sqrt_dV_and_interp_weights, - complex extra_weight, bool use_centered_grid, - int vc, int decimation_factor, bool persist) { + complex extra_weight, bool use_centered_grid, int vc, + int decimation_factor, bool persist) { if (coordinate_mismatch(gv.dim, c)) return NULL; /* If you call add_dft before adding sources, it will do nothing @@ -185,7 +185,7 @@ dft_chunk *fields::add_dft(component c, const volume &where, const double *freq, meep::abort("allocate field components (by adding sources) before adding dft objects"); if (!include_dV_and_interp_weights && sqrt_dV_and_interp_weights) meep::abort("include_dV_and_interp_weights must be true for sqrt_dV_and_interp_weights=true in " - "add_dft"); + "add_dft"); dft_chunk_data data; data.persist = persist; @@ -198,13 +198,14 @@ dft_chunk *fields::add_dft(component c, const volume &where, const double *freq, if (s->get_fwidth() == 0) decimation_factor = 1; else - src_freq_max = std::max(src_freq_max, std::abs(s->frequency().real())+0.5*s->get_fwidth()); + src_freq_max = + std::max(src_freq_max, std::abs(s->frequency().real()) + 0.5 * s->get_fwidth()); } double freq_max = 0; for (size_t i = 0; i < Nfreq; ++i) freq_max = std::max(freq_max, std::abs(freq[i])); if ((freq_max > 0) && (src_freq_max > 0)) - decimation_factor = std::max(1, int(std::floor(1/(dt*(freq_max + src_freq_max))))); + decimation_factor = std::max(1, int(std::floor(1 / (dt * (freq_max + src_freq_max))))); else decimation_factor = 1; } @@ -294,7 +295,8 @@ void dft_chunk::update_dft(double time) { else { realnum fr = f[0]; for (int i = 0; i < Nomega; ++i) - dft[Nomega * idx_dft + i] += std::complex{fr * dft_phase[i].real(), fr * dft_phase[i].imag()}; + dft[Nomega * idx_dft + i] += + std::complex{fr * dft_phase[i].real(), fr * dft_phase[i].imag()}; } } } @@ -318,7 +320,7 @@ double fields_chunk::dft_norm2(grid_volume fgv) const { return sum; } -static double sqr(std::complex x) { return (x*std::conj(x)).real(); } +static double sqr(std::complex x) { return (x * std::conj(x)).real(); } double dft_chunk::norm2(grid_volume fgv) const { if (!fc->f[c][0]) return 0.0; @@ -331,22 +333,22 @@ double dft_chunk::norm2(grid_volume fgv) const { and can replicate results with different chunk combinations. */ if (persist) { - grid_volume subgv = fgv.subvolume(is,ie,c); + grid_volume subgv = fgv.subvolume(is, ie, c); LOOP_OVER_IVECS(subgv, is_old, ie_old, idx) { for (size_t i = 0; i < Nomega; ++i) - sum += sqr(dft[Nomega * idx + i]); - } - } + sum += sqr(dft[Nomega * idx + i]); + } + } /* note we place the if outside of the loop to avoid branching. This routine gets called a lot, so let's try to stay efficient (at the expense of uglier code). */ - else{ + else { LOOP_OVER_IVECS(fgv, is, ie, idx) { - idx_dft = IVEC_LOOP_COUNTER; - for (size_t i = 0; i < Nomega; ++i) - sum += sqr(dft[Nomega * idx_dft + i]); + idx_dft = IVEC_LOOP_COUNTER; + for (size_t i = 0; i < Nomega; ++i) + sum += sqr(dft[Nomega * idx_dft + i]); } } @@ -358,8 +360,7 @@ double dft_chunk::norm2(grid_volume fgv) const { int fields::max_decimation() const { int maxdec = 1; for (int i = 0; i < num_chunks; i++) - if (chunks[i]->is_mine()) - maxdec = std::max(maxdec, chunks[i]->max_decimation()); + if (chunks[i]->is_mine()) maxdec = std::max(maxdec, chunks[i]->max_decimation()); return max_to_all(maxdec); } @@ -374,8 +375,7 @@ int fields_chunk::max_decimation() const { double fields::dft_maxfreq() const { double maxfreq = 0; for (int i = 0; i < num_chunks; i++) - if (chunks[i]->is_mine()) - maxfreq = std::max(maxfreq, chunks[i]->dft_maxfreq()); + if (chunks[i]->is_mine()) maxfreq = std::max(maxfreq, chunks[i]->dft_maxfreq()); return max_to_all(maxfreq); } @@ -383,12 +383,12 @@ double fields_chunk::dft_maxfreq() const { double maxomega = 0; for (dft_chunk *cur = dft_chunks; cur; cur = cur->next_in_chunk) maxomega = std::max(maxomega, cur->maxomega()); - return maxomega / (2*meep::pi); + return maxomega / (2 * meep::pi); } double dft_chunk::maxomega() const { double maxomega = 0; - for (const auto& o : omega) + for (const auto &o : omega) maxomega = std::max(maxomega, std::abs(o)); return maxomega; } @@ -414,7 +414,7 @@ void dft_chunk::operator-=(const dft_chunk &chunk) { size_t my_dft_chunks_Ntotal(dft_chunk *dft_chunks, size_t *my_start) { // When writing to a sharded file, we write out only the chunks we own. -size_t n = 0; + size_t n = 0; for (dft_chunk *cur = dft_chunks; cur; cur = cur->next_in_dft) n += cur->N * cur->omega.size() * 2; @@ -431,12 +431,13 @@ size_t dft_chunks_Ntotal(dft_chunk *dft_chunks, size_t *my_start) { } size_t dft_chunks_Ntotal(dft_chunk *dft_chunks, size_t *my_start, bool single_parallel_file) { - return single_parallel_file ? dft_chunks_Ntotal(dft_chunks, my_start) : - my_dft_chunks_Ntotal(dft_chunks, my_start); + return single_parallel_file ? dft_chunks_Ntotal(dft_chunks, my_start) + : my_dft_chunks_Ntotal(dft_chunks, my_start); } // Note: the file must have been created in parallel mode, typically via fields::open_h5file. -void save_dft_hdf5(dft_chunk *dft_chunks, const char *name, h5file *file, const char *dprefix, bool single_parallel_file) { +void save_dft_hdf5(dft_chunk *dft_chunks, const char *name, h5file *file, const char *dprefix, + bool single_parallel_file) { size_t istart; size_t n = dft_chunks_Ntotal(dft_chunks, &istart, single_parallel_file); @@ -455,11 +456,13 @@ void save_dft_hdf5(dft_chunk *dft_chunks, const char *name, h5file *file, const file->done_writing_chunks(); } -void save_dft_hdf5(dft_chunk *dft_chunks, component c, h5file *file, const char *dprefix, bool single_parallel_file) { +void save_dft_hdf5(dft_chunk *dft_chunks, component c, h5file *file, const char *dprefix, + bool single_parallel_file) { save_dft_hdf5(dft_chunks, component_name(c), file, dprefix, single_parallel_file); } -void load_dft_hdf5(dft_chunk *dft_chunks, const char *name, h5file *file, const char *dprefix, bool single_parallel_file) { +void load_dft_hdf5(dft_chunk *dft_chunks, const char *name, h5file *file, const char *dprefix, + bool single_parallel_file) { size_t istart; size_t n = dft_chunks_Ntotal(dft_chunks, &istart, single_parallel_file); @@ -473,7 +476,7 @@ void load_dft_hdf5(dft_chunk *dft_chunks, const char *name, h5file *file, const file->read_size(dataname, &file_rank, &file_dims, 1); if (file_rank != 1 || file_dims != n) meep::abort("incorrect dataset size (%zd vs. %zd) in load_dft_hdf5 %s:%s", file_dims, n, - file->file_name(), dataname); + file->file_name(), dataname); for (dft_chunk *cur = dft_chunks; cur; cur = cur->next_in_dft) { size_t Nchunk = cur->N * cur->omega.size() * 2; @@ -482,7 +485,8 @@ void load_dft_hdf5(dft_chunk *dft_chunks, const char *name, h5file *file, const } } -void load_dft_hdf5(dft_chunk *dft_chunks, component c, h5file *file, const char *dprefix, bool single_parallel_file) { +void load_dft_hdf5(dft_chunk *dft_chunks, component c, h5file *file, const char *dprefix, + bool single_parallel_file) { load_dft_hdf5(dft_chunks, component_name(c), file, dprefix, single_parallel_file); } @@ -602,10 +606,9 @@ dft_flux fields::add_dft_flux(const volume_list *where_, const double *freq, siz } for (int i = 0; i < 2; ++i) { - E = add_dft(cE[i], where->v, freq, Nfreq, true, - where->weight * double(1 - 2 * i), E, false, std::complex(1.0,0), - centered_grid, 0, decimation_factor); - H = add_dft(cH[i], where->v, freq, Nfreq, false, 1.0, H, false, std::complex(1.0,0), + E = add_dft(cE[i], where->v, freq, Nfreq, true, where->weight * double(1 - 2 * i), E, false, + std::complex(1.0, 0), centered_grid, 0, decimation_factor); + H = add_dft(cH[i], where->v, freq, Nfreq, false, 1.0, H, false, std::complex(1.0, 0), centered_grid, 0, decimation_factor); } @@ -702,14 +705,14 @@ dft_energy fields::add_dft_energy(const volume_list *where_, const double *freq, volume_list *where_save = where; while (where) { LOOP_OVER_FIELD_DIRECTIONS(gv.dim, d) { - E = add_dft(direction_component(Ex, d), where->v, freq, Nfreq, true, 1.0, E, - false, 1.0, true, 0, decimation_factor); - D = add_dft(direction_component(Dx, d), where->v, freq, Nfreq, false, 1.0, D, - false, 1.0, true, 0, decimation_factor); - H = add_dft(direction_component(Hx, d), where->v, freq, Nfreq, true, 1.0, H, - false, 1.0, true, 0, decimation_factor); - B = add_dft(direction_component(Bx, d), where->v, freq, Nfreq, false, 1.0, B, - false, 1.0, true, 0, decimation_factor); + E = add_dft(direction_component(Ex, d), where->v, freq, Nfreq, true, 1.0, E, false, 1.0, true, + 0, decimation_factor); + D = add_dft(direction_component(Dx, d), where->v, freq, Nfreq, false, 1.0, D, false, 1.0, + true, 0, decimation_factor); + H = add_dft(direction_component(Hx, d), where->v, freq, Nfreq, true, 1.0, H, false, 1.0, true, + 0, decimation_factor); + B = add_dft(direction_component(Bx, d), where->v, freq, Nfreq, false, 1.0, B, false, 1.0, + true, 0, decimation_factor); } where = where->next; } @@ -794,7 +797,8 @@ direction fields::normal_direction(const volume &where) const { if (d == NO_DIRECTION && gv.dim == D2 && beta != 0 && where_pad.in_direction(X) > 0 && where_pad.in_direction(Y) > 0) d = Z; - if (d == NO_DIRECTION) meep::abort("Could not determine normal direction for given grid_volume."); + if (d == NO_DIRECTION) + meep::abort("Could not determine normal direction for given grid_volume."); } return d; } @@ -808,10 +812,10 @@ dft_flux fields::add_dft_flux(direction d, const volume &where, const double *fr return flux; } - dft_flux fields::add_mode_monitor(direction d, const volume &where, const double *freq, size_t Nfreq, bool centered_grid, int decimation_factor) { - return add_dft_flux(d, where, freq, Nfreq, /*use_symmetry=*/false, centered_grid, decimation_factor); + return add_dft_flux(d, where, freq, Nfreq, /*use_symmetry=*/false, centered_grid, + decimation_factor); } dft_flux fields::add_dft_flux_box(const volume &where, double freq_min, double freq_max, @@ -896,14 +900,17 @@ dft_fields fields::add_dft_fields(component *components, int num_components, con /***************************************************************/ /* chunk-level processing for fields::process_dft_component. */ /***************************************************************/ -complex dft_chunk::process_dft_component(int rank, direction *ds, ivec min_corner, ivec max_corner, - int num_freq, h5file *file, realnum *buffer, int reim, - complex *field_array, void *mode1_data, void *mode2_data, - int ic_conjugate, bool retain_interp_weights, - fields *parent) { - - if ((num_freq < 0) || (num_freq > static_cast(omega.size())-1)) - meep::abort("process_dft_component: frequency index %d is outside the range of the frequency array of size %lu",num_freq,omega.size()); +complex dft_chunk::process_dft_component(int rank, direction *ds, ivec min_corner, + ivec max_corner, int num_freq, h5file *file, + realnum *buffer, int reim, + complex *field_array, void *mode1_data, + void *mode2_data, int ic_conjugate, + bool retain_interp_weights, fields *parent) { + + if ((num_freq < 0) || (num_freq > static_cast(omega.size()) - 1)) + meep::abort("process_dft_component: frequency index %d is outside the range of the frequency " + "array of size %lu", + num_freq, omega.size()); /*****************************************************************/ /* compute the size of the chunk we own and its strides etc. */ @@ -969,14 +976,13 @@ complex dft_chunk::process_dft_component(int rank, direction *ds, ivec m double interp_w = retain_interp_weights ? IVEC_LOOP_WEIGHT(s0i, s1i, e0i, e1i, 1.0) : 1.0; complex dft_val = - (c_conjugate == NO_COMPONENT - ? w - : c_conjugate == Dielectric - ? parent->get_eps(loc) - : c_conjugate == Permeability - ? parent->get_mu(loc) - : complex(dft[omega.size() * (chunk_idx++) + num_freq]) / stored_weight); - if (include_dV_and_interp_weights && dft_val!=0.0) dft_val /= (sqrt_dV_and_interp_weights ? sqrt(w) : w); + (c_conjugate == NO_COMPONENT ? w + : c_conjugate == Dielectric ? parent->get_eps(loc) + : c_conjugate == Permeability + ? parent->get_mu(loc) + : complex(dft[omega.size() * (chunk_idx++) + num_freq]) / stored_weight); + if (include_dV_and_interp_weights && dft_val != 0.0) + dft_val /= (sqrt_dV_and_interp_weights ? sqrt(w) : w); complex mode1val = 0.0, mode2val = 0.0; if (mode1_data) mode1val = eigenmode_amplitude(mode1_data, loc, S.transform(c_conjugate, sn)); @@ -1023,7 +1029,10 @@ complex dft_chunk::process_dft_component(int rank, direction *ds, ivec m } // get variables that are needed by complex fields::process_dft_component -void fields::get_dft_component_dims(dft_chunk **chunklists, int num_chunklists, component c, ivec &min_corner, ivec &max_corner, size_t &array_size, size_t &bufsz, int &rank, direction *ds, size_t *dims, int *array_rank, size_t *array_dims, direction *array_dirs) { +void fields::get_dft_component_dims(dft_chunk **chunklists, int num_chunklists, component c, + ivec &min_corner, ivec &max_corner, size_t &array_size, + size_t &bufsz, int &rank, direction *ds, size_t *dims, + int *array_rank, size_t *array_dims, direction *array_dirs) { /***************************************************************/ /* get statistics on the volume slice **************************/ /***************************************************************/ @@ -1114,11 +1123,13 @@ void fields::get_dft_component_dims(dft_chunk **chunklists, int num_chunklists, /* if where is non-null, only field components inside *where */ /* are processed. */ /***************************************************************/ -complex fields::process_dft_component(dft_chunk **chunklists, int num_chunklists, int num_freq, - component c, const char *HDF5FileName, complex **pfield_array, - int *array_rank, size_t *array_dims, direction *array_dirs, - void *mode1_data, void *mode2_data, component c_conjugate, - bool *first_component, bool retain_interp_weights) { +complex fields::process_dft_component(dft_chunk **chunklists, int num_chunklists, + int num_freq, component c, const char *HDF5FileName, + complex **pfield_array, int *array_rank, + size_t *array_dims, direction *array_dirs, + void *mode1_data, void *mode2_data, + component c_conjugate, bool *first_component, + bool retain_interp_weights) { /***************************************************************/ /***************************************************************/ @@ -1134,7 +1145,8 @@ complex fields::process_dft_component(dft_chunk **chunklists, int num_ch int rank; direction ds[3]; size_t array_size, bufsz, dims[3]; - get_dft_component_dims(chunklists, num_chunklists, c, min_corner, max_corner, array_size, bufsz, rank, ds, dims, array_rank, array_dims, array_dirs); + get_dft_component_dims(chunklists, num_chunklists, c, min_corner, max_corner, array_size, bufsz, + rank, ds, dims, array_rank, array_dims, array_dirs); if (rank == 0) { if (pfield_array) *pfield_array = 0; @@ -1184,7 +1196,7 @@ complex fields::process_dft_component(dft_chunk **chunklists, int num_ch /* repeatedly call sum_to_all to consolidate full field array */ /* on all cores */ /***************************************************************/ -#define BUFSIZE 1 << 20 // use 1M element (16 MB) buffer +#define BUFSIZE 1 << 20 // use 1M element (16 MB) buffer complex *buf = new complex[BUFSIZE]; ptrdiff_t offset = 0; size_t remaining = array_size; @@ -1397,14 +1409,14 @@ void fields::get_overlap(void *mode1_data, void *mode2_data, dft_flux flux, int dft_chunk *chunklists[2]; chunklists[0] = flux.E; chunklists[1] = flux.H; - complex ExHy = process_dft_component(chunklists, 2, num_freq, cE[0], 0, 0, 0, 0, 0, mode1_data, - mode2_data, cH[0]); - complex EyHx = process_dft_component(chunklists, 2, num_freq, cE[1], 0, 0, 0, 0, 0, mode1_data, - mode2_data, cH[1]); - complex HyEx = process_dft_component(chunklists, 2, num_freq, cH[0], 0, 0, 0, 0, 0, mode1_data, - mode2_data, cE[0]); - complex HxEy = process_dft_component(chunklists, 2, num_freq, cH[1], 0, 0, 0, 0, 0, mode1_data, - mode2_data, cE[1]); + complex ExHy = process_dft_component(chunklists, 2, num_freq, cE[0], 0, 0, 0, 0, 0, + mode1_data, mode2_data, cH[0]); + complex EyHx = process_dft_component(chunklists, 2, num_freq, cE[1], 0, 0, 0, 0, 0, + mode1_data, mode2_data, cH[1]); + complex HyEx = process_dft_component(chunklists, 2, num_freq, cH[0], 0, 0, 0, 0, 0, + mode1_data, mode2_data, cE[0]); + complex HxEy = process_dft_component(chunklists, 2, num_freq, cH[1], 0, 0, 0, 0, 0, + mode1_data, mode2_data, cE[1]); overlaps[0] = ExHy - EyHx; overlaps[1] = HyEx - HxEy; } @@ -1421,16 +1433,16 @@ void fields::get_mode_mode_overlap(void *mode1_data, void *mode2_data, dft_flux /* deregister all of the remaining dft monitors from the fields object. Note that this does not -delete the underlying dft_chunks! (useful for +delete the underlying dft_chunks! (useful for adjoint calculations, where we want to keep the chunk data around) */ void fields::clear_dft_monitors() { -for (int i = 0; i < num_chunks; i++) - if (chunks[i]->is_mine() && chunks[i]->dft_chunks) chunks[i]->dft_chunks = NULL; + for (int i = 0; i < num_chunks; i++) + if (chunks[i]->is_mine() && chunks[i]->dft_chunks) chunks[i]->dft_chunks = NULL; } // return the size of the dft monitor -std::vector fields::dft_monitor_size(dft_fields fdft, const volume &where, component c){ +std::vector fields::dft_monitor_size(dft_fields fdft, const volume &where, component c) { ivec min_corner, max_corner; int rank, reduced_rank; direction dirs[3], reduced_dirs[3]; @@ -1438,14 +1450,18 @@ std::vector fields::dft_monitor_size(dft_fields fdft, const volume &wher dft_chunk *chunklists[1]; chunklists[0] = fdft.chunks; - get_dft_component_dims(chunklists, 1, c, min_corner, max_corner, array_size, bufsz, rank, dirs, dims); - reduce_array_dimensions(where, rank, dims, dirs, stride, reduced_rank, reduced_dims, reduced_dirs, reduced_stride); + get_dft_component_dims(chunklists, 1, c, min_corner, max_corner, array_size, bufsz, rank, dirs, + dims); + reduce_array_dimensions(where, rank, dims, dirs, stride, reduced_rank, reduced_dims, reduced_dirs, + reduced_stride); std::vector reduced_dims_vec = {reduced_dims[0], reduced_dims[1], reduced_dims[2]}; return reduced_dims_vec; } -std::vector dft_fields::fourier_sourcedata(const volume &where, component c, fields &f, const std::complex* dJ){ +std::vector dft_fields::fourier_sourcedata(const volume &where, component c, + fields &f, + const std::complex *dJ) { const size_t Nfreq = freq.size(); ivec min_corner, max_corner; @@ -1455,9 +1471,12 @@ std::vector dft_fields::fourier_sourcedata(const volume &wher dft_chunk *chunklists[1]; chunklists[0] = chunks; - f.get_dft_component_dims(chunklists, 1, c, min_corner, max_corner, array_size, bufsz, rank, dirs, dims); - reduce_array_dimensions(where, rank, dims, dirs, stride, reduced_rank, reduced_dims, reduced_dirs, reduced_stride); - size_t reduced_grid_size = reduced_dims[0]*reduced_dims[1]*reduced_dims[2]; // total number of points in the monitor + f.get_dft_component_dims(chunklists, 1, c, min_corner, max_corner, array_size, bufsz, rank, dirs, + dims); + reduce_array_dimensions(where, rank, dims, dirs, stride, reduced_rank, reduced_dims, reduced_dirs, + reduced_stride); + size_t reduced_grid_size = + reduced_dims[0] * reduced_dims[1] * reduced_dims[2]; // total number of points in the monitor std::vector temp; @@ -1467,12 +1486,13 @@ std::vector dft_fields::fourier_sourcedata(const volume &wher std::vector idx_arr; std::vector > amp_arr; - std::complex EH0 = std::complex(0,0); + std::complex EH0 = std::complex(0, 0); component c = component(f->c); direction cd = component_direction(c); sourcedata temp_struct = {c, idx_arr, f->fc->chunk_idx, amp_arr}; - int position_array[3] = {0, 0, 0}; // array indicating the position of a point relative to the minimum corner of the monitor + int position_array[3] = {0, 0, 0}; // array indicating the position of a point relative to the + // minimum corner of the monitor LOOP_OVER_IVECS(f->fc->gv, f->is, f->ie, idx) { IVEC_LOOP_LOC(f->fc->gv, x0); @@ -1482,38 +1502,48 @@ std::vector dft_fields::fourier_sourcedata(const volume &wher double dJ_weight = 1; // weight for linear interpolation int nd = 0; - LOOP_OVER_DIRECTIONS(f->fc->gv.dim, d){ - if (where.in_direction(d) > 0) position_array[nd++] = int((ix0.in_direction(d)-min_corner.in_direction(d))/2); - else dJ_weight *= (1-abs(x0.in_direction(d)-where.in_direction_min(d))/(f->fc->gv.inva)); // based on distances + LOOP_OVER_DIRECTIONS(f->fc->gv.dim, d) { + if (where.in_direction(d) > 0) + position_array[nd++] = int((ix0.in_direction(d) - min_corner.in_direction(d)) / 2); + else + dJ_weight *= (1 - abs(x0.in_direction(d) - where.in_direction_min(d)) / + (f->fc->gv.inva)); // based on distances } // index when dJ is flattened to a one-dimenional array - size_t idx_1d = (position_array[0]*reduced_dims[1]+position_array[1])*reduced_dims[2]+position_array[2]; + size_t idx_1d = (position_array[0] * reduced_dims[1] + position_array[1]) * reduced_dims[2] + + position_array[2]; - if (f->avg1==0 && f->avg2==0){ // yee_grid = true + if (f->avg1 == 0 && f->avg2 == 0) { // yee_grid = true temp_struct.idx_arr.push_back(idx); for (size_t i = 0; i < Nfreq; ++i) { - EH0 = dJ_weight*dJ[reduced_grid_size*i+idx_1d]; + EH0 = dJ_weight * dJ[reduced_grid_size * i + idx_1d]; if (is_electric(c)) EH0 *= -1; - if (is_D(c) && f->fc->s->chi1inv[c - Dx + Ex][cd]) EH0 /= -f->fc->s->chi1inv[c - Dx + Ex][cd][idx]; - if (is_B(c) && f->fc->s->chi1inv[c - Bx + Hx][cd]) EH0 /= f->fc->s->chi1inv[c - Bx + Hx][cd][idx]; + if (is_D(c) && f->fc->s->chi1inv[c - Dx + Ex][cd]) + EH0 /= -f->fc->s->chi1inv[c - Dx + Ex][cd][idx]; + if (is_B(c) && f->fc->s->chi1inv[c - Bx + Hx][cd]) + EH0 /= f->fc->s->chi1inv[c - Bx + Hx][cd][idx]; EH0 /= f->S.multiplicity(ix0); temp_struct.amp_arr.push_back(EH0); } } - else{ // yee_grid = false - // four or two neighbouring points in the yee lattice are involved in calculating the value at the center of a voxel - ptrdiff_t site_ind[4] = {idx,idx + f->avg1,idx + f->avg2,idx + f->avg1 + f->avg2}; - for (size_t j = 0; j < 4; ++j){ + else { // yee_grid = false + // four or two neighbouring points in the yee lattice are involved in calculating the value + // at the center of a voxel + ptrdiff_t site_ind[4] = {idx, idx + f->avg1, idx + f->avg2, idx + f->avg1 + f->avg2}; + for (size_t j = 0; j < 4; ++j) { temp_struct.idx_arr.push_back(site_ind[j]); for (size_t i = 0; i < Nfreq; ++i) { - EH0 = dJ_weight*dJ[reduced_grid_size*i+idx_1d]*0.25; // split the amplitude of the adjoint source into four parts + EH0 = dJ_weight * dJ[reduced_grid_size * i + idx_1d] * + 0.25; // split the amplitude of the adjoint source into four parts if (is_electric(c)) EH0 *= -1; - if (is_D(c) && f->fc->s->chi1inv[c - Dx + Ex][cd]) EH0 /= -f->fc->s->chi1inv[c - Dx + Ex][cd][idx]; - if (is_B(c) && f->fc->s->chi1inv[c - Bx + Hx][cd]) EH0 /= f->fc->s->chi1inv[c - Bx + Hx][cd][idx]; + if (is_D(c) && f->fc->s->chi1inv[c - Dx + Ex][cd]) + EH0 /= -f->fc->s->chi1inv[c - Dx + Ex][cd][idx]; + if (is_B(c) && f->fc->s->chi1inv[c - Bx + Hx][cd]) + EH0 /= f->fc->s->chi1inv[c - Bx + Hx][cd][idx]; EH0 /= f->S.multiplicity(ix0); temp_struct.amp_arr.push_back(EH0); diff --git a/src/dft_ldos.cpp b/src/dft_ldos.cpp index f55363e45..e6f994b0f 100644 --- a/src/dft_ldos.cpp +++ b/src/dft_ldos.cpp @@ -66,8 +66,8 @@ double *dft_ldos::ldos() { // overall scale factor double Jsum_all = sum_to_all(Jsum); saved_overall_scale = 4.0 / pi // from definition of LDOS comparison to power - * -0.5 // power = -1/2 Re[E* J] - / (Jsum_all * Jsum_all); // normalize to unit-integral current + * -0.5 // power = -1/2 Re[E* J] + / (Jsum_all * Jsum_all); // normalize to unit-integral current const size_t Nfreq = freq.size(); double *sum = new double[Nfreq]; @@ -113,34 +113,34 @@ void dft_ldos::update(fields &f) { if (fr && fi) // complex E for (size_t j = 0; j < sv.num_points(); j++) { const ptrdiff_t idx = sv.index_at(j); - const complex& A = sv.amplitude_at(j); + const complex &A = sv.amplitude_at(j); EJ += complex(fr[idx], fi[idx]) * conj(A); Jsum += abs(A); } else if (fr) { // E is purely real for (size_t j = 0; j < sv.num_points(); j++) { const ptrdiff_t idx = sv.index_at(j); - const complex& A = sv.amplitude_at(j); + const complex &A = sv.amplitude_at(j); EJ += double(fr[idx]) * conj(A); Jsum += abs(A); } } } - for (const src_vol& sv : f.chunks[ic]->get_sources(B_stuff)) { + for (const src_vol &sv : f.chunks[ic]->get_sources(B_stuff)) { component c = direction_component(Hx, component_direction(sv.c)); realnum *fr = f.chunks[ic]->f[c][0]; realnum *fi = f.chunks[ic]->f[c][1]; if (fr && fi) // complex H for (size_t j = 0; j < sv.num_points(); j++) { const ptrdiff_t idx = sv.index_at(j); - const complex& A = sv.amplitude_at(j); + const complex &A = sv.amplitude_at(j); HJ += complex(fr[idx], fi[idx]) * conj(A); Jsum += abs(A); } else if (fr) { // H is purely real for (size_t j = 0; j < sv.num_points(); j++) { const ptrdiff_t idx = sv.index_at(j); - const complex& A = sv.amplitude_at(j); + const complex &A = sv.amplitude_at(j); HJ += double(fr[idx]) * conj(A); Jsum += abs(A); } diff --git a/src/fields.cpp b/src/fields.cpp index 966d5e5b1..b9f43f338 100644 --- a/src/fields.cpp +++ b/src/fields.cpp @@ -59,8 +59,8 @@ fields::fields(structure *s, double m, double beta, bool zero_fields_near_cylori typedef fields_chunk *fields_chunk_ptr; chunks = new fields_chunk_ptr[num_chunks]; for (int i = 0; i < num_chunks; i++) - chunks[i] = new fields_chunk(s->chunks[i], outdir, m, beta, - zero_fields_near_cylorigin, i, loop_tile_base_db); + chunks[i] = new fields_chunk(s->chunks[i], outdir, m, beta, zero_fields_near_cylorigin, i, + loop_tile_base_db); FOR_FIELD_TYPES(ft) { typedef realnum *realnum_ptr; comm_blocks[ft] = new realnum_ptr[num_chunks * num_chunks]; @@ -188,9 +188,7 @@ fields_chunk::~fields_chunk() { delete dft_chunks; dft_chunks = nxt; } - FOR_FIELD_TYPES(ft) { - delete[] zeroes[ft]; - } + FOR_FIELD_TYPES(ft) { delete[] zeroes[ft]; } FOR_FIELD_TYPES(ft) { for (polarization_state *cur = pol[ft]; cur;) { polarization_state *p = cur; @@ -229,10 +227,13 @@ void check_tiles(grid_volume gv, const std::vector &gvs) { if (gvs[i].intersect_with(gvs[j], &vol_intersection)) meep::abort("gvs[%zu] intersects with gvs[%zu]\n", i, j); size_t sum = 0; - for (const auto& sub_gv : gvs) { sum += sub_gv.nowned_min(); } + for (const auto &sub_gv : gvs) { + sum += sub_gv.nowned_min(); + } size_t v_grid_points = 1; LOOP_OVER_DIRECTIONS(gv.dim, d) { v_grid_points *= gv.num_direction(d); } - if (sum != v_grid_points) meep::abort("v_grid_points = %zu, sum(tiles) = %zu\n", v_grid_points, sum); + if (sum != v_grid_points) + meep::abort("v_grid_points = %zu, sum(tiles) = %zu\n", v_grid_points, sum); } fields_chunk::fields_chunk(structure_chunk *the_s, const char *od, double m, double beta, @@ -252,9 +253,8 @@ fields_chunk::fields_chunk(structure_chunk *the_s, const char *od, double m, dou if (loop_tile_base_db > 0) { split_into_tiles(gv, &gvs_tiled, loop_tile_base_db); check_tiles(gv, gvs_tiled); - } else { - gvs_tiled.push_back(gv); } + else { gvs_tiled.push_back(gv); } FOR_FIELD_TYPES(ft) { polarization_state *cur = NULL; pol[ft] = NULL; @@ -268,9 +268,7 @@ fields_chunk::fields_chunk(structure_chunk *the_s, const char *od, double m, dou cur->next = p; cur = p; } - else { - pol[ft] = cur = p; - } + else { pol[ft] = cur = p; } } } doing_solve_cw = false; @@ -311,9 +309,7 @@ fields_chunk::fields_chunk(const fields_chunk &thef, int chunkidx) : gv(thef.gv) dt = thef.dt; dft_chunks = NULL; gvs_tiled = thef.gvs_tiled; - FOR_FIELD_TYPES(ft) { - gvs_eh[ft] = thef.gvs_eh[ft]; - } + FOR_FIELD_TYPES(ft) { gvs_eh[ft] = thef.gvs_eh[ft]; } FOR_FIELD_TYPES(ft) { polarization_state *cur = NULL; for (polarization_state *ocur = thef.pol[ft]; ocur; ocur = ocur->next) { @@ -327,9 +323,7 @@ fields_chunk::fields_chunk(const fields_chunk &thef, int chunkidx) : gv(thef.gv) cur->next = p; cur = p; } - else { - pol[ft] = cur = p; - } + else { pol[ft] = cur = p; } } } doing_solve_cw = thef.doing_solve_cw; @@ -505,7 +499,7 @@ void fields::require_source_components() { memset(needed, 0, sizeof(needed)); for (int i = 0; i < num_chunks; i++) { FOR_FIELD_TYPES(ft) { - for (const auto& src : chunks[i]->get_sources(ft)) { + for (const auto &src : chunks[i]->get_sources(ft)) { needed[src.c] = 1; } } @@ -517,8 +511,7 @@ void fields::require_source_components() { bool aniso2d = is_aniso2d(); for (int c = 0; c < NUM_FIELD_COMPONENTS; ++c) - if (allneeded[c]) - _require_component(component(c), aniso2d); + if (allneeded[c]) _require_component(component(c), aniso2d); sync_chunk_connections(); } @@ -546,7 +539,8 @@ bool fields::is_aniso2d() { void fields::_require_component(component c, bool aniso2d) { if (!gv.has_field(c)) - meep::abort("cannot require a %s component in a %s grid", component_name(c), dimension_name(gv.dim)); + meep::abort("cannot require a %s component in a %s grid", component_name(c), + dimension_name(gv.dim)); components_allocated = true; @@ -567,9 +561,8 @@ void fields::_require_component(component c, bool aniso2d) { } void fields_chunk::add_source(field_type ft, src_vol &&src) { - auto it = std::find_if(sources[ft].begin(), sources[ft].end(), [&src](const src_vol &other) { - return src_vol::combinable(src, other); - }); + auto it = std::find_if(sources[ft].begin(), sources[ft].end(), + [&src](const src_vol &other) { return src_vol::combinable(src, other); }); if (it != sources[ft].end()) { it->add_amplitudes_from(src); @@ -580,9 +573,7 @@ void fields_chunk::add_source(field_type ft, src_vol &&src) { } void fields_chunk::remove_sources() { - FOR_FIELD_TYPES(ft) { - sources[ft].clear(); - } + FOR_FIELD_TYPES(ft) { sources[ft].clear(); } } void fields::remove_sources() { @@ -674,7 +665,8 @@ void fields_chunk::use_real_fields() { int fields::phase_in_material(const structure *snew, double time) { if (snew->num_chunks != num_chunks) - meep::abort("Can only phase in similar sets of chunks: %d vs %d\n", snew->num_chunks, num_chunks); + meep::abort("Can only phase in similar sets of chunks: %d vs %d\n", snew->num_chunks, + num_chunks); for (int i = 0; i < num_chunks; i++) if (chunks[i]->is_mine()) chunks[i]->phase_in_material(snew->chunks[i]); phasein_time = (int)(time / dt); @@ -728,7 +720,7 @@ void fields::unset_solve_cw_omega() { chunks[i]->unset_solve_cw_omega(); } -void fields::log(const char* prefix) { +void fields::log(const char *prefix) { master_printf("%sFields State:\n", prefix); master_printf("%s a = %g, dt = %g\n", prefix, a, dt); master_printf("%s m = %g, beta = %g\n", prefix, m, beta); @@ -742,11 +734,8 @@ int mirrorindex(int i, int n) { return i >= n ? 2 * n - 1 - i : (i < 0 ? -1 - i /* map the cell coordinates into the range [0,1]. anything outside [0,1] is *mirror* reflected into [0,1] */ -void map_coordinates(double rx, double ry, double rz, - int nx, int ny, int nz, - int &x1, int &y1, int &z1, - int &x2, int &y2, int &z2, - double &dx, double &dy, double &dz, +void map_coordinates(double rx, double ry, double rz, int nx, int ny, int nz, int &x1, int &y1, + int &z1, int &x2, int &y2, int &z2, double &dx, double &dy, double &dz, bool do_fabs) { /* mirror boundary conditions for r just beyond the boundary */ @@ -775,19 +764,16 @@ void map_coordinates(double rx, double ry, double rz, dy = fabs(dy); dz = fabs(dz); } - } /* linearly interpolate a given point in a 3d grid of data. */ -double linear_interpolate(double rx, double ry, double rz, double *data, - int nx, int ny, int nz, int stride) { +double linear_interpolate(double rx, double ry, double rz, double *data, int nx, int ny, int nz, + int stride) { int x1, y1, z1, x2, y2, z2; double dx, dy, dz; - map_coordinates(rx, ry, rz, nx, ny, nz, - x1, y1, z1, x2, y2, z2, - dx, dy, dz); + map_coordinates(rx, ry, rz, nx, ny, nz, x1, y1, z1, x2, y2, z2, dx, dy, dz); /* define a macro to give us data(x,y,z) on the grid, in row-major order (the order used by HDF5): */ diff --git a/src/fields_dump.cpp b/src/fields_dump.cpp index fe704a393..34bac631a 100644 --- a/src/fields_dump.cpp +++ b/src/fields_dump.cpp @@ -58,9 +58,7 @@ void fields::dump_fields_chunk_field(h5file *h5f, bool single_parallel_file, for (int c = 0; c < NUM_FIELD_COMPONENTS; ++c) { for (int d = 0; d < 2; ++d) { realnum **f = field_ptr_getter(chunks[i], c, d); - if (*f) { - my_ntot += (num_f_[(chunk_i * NUM_FIELD_COMPONENTS + c) * 2 + d] = ntot); - } + if (*f) { my_ntot += (num_f_[(chunk_i * NUM_FIELD_COMPONENTS + c) * 2 + d] = ntot); } } } } @@ -71,9 +69,8 @@ void fields::dump_fields_chunk_field(h5file *h5f, bool single_parallel_file, if (single_parallel_file) { num_f.resize(num_f_size); sum_to_master(num_f_.data(), num_f.data(), num_f_size); - } else { - num_f = std::move(num_f_); } + else { num_f = std::move(num_f_); } /* determine total dataset size and offset of this process's data */ size_t my_start = 0; @@ -87,12 +84,11 @@ void fields::dump_fields_chunk_field(h5file *h5f, bool single_parallel_file, size_t start[3] = {0, 0, 0}; std::string num_f_name = std::string("num_") + field_name; h5f->create_data(num_f_name.c_str(), 3, dims); - if (am_master() || !single_parallel_file) { - h5f->write_chunk(3, start, dims, num_f.data()); - } + if (am_master() || !single_parallel_file) { h5f->write_chunk(3, start, dims, num_f.data()); } /* write the data */ - h5f->create_data(field_name.c_str(), 1, &ntotal, false /* append_data */, false /* single_precision */); + h5f->create_data(field_name.c_str(), 1, &ntotal, false /* append_data */, + false /* single_precision */); for (int i = 0; i < num_chunks; i++) { if (chunks[i]->is_mine()) { size_t ntot = chunks[i]->gv.ntot(); @@ -123,18 +119,14 @@ void fields::dump(const char *filename, bool single_parallel_file) { file.create_data("t", 1, dims); if (am_master() || !single_parallel_file) file.write_chunk(1, start, dims, _t); - dump_fields_chunk_field( - &file, single_parallel_file, "f", - [](fields_chunk *chunk, int c, int d) { return &(chunk->f[c][d]); }); - dump_fields_chunk_field( - &file, single_parallel_file, "f_u", - [](fields_chunk *chunk, int c, int d) { return &(chunk->f_u[c][d]); }); - dump_fields_chunk_field( - &file, single_parallel_file, "f_w", - [](fields_chunk *chunk, int c, int d) { return &(chunk->f_w[c][d]); }); - dump_fields_chunk_field( - &file, single_parallel_file, "f_cond", - [](fields_chunk *chunk, int c, int d) { return &(chunk->f_cond[c][d]); }); + dump_fields_chunk_field(&file, single_parallel_file, "f", + [](fields_chunk *chunk, int c, int d) { return &(chunk->f[c][d]); }); + dump_fields_chunk_field(&file, single_parallel_file, "f_u", + [](fields_chunk *chunk, int c, int d) { return &(chunk->f_u[c][d]); }); + dump_fields_chunk_field(&file, single_parallel_file, "f_w", + [](fields_chunk *chunk, int c, int d) { return &(chunk->f_w[c][d]); }); + dump_fields_chunk_field(&file, single_parallel_file, "f_cond", + [](fields_chunk *chunk, int c, int d) { return &(chunk->f_cond[c][d]); }); dump_fields_chunk_field( &file, single_parallel_file, "f_w_prev", [](fields_chunk *chunk, int c, int d) { return &(chunk->f_w_prev[c][d]); }); @@ -184,11 +176,11 @@ void fields::load_fields_chunk_field(h5file *h5f, bool single_parallel_file, size_t n = num_f[(chunk_i * NUM_FIELD_COMPONENTS + c) * 2 + d]; realnum **f = field_ptr_getter(chunks[i], c, d); if (n == 0) { - delete[] *f; + delete[] * f; *f = NULL; - } else { - if (n != ntot) - meep::abort("grid size mismatch %zd vs %zd in fields::load", n, ntot); + } + else { + if (n != ntot) meep::abort("grid size mismatch %zd vs %zd in fields::load", n, ntot); // here we need to allocate the fields array for H in the PML region // because of H = B in fields_chunk::alloc_f whereby H is lazily // allocated in fields_chunk::update_eh during the first timestep @@ -214,10 +206,9 @@ void fields::load_fields_chunk_field(h5file *h5f, bool single_parallel_file, /* read the data */ h5f->read_size(field_name.c_str(), &rank, dims, 1); if (rank != 1 || dims[0] != ntotal) { - meep::abort( - "inconsistent data size for '%s' in fields::load (rank, dims[0]): " - "(%d, %zu) != (1, %zu)", - field_name.c_str(), rank, dims[0], ntotal); + meep::abort("inconsistent data size for '%s' in fields::load (rank, dims[0]): " + "(%d, %zu) != (1, %zu)", + field_name.c_str(), rank, dims[0], ntotal); } for (int i = 0; i < num_chunks; i++) { if (chunks[i]->is_mine()) { @@ -258,18 +249,14 @@ void fields::load(const char *filename, bool single_parallel_file) { t = static_cast(_t[0]); calc_sources(time()); - load_fields_chunk_field( - &file, single_parallel_file, "f", - [](fields_chunk *chunk, int c, int d) { return &(chunk->f[c][d]); }); - load_fields_chunk_field( - &file, single_parallel_file, "f_u", - [](fields_chunk *chunk, int c, int d) { return &(chunk->f_u[c][d]); }); - load_fields_chunk_field( - &file, single_parallel_file, "f_w", - [](fields_chunk *chunk, int c, int d) { return &(chunk->f_w[c][d]); }); - load_fields_chunk_field( - &file, single_parallel_file, "f_cond", - [](fields_chunk *chunk, int c, int d) { return &(chunk->f_cond[c][d]); }); + load_fields_chunk_field(&file, single_parallel_file, "f", + [](fields_chunk *chunk, int c, int d) { return &(chunk->f[c][d]); }); + load_fields_chunk_field(&file, single_parallel_file, "f_u", + [](fields_chunk *chunk, int c, int d) { return &(chunk->f_u[c][d]); }); + load_fields_chunk_field(&file, single_parallel_file, "f_w", + [](fields_chunk *chunk, int c, int d) { return &(chunk->f_w[c][d]); }); + load_fields_chunk_field(&file, single_parallel_file, "f_cond", + [](fields_chunk *chunk, int c, int d) { return &(chunk->f_cond[c][d]); }); load_fields_chunk_field( &file, single_parallel_file, "f_w_prev", [](fields_chunk *chunk, int c, int d) { return &(chunk->f_w_prev[c][d]); }); @@ -284,4 +271,4 @@ void fields::load(const char *filename, bool single_parallel_file) { } } -} // namespace meep +} // namespace meep diff --git a/src/fix_boundary_sources.cpp b/src/fix_boundary_sources.cpp index f31ad4b28..4676d3362 100644 --- a/src/fix_boundary_sources.cpp +++ b/src/fix_boundary_sources.cpp @@ -22,7 +22,7 @@ static MPI_Comm mycomm = MPI_COMM_WORLD; // data structure for sending source information from one chunk to another struct srcpt_info { std::complex A; // amplitude - ptrdiff_t index; // index in chunk's fields array + ptrdiff_t index; // index in chunk's fields array size_t src_time_id; int chunk_idx; int c; // component @@ -32,13 +32,14 @@ struct srcpt_info { // by (processor, src_time_id, chunk_idx, c) struct srcpt_info_compare { fields_chunk **chunks; - bool operator() (srcpt_info a, srcpt_info b) { + bool operator()(srcpt_info a, srcpt_info b) { int aproc = chunks[a.chunk_idx]->n_proc(); int bproc = chunks[b.chunk_idx]->n_proc(); - return (aproc != bproc ? aproc < bproc : - (a.src_time_id != b.src_time_id ? a.src_time_id < b.src_time_id : - (a.chunk_idx != b.chunk_idx ? a.chunk_idx < b.chunk_idx : - a.c < b.c))); + return (aproc != bproc + ? aproc < bproc + : (a.src_time_id != b.src_time_id + ? a.src_time_id < b.src_time_id + : (a.chunk_idx != b.chunk_idx ? a.chunk_idx < b.chunk_idx : a.c < b.c))); } }; @@ -57,14 +58,17 @@ void fields::fix_boundary_sources() { component c = src.c; ivec here = chunks[i]->gv.iloc(c, src.index_at(ipt)); if (!chunks[i]->gv.owns(here) && src.amplitude(ipt) != 0.0) { - if (src.t()->id == 0) abort("bug: fix_boundary_sources called for non-registered source"); + if (src.t()->id == 0) + abort("bug: fix_boundary_sources called for non-registered source"); // find the chunk that owns this point, similar to logic in boundaries.cpp std::complex thephase; if (locate_component_point(&c, &here, &thephase) && !on_metal_boundary(here)) { for (int j = 0; j < num_chunks; j++) if (chunks[j]->gv.owns(here)) { - srcpt_info s = { src.amplitude(ipt)*conj(thephase), chunks[j]->gv.index(c, here), src.t()->id, chunks[j]->chunk_idx, c }; + srcpt_info s = {src.amplitude(ipt) * conj(thephase), + chunks[j]->gv.index(c, here), src.t()->id, chunks[j]->chunk_idx, + c}; boundarysources.push_back(s); break; } @@ -94,78 +98,84 @@ void fields::fix_boundary_sources() { for (size_t idx = 0; idx < boundarysources.size(); ++idx) { int pidx = chunks[boundarysources[idx].chunk_idx]->n_proc(); if (pidx != p0) { - offsets[p*P + p0] = idx0; - numcomm_[p*P + p0] = idx - idx0; + offsets[p * P + p0] = idx0; + numcomm_[p * P + p0] = idx - idx0; p0 = pidx; idx0 = idx; } } - offsets[p*P + p0] = idx0; - numcomm_[p*P + p0] = boundarysources.size() - idx0; + offsets[p * P + p0] = idx0; + numcomm_[p * P + p0] = boundarysources.size() - idx0; // collect the numcomm data from all processes std::vector numcomm(P * P, size_t(0)); - sum_to_all(numcomm_.data(), numcomm.data(), P*P); + sum_to_all(numcomm_.data(), numcomm.data(), P * P); #ifdef HAVE_MPI // declare an MPI datatype mirroring srcpt_info, so that we can send/receive srcpt_info arrays - int srcpt_info_blocklengths[5] = {2,1,1,1,1}; - MPI_Datatype srcpt_info_types[5] = {MPI_DOUBLE, sizeof(ptrdiff_t) == sizeof(int) ? MPI_INT : MPI_LONG_LONG, sizeof(size_t) == sizeof(unsigned) ? MPI_UNSIGNED : MPI_UNSIGNED_LONG_LONG, MPI_INT, MPI_INT}; - MPI_Aint srcpt_info_offsets[5] = { offsetof(srcpt_info,A), offsetof(srcpt_info,index), offsetof(srcpt_info,src_time_id), offsetof(srcpt_info,chunk_idx), offsetof(srcpt_info,c) }; + int srcpt_info_blocklengths[5] = {2, 1, 1, 1, 1}; + MPI_Datatype srcpt_info_types[5] = { + MPI_DOUBLE, sizeof(ptrdiff_t) == sizeof(int) ? MPI_INT : MPI_LONG_LONG, + sizeof(size_t) == sizeof(unsigned) ? MPI_UNSIGNED : MPI_UNSIGNED_LONG_LONG, MPI_INT, MPI_INT}; + MPI_Aint srcpt_info_offsets[5] = {offsetof(srcpt_info, A), offsetof(srcpt_info, index), + offsetof(srcpt_info, src_time_id), + offsetof(srcpt_info, chunk_idx), offsetof(srcpt_info, c)}; MPI_Datatype mpi_srcpt_info; - MPI_Type_create_struct(5, srcpt_info_blocklengths, srcpt_info_offsets, srcpt_info_types, &mpi_srcpt_info); + MPI_Type_create_struct(5, srcpt_info_blocklengths, srcpt_info_offsets, srcpt_info_types, + &mpi_srcpt_info); MPI_Type_commit(&mpi_srcpt_info); #endif -for (int psrc = 0; psrc < P; ++psrc) - for (int pdest = 0; pdest < P; ++pdest) { - size_t N = numcomm[psrc*P + pdest]; - if (N == 0) continue; - if (pdest == p) { - srcpt_info *srcpts; + for (int psrc = 0; psrc < P; ++psrc) + for (int pdest = 0; pdest < P; ++pdest) { + size_t N = numcomm[psrc * P + pdest]; + if (N == 0) continue; + if (pdest == p) { + srcpt_info *srcpts; #ifdef HAVE_MPI - if (psrc != p) { - srcpts = new srcpt_info[N]; - MPI_Status status; - MPI_Recv(srcpts, N, mpi_srcpt_info, psrc, psrc*P + pdest, mycomm, &status); - } - else + if (psrc != p) { + srcpts = new srcpt_info[N]; + MPI_Status status; + MPI_Recv(srcpts, N, mpi_srcpt_info, psrc, psrc * P + pdest, mycomm, &status); + } + else #endif - srcpts = boundarysources.data() + offsets[psrc*P + pdest]; - int chunk_idx = srcpts[0].chunk_idx; - size_t src_time_id = srcpts[0].src_time_id; - int c = srcpts[0].c; - size_t idx0 = 0; - for (size_t idx = 0; idx <= N; ++idx) { - if (idx == N || srcpts[idx].chunk_idx != chunk_idx || srcpts[idx].src_time_id != src_time_id || srcpts[idx].c != c) { - std::vector idx_arr(idx - idx0); - std::vector > amp_arr(idx - idx0); - for (size_t i = idx0; i < idx; ++i) { - idx_arr[i-idx0] = srcpts[i].index; - amp_arr[i-idx0] = srcpts[i].A; - } - sourcedata srcdata = { (component) c, idx_arr, chunk_idx, amp_arr }; - src_time *srctime = lookup_src_time(src_time_id); - if (srctime == NULL) abort("bug: unknown src_time_id (missing registration?)"); - add_srcdata(srcdata, srctime, size_t(0), NULL, false); - if (idx < N) { - chunk_idx = srcpts[idx].chunk_idx; - src_time_id = srcpts[idx].src_time_id; - c = srcpts[idx].c; - idx0 = idx; + srcpts = boundarysources.data() + offsets[psrc * P + pdest]; + int chunk_idx = srcpts[0].chunk_idx; + size_t src_time_id = srcpts[0].src_time_id; + int c = srcpts[0].c; + size_t idx0 = 0; + for (size_t idx = 0; idx <= N; ++idx) { + if (idx == N || srcpts[idx].chunk_idx != chunk_idx || + srcpts[idx].src_time_id != src_time_id || srcpts[idx].c != c) { + std::vector idx_arr(idx - idx0); + std::vector > amp_arr(idx - idx0); + for (size_t i = idx0; i < idx; ++i) { + idx_arr[i - idx0] = srcpts[i].index; + amp_arr[i - idx0] = srcpts[i].A; + } + sourcedata srcdata = {(component)c, idx_arr, chunk_idx, amp_arr}; + src_time *srctime = lookup_src_time(src_time_id); + if (srctime == NULL) abort("bug: unknown src_time_id (missing registration?)"); + add_srcdata(srcdata, srctime, size_t(0), NULL, false); + if (idx < N) { + chunk_idx = srcpts[idx].chunk_idx; + src_time_id = srcpts[idx].src_time_id; + c = srcpts[idx].c; + idx0 = idx; + } } } - } - if (psrc != p) delete[] srcpts; - } + if (psrc != p) delete[] srcpts; + } #ifdef HAVE_MPI - else if (psrc == p) { - srcpt_info *srcpts = boundarysources.data() + offsets[psrc*P + pdest]; - MPI_Send(srcpts, N, mpi_srcpt_info, pdest, psrc*P + pdest, mycomm); - } + else if (psrc == p) { + srcpt_info *srcpts = boundarysources.data() + offsets[psrc * P + pdest]; + MPI_Send(srcpts, N, mpi_srcpt_info, pdest, psrc * P + pdest, mycomm); + } #endif - } + } #ifdef HAVE_MPI MPI_Type_free(&mpi_srcpt_info); @@ -174,4 +184,4 @@ for (int psrc = 0; psrc < P; ++psrc) finished_working(); } -} // namespace meep \ No newline at end of file +} // namespace meep diff --git a/src/h5file.cpp b/src/h5file.cpp index 0271d064d..3987462d9 100644 --- a/src/h5file.cpp +++ b/src/h5file.cpp @@ -23,7 +23,9 @@ #define CHECK(condition, message) \ do { \ - if (!(condition)) { meep::abort("error on line %d of " __FILE__ ": " message "\n", __LINE__); } \ + if (!(condition)) { \ + meep::abort("error on line %d of " __FILE__ ": " message "\n", __LINE__); \ + } \ } while (0) #include "config.h" @@ -311,7 +313,9 @@ void *h5file::read(const char *dataname, int *rank, size_t *dims, int maxrank, close_data_id = false; } else { - if (!dataset_exists(dataname)) { meep::abort("missing dataset in HDF5 file: %s", dataname); } + if (!dataset_exists(dataname)) { + meep::abort("missing dataset in HDF5 file: %s", dataname); + } data_id = H5Dopen(file_id, dataname); } } @@ -323,9 +327,7 @@ void *h5file::read(const char *dataname, int *rank, size_t *dims, int maxrank, data_id = HID(cur_id); close_data_id = false; } - else { - data_id = H5Dopen(file_id, dname); - } + else { data_id = H5Dopen(file_id, dname); } delete[] dname; } space_id = H5Dget_space(data_id); @@ -346,8 +348,8 @@ void *h5file::read(const char *dataname, int *rank, size_t *dims, int maxrank, data = new float[N]; else data = new double[N]; - H5Dread(data_id, single_precision ? H5T_NATIVE_FLOAT : H5T_NATIVE_DOUBLE, - H5S_ALL, H5S_ALL, H5P_DEFAULT, (void *)data); + H5Dread(data_id, single_precision ? H5T_NATIVE_FLOAT : H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, + H5P_DEFAULT, (void *)data); if (close_data_id) H5Dclose(data_id); } @@ -619,8 +621,8 @@ void h5file::create_or_extend_data(const char *dataname, int rank, const size_t that have no data can be skipped). */ static void _write_chunk(hid_t data_id, h5file::extending_s *cur, int rank, - const size_t *chunk_start, const size_t *chunk_dims, - hid_t datatype, void *data) { + const size_t *chunk_start, const size_t *chunk_dims, hid_t datatype, + void *data) { #ifdef HAVE_HDF5 int i; bool do_write = true; @@ -715,7 +717,8 @@ void h5file::done_writing_chunks() { I'm assuming(?) that non-extensible datasets will use different files, etcetera, for different timesteps. All of this hackery goes away if we just use an MPI-compiled version of HDF5. */ - if (parallel && !local && cur_dataname && get_extending(cur_dataname)) prevent_deadlock(); // closes id + if (parallel && !local && cur_dataname && get_extending(cur_dataname)) + prevent_deadlock(); // closes id } void h5file::write(const char *dataname, int rank, const size_t *dims, void *data, @@ -832,14 +835,12 @@ static void _read_chunk(hid_t data_id, int rank, const size_t *chunk_start, void h5file::read_chunk(int rank, const size_t *chunk_start, const size_t *chunk_dims, float *data) { - _read_chunk(HID(cur_id), rank, chunk_start, chunk_dims, - H5T_NATIVE_FLOAT, data); + _read_chunk(HID(cur_id), rank, chunk_start, chunk_dims, H5T_NATIVE_FLOAT, data); } void h5file::read_chunk(int rank, const size_t *chunk_start, const size_t *chunk_dims, double *data) { - _read_chunk(HID(cur_id), rank, chunk_start, chunk_dims, - H5T_NATIVE_DOUBLE, data); + _read_chunk(HID(cur_id), rank, chunk_start, chunk_dims, H5T_NATIVE_DOUBLE, data); } void h5file::read_chunk(int rank, const size_t *chunk_start, const size_t *chunk_dims, diff --git a/src/integrate.cpp b/src/integrate.cpp index 23fe3bb9e..f9efaaf2e 100644 --- a/src/integrate.cpp +++ b/src/integrate.cpp @@ -234,7 +234,7 @@ double fields::max_abs(int num_fvals, const component *components, field_rfuncti } static complex return_the_field(const complex *fields, const vec &loc, - void *integrand_data_) { + void *integrand_data_) { (void)integrand_data_; (void)loc; // unused return cdouble(fields[0]); diff --git a/src/loop_in_chunks.cpp b/src/loop_in_chunks.cpp index 4c86bd939..a831713b7 100644 --- a/src/loop_in_chunks.cpp +++ b/src/loop_in_chunks.cpp @@ -339,8 +339,8 @@ void compute_boundary_weights(grid_volume gv, const volume &where, ivec &is, ive void fields::loop_in_chunks(field_chunkloop chunkloop, void *chunkloop_data, const volume &where, component cgrid, bool use_symmetry, bool snap_empty_dimensions) { if (coordinate_mismatch(gv.dim, cgrid)) - meep::abort("Invalid fields::loop_in_chunks grid type %s for dimensions %s\n", component_name(cgrid), - dimension_name(gv.dim)); + meep::abort("Invalid fields::loop_in_chunks grid type %s for dimensions %s\n", + component_name(cgrid), dimension_name(gv.dim)); if (where.dim != gv.dim) meep::abort("Invalid dimensions %d for WHERE in fields::loop_in_chunks", where.dim); @@ -359,11 +359,15 @@ void fields::loop_in_chunks(field_chunkloop chunkloop, void *chunkloop_data, con compute_boundary_weights(gv, where, is, ie, snap_empty_dimensions, s0, e0, s1, e1); int original_vol = 1; - LOOP_OVER_DIRECTIONS(gv.dim, d){ + LOOP_OVER_DIRECTIONS(gv.dim, d) { if (boundaries[High][d] == Periodic && boundaries[Low][d] == Periodic) { - original_vol *= (ie.in_direction(d) - is.in_direction(d))/2+1; - } else { - int vol_size_d = (min(user_volume.big_owned_corner(cgrid), ie).in_direction(d) - max(user_volume.little_owned_corner(cgrid),is).in_direction(d))/2+1; + original_vol *= (ie.in_direction(d) - is.in_direction(d)) / 2 + 1; + } + else { + int vol_size_d = (min(user_volume.big_owned_corner(cgrid), ie).in_direction(d) - + max(user_volume.little_owned_corner(cgrid), is).in_direction(d)) / + 2 + + 1; original_vol *= (vol_size_d > 0 ? vol_size_d : 0); } } @@ -390,9 +394,8 @@ void fields::loop_in_chunks(field_chunkloop chunkloop, void *chunkloop_data, con min_ishift.set_direction( d, int(floor((where.in_direction_min(d) - gvS.in_direction_max(d)) / L.in_direction(d)))); - max_ishift.set_direction( - d, - int(ceil((where.in_direction_max(d) - gvS.in_direction_min(d)) / L.in_direction(d)))); + max_ishift.set_direction(d, int(ceil((where.in_direction_max(d) - gvS.in_direction_min(d)) / + L.in_direction(d)))); } else { min_ishift.set_direction(d, 0); @@ -417,26 +420,31 @@ void fields::loop_in_chunks(field_chunkloop chunkloop, void *chunkloop_data, con grid_volume gvu(chunks[i]->gv); ivec _iscoS(S.transform(gvu.little_owned_corner(cS), sn)); ivec _iecoS(S.transform(gvu.big_owned_corner(cS), sn)); - ivec iscoS(max(user_volume.little_owned_corner(cgrid), min(_iscoS, _iecoS))), iecoS(max(_iscoS, _iecoS)); // fix ordering due to to transform - - //With symmetry, the upper half of the original chunk is kept and includes one extra pixel. - //When looped over all symmetries, pixels outside the lower boundary "user_volume.little_owned_corner(cgrid)" is excluded. - //isym finds the lower boundary of the upper half chunk. Then in each direction that chunk isn't the upper, - //checked by ((S.transform(d, sn).d != d) != (S.transform(d, sn).flipped)), - //the end point iecoS will shift to not go beyond isym + ivec iscoS(max(user_volume.little_owned_corner(cgrid), min(_iscoS, _iecoS))), + iecoS(max(_iscoS, _iecoS)); // fix ordering due to to transform + + // With symmetry, the upper half of the original chunk is kept and includes one extra pixel. + // When looped over all symmetries, pixels outside the lower boundary + // "user_volume.little_owned_corner(cgrid)" is excluded. isym finds the lower boundary of + // the upper half chunk. Then in each direction that chunk isn't the upper, checked by + // ((S.transform(d, sn).d != d) != (S.transform(d, sn).flipped)), the end point iecoS will + // shift to not go beyond isym ivec isym(gvu.dim, INT_MAX); - LOOP_OVER_DIRECTIONS(gvu.dim, d){ - int off_sym_shift = ((gv.iyee_shift(cgrid).in_direction(d) != 0) ? gv.iyee_shift(cgrid).in_direction(d)+2 : 2); + LOOP_OVER_DIRECTIONS(gvu.dim, d) { + int off_sym_shift = ((gv.iyee_shift(cgrid).in_direction(d) != 0) + ? gv.iyee_shift(cgrid).in_direction(d) + 2 + : 2); isym.set_direction(d, S.i_symmetry_point.in_direction(d) - off_sym_shift); } ivec iscS(max(is - shifti, iscoS)); ivec chunk_corner(gvu.little_owned_corner(cgrid)); LOOP_OVER_DIRECTIONS(gv.dim, d) { - if ((S.transform(d, sn).d != d) != (S.transform(d, sn).flipped)) iecoS.set_direction(d, min(isym, iecoS).in_direction(d)); - } - ivec iecS( min(ie - shifti, iecoS)); - + if ((S.transform(d, sn).d != d) != (S.transform(d, sn).flipped)) + iecoS.set_direction(d, min(isym, iecoS).in_direction(d)); + } + ivec iecS(min(ie - shifti, iecoS)); + if (iscS <= iecS) { // non-empty intersection // Determine weights at chunk looping boundaries: ivec isc(S.transform(iscS, -sn)), iec(S.transform(iecS, -sn)); @@ -501,15 +509,14 @@ void fields::loop_in_chunks(field_chunkloop chunkloop, void *chunkloop_data, con } if (gv.dim == Dcyl) { dV1 = dV0 * 2 * pi * gv.inva; - dV0 *= 2 * pi * - fabs((S.transform(chunks[i]->gv[isc], sn) + shift).in_direction(R)); + dV0 *= 2 * pi * fabs((S.transform(chunks[i]->gv[isc], sn) + shift).in_direction(R)); } - chunkloop(chunks[i], i, cS, isc, iec, s0c, s1c, e0c, e1c, dV0, dV1, - shifti, ph, S, sn, chunkloop_data); + chunkloop(chunks[i], i, cS, isc, iec, s0c, s1c, e0c, e1c, dV0, dV1, shifti, ph, S, sn, + chunkloop_data); int loop_vol = 1; - LOOP_OVER_DIRECTIONS(gv.dim, d){ - loop_vol *= (iec.in_direction(d) - isc.in_direction(d))/2+1; + LOOP_OVER_DIRECTIONS(gv.dim, d) { + loop_vol *= (iec.in_direction(d) - isc.in_direction(d)) / 2 + 1; } vol_sum += loop_vol; } @@ -525,7 +532,9 @@ void fields::loop_in_chunks(field_chunkloop chunkloop, void *chunkloop_data, con } while (ishift != min_ishift); } int vol_sum_all = sum_to_all(vol_sum); - if (use_symmetry && vol_sum_all != original_vol) master_printf("WARNING vol mismatch:, original_vol %i, looped vol_sum %i \n", original_vol, vol_sum_all); + if (use_symmetry && vol_sum_all != original_vol) + master_printf("WARNING vol mismatch:, original_vol %i, looped vol_sum %i \n", original_vol, + vol_sum_all); } } // namespace meep diff --git a/src/material_data.cpp b/src/material_data.cpp index 774f2a3d3..a24d87cee 100644 --- a/src/material_data.cpp +++ b/src/material_data.cpp @@ -32,24 +32,14 @@ bool transition::operator==(const transition &other) const { bool transition::operator!=(const transition &other) const { return !(*this == other); } -medium_struct::medium_struct(double epsilon) : - epsilon_diag{epsilon, epsilon, epsilon}, - epsilon_offdiag{}, - mu_diag{1, 1, 1}, - mu_offdiag{}, - E_susceptibilities(), H_susceptibilities(), - E_chi2_diag{}, - E_chi3_diag{}, - H_chi2_diag{}, - H_chi3_diag{}, - D_conductivity_diag{}, - B_conductivity_diag{} - {} +medium_struct::medium_struct(double epsilon) + : epsilon_diag{epsilon, epsilon, epsilon}, epsilon_offdiag{}, mu_diag{1, 1, 1}, mu_offdiag{}, + E_susceptibilities(), H_susceptibilities(), E_chi2_diag{}, E_chi3_diag{}, H_chi2_diag{}, + H_chi3_diag{}, D_conductivity_diag{}, B_conductivity_diag{} {} void medium_struct::check_offdiag_im_zero_or_abort() const { - if (epsilon_offdiag.x.im != 0 || epsilon_offdiag.y.im != 0 || - epsilon_offdiag.z.im != 0 || mu_offdiag.x.im != 0 || mu_offdiag.y.im != 0 || - mu_offdiag.z.im != 0) { + if (epsilon_offdiag.x.im != 0 || epsilon_offdiag.y.im != 0 || epsilon_offdiag.z.im != 0 || + mu_offdiag.x.im != 0 || mu_offdiag.y.im != 0 || mu_offdiag.z.im != 0) { meep::abort("Found non-zero imaginary part of epsilon or mu offdiag.\n"); } } @@ -92,4 +82,4 @@ void material_data::copy_from(const material_data &from) { material_type_list::material_type_list() : items(NULL), num_items(0) {} -} // namespace meep_geom +} // namespace meep_geom diff --git a/src/material_data.hpp b/src/material_data.hpp index f81496c29..4e1df20d5 100644 --- a/src/material_data.hpp +++ b/src/material_data.hpp @@ -136,7 +136,7 @@ struct material_data { double beta; double eta; double damping; - bool trivial=true; + bool trivial = true; /* There are several possible scenarios when material grids overlap -- these different scenarios enable different applications. @@ -163,7 +163,7 @@ struct material_data { material_data(); - void copy_from(const material_data& from); + void copy_from(const material_data &from); }; typedef material_data *material_type; diff --git a/src/meep.hpp b/src/meep.hpp index 0dc5b5227..f5a721e81 100644 --- a/src/meep.hpp +++ b/src/meep.hpp @@ -394,7 +394,8 @@ class h5file { // If 'local_' is true, then 'parallel_' *must* be false and assumes that // each process is writing to a local non-shared file and the filename is // unique to the process. - h5file(const char *filename_, access_mode m = READWRITE, bool parallel_ = true, bool local_ = false); + h5file(const char *filename_, access_mode m = READWRITE, bool parallel_ = true, + bool local_ = false); ~h5file(); // closes the files (and any open dataset) bool ok(); @@ -729,8 +730,8 @@ enum in_or_out { Incoming = 0, Outgoing }; const std::initializer_list all_in_or_out{Incoming, Outgoing}; enum connect_phase { CONNECT_PHASE = 0, CONNECT_NEGATE = 1, CONNECT_COPY = 2 }; -const std::initializer_list all_connect_phases{ - CONNECT_PHASE, CONNECT_NEGATE, CONNECT_COPY}; +const std::initializer_list all_connect_phases{CONNECT_PHASE, CONNECT_NEGATE, + CONNECT_COPY}; constexpr int NUM_CONNECT_PHASE_TYPES = 3; // Communication pair(i, j) implies data being sent from i to j. @@ -768,7 +769,7 @@ struct comms_operation { ptrdiff_t my_chunk_idx; ptrdiff_t other_chunk_idx; int other_proc_id; - int pair_idx; // The numeric pair index used in many communications related arrays. + int pair_idx; // The numeric pair index used in many communications related arrays. size_t transfer_size; in_or_out comm_direction; int tag; @@ -787,7 +788,7 @@ struct comms_sequence { // RAII based comms_manager that allows asynchronous send and receive functions to be initiated. // Upon destruction, the comms_manager waits for completion of all enqueued operations. class comms_manager { - public: +public: using receive_callback = std::function; virtual ~comms_manager() {} virtual void send_real_async(const void *buf, size_t count, int dest, int tag) = 0; @@ -799,7 +800,6 @@ class comms_manager { // Factory function for `comms_manager`. std::unique_ptr create_comms_manager(); - class structure { public: structure_chunk **chunks; @@ -867,13 +867,12 @@ class structure { // file after computing their respective offsets into this file. When set to // 'false', each process writes data for the chunks it owns to a separate // (process unique) file. - void dump(const char *filename, bool single_parallel_file=true); - void load(const char *filename, bool single_parallel_file=true); + void dump(const char *filename, bool single_parallel_file = true); + void load(const char *filename, bool single_parallel_file = true); void dump_chunk_layout(const char *filename); void load_chunk_layout(const char *filename, boundary_region &br); - void load_chunk_layout(const std::vector &gvs, - const std::vector &ids, + void load_chunk_layout(const std::vector &gvs, const std::vector &ids, boundary_region &br); // monitor.cpp @@ -908,7 +907,8 @@ class structure { void changing_chunks(); // Helper methods for dumping and loading susceptibilities void set_chiP_from_file(h5file *file, const char *dataset, field_type ft); - void write_susceptibility_params(h5file *file, bool single_parallel_file, const char *dname, int EorH); + void write_susceptibility_params(h5file *file, bool single_parallel_file, const char *dname, + int EorH); std::unique_ptr bp; }; @@ -918,10 +918,8 @@ std::unique_ptr choose_chunkdivision(grid_volume &gv, volume & const symmetry &s); // defined in structure_dump.cpp -void split_by_binarytree(grid_volume gvol, - std::vector &result_gvs, - std::vector &result_ids, - const binary_partition *bp); +void split_by_binarytree(grid_volume gvol, std::vector &result_gvs, + std::vector &result_ids, const binary_partition *bp); class src_vol; class fields; class fields_chunk; @@ -939,8 +937,8 @@ class src_time { // sources are not, but this may change. bool is_integrated; - // a unique ID > 0 can be assigned to a src_time object by fields::register_src_time, - // in order to communicate it from one process to another; otherwise defaults to 0. + // a unique ID > 0 can be assigned to a src_time object by fields::register_src_time, + // in order to communicate it from one process to another; otherwise defaults to 0. size_t id; src_time() { @@ -1212,14 +1210,18 @@ class dft_chunk { int vc; // component descriptor from the original volume - private: - int decimation_factor; +private: + int decimation_factor; }; -void save_dft_hdf5(dft_chunk *dft_chunks, component c, h5file *file, const char *dprefix = 0, bool single_parallel_file=true); -void load_dft_hdf5(dft_chunk *dft_chunks, component c, h5file *file, const char *dprefix = 0, bool single_parallel_file=true); -void save_dft_hdf5(dft_chunk *dft_chunks, const char *name, h5file *file, const char *dprefix = 0, bool single_parallel_file=true); -void load_dft_hdf5(dft_chunk *dft_chunks, const char *name, h5file *file, const char *dprefix = 0, bool single_parallel_file=true); +void save_dft_hdf5(dft_chunk *dft_chunks, component c, h5file *file, const char *dprefix = 0, + bool single_parallel_file = true); +void load_dft_hdf5(dft_chunk *dft_chunks, component c, h5file *file, const char *dprefix = 0, + bool single_parallel_file = true); +void save_dft_hdf5(dft_chunk *dft_chunks, const char *name, h5file *file, const char *dprefix = 0, + bool single_parallel_file = true); +void load_dft_hdf5(dft_chunk *dft_chunks, const char *name, h5file *file, const char *dprefix = 0, + bool single_parallel_file = true); // dft.cpp (normally created with fields::add_dft_flux) class dft_flux { @@ -1327,7 +1329,6 @@ class dft_force { volume where; }; - struct sourcedata { component near_fd_comp; std::vector idx_arr; @@ -1335,7 +1336,6 @@ struct sourcedata { std::vector > amp_arr; }; - // near2far.cpp (normally created with fields::add_dft_near2far) class dft_near2far { public: @@ -1392,7 +1392,8 @@ class dft_near2far { int periodic_n[2]; double periodic_k[2], period[2]; - std::vector near_sourcedata(const vec &x_0, double* farpt_list, size_t nfar_pts, const std::complex* dJ); + std::vector near_sourcedata(const vec &x_0, double *farpt_list, size_t nfar_pts, + const std::complex *dJ); }; /* Class to compute local-density-of-states spectra: the power spectrum @@ -1412,17 +1413,17 @@ class dft_ldos { } void update(fields &f); // to be called after each timestep - double *ldos(); // returns array of Nomega values (after last timestep) + double *ldos(); // returns array of Nomega values (after last timestep) std::complex *F() const; // returns Fdft std::complex *J() const; // returns Jdft std::vector freq; double overall_scale() const { return saved_overall_scale; } - + private: - std::complex *Fdft; // Nomega array of field * J*(x) DFT values - std::complex *Jdft; // Nomega array of J(t) DFT values - double Jsum; // sum of |J| over all points - double saved_overall_scale; // saved overall scale for adjoint calculation + std::complex *Fdft; // Nomega array of field * J*(x) DFT values + std::complex *Jdft; // Nomega array of J(t) DFT values + double Jsum; // sum of |J| over all points + double saved_overall_scale; // saved overall scale for adjoint calculation }; // dft.cpp (normally created with fields::add_dft_fields) @@ -1431,7 +1432,8 @@ class dft_fields { dft_fields(dft_chunk *chunks, double freq_min, double freq_max, int Nfreq, const volume &where); dft_fields(dft_chunk *chunks, const std::vector &freq_, const volume &where); dft_fields(dft_chunk *chunks, const double *freq_, size_t Nfreq, const volume &where); - std::vector fourier_sourcedata(const volume &where, component c, fields &f, const std::complex* dJ); + std::vector fourier_sourcedata(const volume &where, component c, fields &f, + const std::complex *dJ); void scale_dfts(std::complex scale); void remove(); @@ -1441,7 +1443,6 @@ class dft_fields { volume where; }; - // data for each susceptibility typedef struct polarization_state_s { void *data; // internal polarization data for the susceptibility @@ -1618,7 +1619,7 @@ enum time_sink { BoundarySteppingPE, BoundarySteppingE }; -using time_sink_to_duration_map = std::unordered_map>; +using time_sink_to_duration_map = std::unordered_map >; // RAII-based profiling timer that accumulates wall time from creation until it // is destroyed or the `exit` method is invoked. Not thread-safe. @@ -1633,7 +1634,7 @@ class timing_scope { void exit(); private: - time_sink_to_duration_map *timers; // Not owned by us. + time_sink_to_duration_map *timers; // Not owned by us. time_sink sink; bool active; double t_start; @@ -1685,26 +1686,26 @@ class diffractedplanewave { std::complex get_p() const { return p; }; private: - int g[3]; // diffraction order - double axis[3]; // axis vector - std::complex s; // s polarization amplitude - std::complex p; // p polarization ampiltude + int g[3]; // diffraction order + double axis[3]; // axis vector + std::complex s; // s polarization amplitude + std::complex p; // p polarization ampiltude }; class gaussianbeam { public: - gaussianbeam(const vec &x0, const vec &kdir, double w0, double freq, - double eps, double mu, std::complex E0[3]); + gaussianbeam(const vec &x0, const vec &kdir, double w0, double freq, double eps, double mu, + std::complex E0[3]); void get_fields(std::complex *EH, const vec &x) const; std::complex get_E0(int n) const { return E0[n]; }; private: - vec x0; // beam center - vec kdir; // beam propagation direction - double w0; // beam waist radius - double freq; // beam frequency - double eps, mu; // permittivity/permeability of homogeneous medium + vec x0; // beam center + vec kdir; // beam propagation direction + double w0; // beam waist radius + double freq; // beam frequency + double eps, mu; // permittivity/permeability of homogeneous medium std::complex E0[3]; // polarization vector }; @@ -1749,7 +1750,7 @@ class fields { void remove_susceptibilities(); void remove_fluxes(); void reset(); - void log(const char* prefix = ""); + void log(const char *prefix = ""); // time.cpp std::vector time_spent_on(time_sink sink); @@ -1772,8 +1773,8 @@ class fields { // file after computing their respective offsets into this file. When set to // 'false', each process writes data for the chunks it owns to a separate // (process unique) file. - void dump(const char *filename, bool single_parallel_file=true); - void load(const char *filename, bool single_parallel_file=true); + void dump(const char *filename, bool single_parallel_file = true); + void load(const char *filename, bool single_parallel_file = true); // h5fields.cpp: // low-level function: @@ -1830,15 +1831,13 @@ class fields { // must eventually be caller-deallocated via delete[]. realnum *get_array_slice(const volume &where, std::vector components, field_rfunction rfun, void *fun_data, realnum *slice = 0, - double frequency = 0, - bool snap = false); + double frequency = 0, bool snap = false); std::complex *get_complex_array_slice(const volume &where, std::vector components, field_function fun, void *fun_data, std::complex *slice = 0, - double frequency = 0, - bool snap = false); + double frequency = 0, bool snap = false); // alternative entry points for when you have no field // function, i.e. you want just a single component or @@ -1849,8 +1848,7 @@ class fields { double frequency = 0, bool snap = false); std::complex *get_complex_array_slice(const volume &where, component c, std::complex *slice = 0, - double frequency = 0, - bool snap = false); + double frequency = 0, bool snap = false); // like get_array_slice, but for *sources* instead of fields std::complex *get_source_slice(const volume &where, component source_slice_component, @@ -1861,7 +1859,8 @@ class fields { field_function fun, field_rfunction rfun, void *fun_data, void *vslice, double frequency = 0, bool snap = false); - /* fetch and return coordinates and integration weights of grid points covered by an array slice, */ + /* fetch and return coordinates and integration weights of grid points covered by an array slice, + */ /* packed into a vector with format [NX, xtics[:], NY, ytics[:], NZ, ztics[:], weights[:] ] */ std::vector get_array_metadata(const volume &where); @@ -1903,8 +1902,12 @@ class fields { bool is_aniso2d(); void require_source_components(); void _require_component(component c, bool aniso2d); - void require_component(component c) { _require_component(c, is_aniso2d()); sync_chunk_connections(); } - void add_srcdata(struct sourcedata cur_data, src_time *src, size_t n, std::complex* amp_arr, bool needs_boundary_fix); + void require_component(component c) { + _require_component(c, is_aniso2d()); + sync_chunk_connections(); + } + void add_srcdata(struct sourcedata cur_data, src_time *src, size_t n, + std::complex *amp_arr, bool needs_boundary_fix); void register_src_time(src_time *src); src_time *lookup_src_time(size_t id); @@ -1923,8 +1926,7 @@ class fields { const volume &eig_vol, int band_num, const vec &kpoint, bool match_frequency, int parity, double eig_resolution, double eigensolver_tol, std::complex amp, - std::complex A(const vec &) = 0, - diffractedplanewave *dp = 0); + std::complex A(const vec &) = 0, diffractedplanewave *dp = 0); void get_eigenmode_coefficients(dft_flux flux, const volume &eig_vol, int *bands, int num_bands, int parity, double eig_resolution, double eigensolver_tol, @@ -1994,7 +1996,7 @@ class fields { bool sqrt_dV_and_interp_weights = false, std::complex extra_weight = 1.0, bool use_centered_grid = true, int vc = 0, int decimation_factor = 0, bool persist = false); - dft_chunk *add_dft(component c, const volume &where, const std::vector& freq, + dft_chunk *add_dft(component c, const volume &where, const std::vector &freq, bool include_dV_and_interp_weights = true, std::complex stored_weight = 1.0, dft_chunk *chunk_next = 0, bool sqrt_dV_and_interp_weights = false, @@ -2066,15 +2068,15 @@ class fields { } dft_flux add_mode_monitor(direction d, const volume &where, const std::vector &freq, bool centered_grid = true, int decimation_factor = 0) { - return add_mode_monitor(d, where, freq.data(), freq.size(), centered_grid, - decimation_factor); + return add_mode_monitor(d, where, freq.data(), freq.size(), centered_grid, decimation_factor); } dft_flux add_mode_monitor(direction d, const volume &where, const double *freq, size_t Nfreq, bool centered_grid = true, int decimation_factor = 0); dft_fields add_dft_fields(component *components, int num_components, const volume where, double freq_min, double freq_max, int Nfreq, - bool use_centered_grid = true, int decimation_factor = 0, bool persist = false) { + bool use_centered_grid = true, int decimation_factor = 0, + bool persist = false) { return add_dft_fields(components, num_components, where, linspace(freq_min, freq_max, Nfreq), use_centered_grid, decimation_factor, persist); } @@ -2162,8 +2164,7 @@ class fields { } dft_near2far add_dft_near2far(const volume_list *where, const std::vector &freq, int decimation_factor = 0, int Nperiods = 1) { - return add_dft_near2far(where, freq.data(), freq.size(), decimation_factor, - Nperiods); + return add_dft_near2far(where, freq.data(), freq.size(), decimation_factor, Nperiods); } dft_near2far add_dft_near2far(const volume_list *where, const double *freq, size_t Nfreq, int decimation_factor = 0, int Nperiods = 1); @@ -2183,7 +2184,10 @@ class fields { std::complex get_field(component c, const vec &loc, bool parallel = true) const; double get_field(derived_component c, const vec &loc, bool parallel = true) const; std::vector dft_monitor_size(dft_fields fdft, const volume &where, component c); - void get_dft_component_dims(dft_chunk **chunklists, int num_chunklists, component c, ivec &min_corner, ivec &max_corner, size_t &array_size, size_t &bufsz, int &rank, direction *ds, size_t *dims, int *array_rank=0, size_t *array_dims=0, direction *array_dirs=0); + void get_dft_component_dims(dft_chunk **chunklists, int num_chunklists, component c, + ivec &min_corner, ivec &max_corner, size_t &array_size, size_t &bufsz, + int &rank, direction *ds, size_t *dims, int *array_rank = 0, + size_t *array_dims = 0, direction *array_dirs = 0); // energy_and_flux.cpp void synchronize_magnetic_fields(); @@ -2237,7 +2241,8 @@ class fields { void figure_out_step_plan(); // boundaries.cpp bool chunk_connections_valid; - bool changed_materials; // keep track of whether materials have changed (in case field chunk connections need sync'ing) + bool changed_materials; // keep track of whether materials have changed (in case field chunk + // connections need sync'ing) void find_metals(); void disconnect_chunks(); void connect_chunks(); @@ -2265,9 +2270,9 @@ class fields { // Helper methods for dumping field chunks. using FieldPtrGetter = std::function; void dump_fields_chunk_field(h5file *h5f, bool single_parallel_file, - const std::string& field_name, FieldPtrGetter field_ptr_getter); + const std::string &field_name, FieldPtrGetter field_ptr_getter); void load_fields_chunk_field(h5file *h5f, bool single_parallel_file, - const std::string& field_name, FieldPtrGetter field_ptr_getter); + const std::string &field_name, FieldPtrGetter field_ptr_getter); public: // monitor.cpp @@ -2297,19 +2302,19 @@ class fields { // The sequence of send and receive operations for each field type. comms_sequence comms_sequence_for_field[NUM_FIELD_TYPES]; - size_t get_comm_size(const comms_key& key) const { + size_t get_comm_size(const comms_key &key) const { auto it = comm_sizes.find(key); return (it != comm_sizes.end()) ? it->second : 0; } - size_t comm_size_tot(field_type ft, const chunk_pair& pair) const { + size_t comm_size_tot(field_type ft, const chunk_pair &pair) const { size_t sum = 0; for (auto ip : all_connect_phases) sum += get_comm_size({ft, ip, pair}); return sum; } - int chunk_pair_to_index(const chunk_pair& pair) const { + int chunk_pair_to_index(const chunk_pair &pair) const { return pair.first + num_chunks * pair.second; } }; @@ -2393,8 +2398,8 @@ std::complex eigenmode_amplitude(void *vedata, const vec &p, component c double get_group_velocity(void *vedata); vec get_k(void *vedata); -double linear_interpolate(double rx, double ry, double rz, double *data, - int nx, int ny, int nz, int stride); +double linear_interpolate(double rx, double ry, double rz, double *data, int nx, int ny, int nz, + int stride); // Value class that combines split direction and position. struct split_plane { @@ -2413,17 +2418,17 @@ class binary_partition { // Takes ownership of `left_tree` and `right_tree`. binary_partition(const split_plane &_split_plane, std::unique_ptr &&left_tree, std::unique_ptr &&right_tree); - binary_partition(const binary_partition& other); + binary_partition(const binary_partition &other); bool is_leaf() const; // Returns the leaf node ID iff is_leaf() == true. int get_proc_id() const; // Returns the split plane iff is_leaf() == false. - const split_plane& get_plane() const; + const split_plane &get_plane() const; // Returns a pointer to the left subtree node iff is_leaf() == false. - const binary_partition* left_tree() const; + const binary_partition *left_tree() const; // Returns a pointer to the right subtree node iff is_leaf() == false. - const binary_partition* right_tree() const; + const binary_partition *right_tree() const; private: int proc_id; diff --git a/src/meep/vec.hpp b/src/meep/vec.hpp index 4996b2dc7..461611166 100644 --- a/src/meep/vec.hpp +++ b/src/meep/vec.hpp @@ -148,7 +148,6 @@ component first_field_component(field_type ft); for (meep::direction d = dim == meep::Dcyl ? meep::Z : meep::X; \ d < (dim == meep::Dcyl ? meep::NO_DIRECTION : meep::R); d = meep::direction(d + 1)) - #define LOOP_OVER_IVECS(gv, is, ie, idx) \ for (ptrdiff_t loop_is1 = (is).yucky_val(0), loop_is2 = (is).yucky_val(1), \ loop_is3 = (is).yucky_val(2), loop_n1 = ((ie).yucky_val(0) - loop_is1) / 2 + 1, \ @@ -200,7 +199,7 @@ component first_field_component(field_type ft); // the most generic use case where the user // can specify a custom clause #define PLOOP_OVER_IVECS_C(gv, is, ie, idx, clause) \ -for(ptrdiff_t loop_is1 = (is).yucky_val(0), loop_is2 = (is).yucky_val(1), \ + for (ptrdiff_t loop_is1 = (is).yucky_val(0), loop_is2 = (is).yucky_val(1), \ loop_is3 = (is).yucky_val(2), loop_n1 = ((ie).yucky_val(0) - loop_is1) / 2 + 1, \ loop_n2 = ((ie).yucky_val(1) - loop_is2) / 2 + 1, \ loop_n3 = ((ie).yucky_val(2) - loop_is3) / 2 + 1, \ @@ -212,13 +211,18 @@ for(ptrdiff_t loop_is1 = (is).yucky_val(0), loop_is2 = (is).yucky_val(1), idx0 = (is - (gv).little_corner()).yucky_val(0) / 2 * loop_s1 + \ (is - (gv).little_corner()).yucky_val(1) / 2 * loop_s2 + \ (is - (gv).little_corner()).yucky_val(2) / 2 * loop_s3, \ - dummy_first=0;dummy_first<1;dummy_first++) \ -_Pragma(clause) \ - for (ptrdiff_t loop_i1 = 0; loop_i1 < loop_n1; loop_i1++) \ - for (ptrdiff_t loop_i2 = 0; loop_i2 < loop_n2; loop_i2++) \ - for (ptrdiff_t loop_i3 = 0; loop_i3 < loop_n3; loop_i3++) \ - for (ptrdiff_t idx = idx0 + loop_i1*loop_s1 + loop_i2*loop_s2 + \ - loop_i3*loop_s3, dummy_last=0;dummy_last<1;dummy_last++) + dummy_first = 0; \ + dummy_first < 1; dummy_first++) \ + _Pragma( \ + clause) for (ptrdiff_t loop_i1 = 0; loop_i1 < loop_n1; \ + loop_i1++) for (ptrdiff_t loop_i2 = 0; loop_i2 < loop_n2; \ + loop_i2++) for (ptrdiff_t loop_i3 = 0; loop_i3 < loop_n3; \ + loop_i3++) for (ptrdiff_t idx = \ + idx0 + loop_i1 * loop_s1 + \ + loop_i2 * loop_s2 + \ + loop_i3 * loop_s3, \ + dummy_last = 0; \ + dummy_last < 1; dummy_last++) // For the main timestepping events, we know // we want to do a simple collapse @@ -227,7 +231,7 @@ _Pragma(clause) #define PLOOP_OVER_VOL(gv, c, idx) \ PLOOP_OVER_IVECS(gv, (gv).little_corner() + (gv).iyee_shift(c), \ - (gv).big_corner() + (gv).iyee_shift(c), idx) + (gv).big_corner() + (gv).iyee_shift(c), idx) #define PLOOP_OVER_VOL_OWNED(gv, c, idx) \ PLOOP_OVER_IVECS(gv, (gv).little_owned_corner(c), (gv).big_corner(), idx) @@ -256,7 +260,8 @@ _Pragma(clause) // should only use these macros where that is true! (Basically, // all of this is here to support performance hacks of step_generic.) -#if !defined(__INTEL_COMPILER) && !defined(__clang__) && !defined(_OPENMP) && (defined(__GNUC__) || defined(__GNUG__)) +#if !defined(__INTEL_COMPILER) && !defined(__clang__) && !defined(_OPENMP) && \ + (defined(__GNUC__) || defined(__GNUG__)) #define IVDEP _Pragma("GCC ivdep") #elif defined(_OPENMP) #define IVDEP _Pragma("omp simd") @@ -307,7 +312,7 @@ _Pragma(clause) We can use simd vectorization in addition to the usual par for optimization */ // loop over indices idx from is to ie (inclusive) in gv #define PS1LOOP_OVER_IVECS(gv, is, ie, idx) \ -for(ptrdiff_t loop_is1 = (is).yucky_val(0), loop_is2 = (is).yucky_val(1), \ + for (ptrdiff_t loop_is1 = (is).yucky_val(0), loop_is2 = (is).yucky_val(1), \ loop_is3 = (is).yucky_val(2), loop_n1 = ((ie).yucky_val(0) - loop_is1) / 2 + 1, \ loop_n2 = ((ie).yucky_val(1) - loop_is2) / 2 + 1, \ loop_n3 = ((ie).yucky_val(2) - loop_is3) / 2 + 1, \ @@ -317,22 +322,25 @@ for(ptrdiff_t loop_is1 = (is).yucky_val(0), loop_is2 = (is).yucky_val(1), idx0 = (is - (gv).little_corner()).yucky_val(0) / 2 * loop_s1 + \ (is - (gv).little_corner()).yucky_val(1) / 2 * loop_s2 + \ (is - (gv).little_corner()).yucky_val(2) / 2 * loop_s3, \ - dummy_first=0;dummy_first<1;dummy_first++) \ -_Pragma("omp parallel for collapse(2)") \ - for (ptrdiff_t loop_i1 = 0; loop_i1 < loop_n1; loop_i1++) \ - for (ptrdiff_t loop_i2 = 0; loop_i2 < loop_n2; loop_i2++) \ - _Pragma("omp simd") \ - for (ptrdiff_t loop_i3 = 0; loop_i3 < loop_n3; loop_i3++) \ - for (ptrdiff_t idx = idx0 + loop_i1 * loop_s1 + loop_i2 * loop_s2 + loop_i3, dummy_last=0;dummy_last<1;dummy_last++) - -#define PS1LOOP_OVER_VOL(gv, c, idx) \ - PS1LOOP_OVER_IVECS(gv, (gv).little_corner() + (gv).iyee_shift(c), \ - (gv).big_corner() + (gv).iyee_shift(c), idx) - -#define PS1LOOP_OVER_VOL_OWNED(gv, c, idx) \ + dummy_first = 0; \ + dummy_first < 1; dummy_first++) \ + _Pragma("omp parallel for collapse(2)") for (ptrdiff_t loop_i1 = 0; loop_i1 < loop_n1; \ + loop_i1++) for (ptrdiff_t loop_i2 = 0; \ + loop_i2 < loop_n2; loop_i2++) \ + _Pragma("omp simd") for (ptrdiff_t loop_i3 = 0; loop_i3 < loop_n3; \ + loop_i3++) for (ptrdiff_t idx = idx0 + loop_i1 * loop_s1 + \ + loop_i2 * loop_s2 + loop_i3, \ + dummy_last = 0; \ + dummy_last < 1; dummy_last++) + +#define PS1LOOP_OVER_VOL(gv, c, idx) \ + PS1LOOP_OVER_IVECS(gv, (gv).little_corner() + (gv).iyee_shift(c), \ + (gv).big_corner() + (gv).iyee_shift(c), idx) + +#define PS1LOOP_OVER_VOL_OWNED(gv, c, idx) \ PS1LOOP_OVER_IVECS(gv, (gv).little_owned_corner(c), (gv).big_corner(), idx) -#define PS1LOOP_OVER_VOL_OWNED0(gv, c, idx) \ +#define PS1LOOP_OVER_VOL_OWNED0(gv, c, idx) \ PS1LOOP_OVER_IVECS(gv, (gv).little_owned_corner0(c), (gv).big_corner(), idx) #define PS1LOOP_OVER_VOL_NOTOWNED(gv, c, idx) \ @@ -349,15 +357,15 @@ _Pragma("omp parallel for collapse(2)") (loop_s3 != 0 && (loop_i3 == 0 || loop_i3 == loop_n3 - 1))) #define IVEC_LOOP_ILOC(gv, iloc) \ - meep::ivec iloc((gv).dim); \ - iloc.set_direction(meep::direction(loop_d1), loop_is1 + 2 * loop_i1); \ - iloc.set_direction(meep::direction(loop_d2), loop_is2 + 2 * loop_i2); \ + meep::ivec iloc((gv).dim); \ + iloc.set_direction(meep::direction(loop_d1), loop_is1 + 2 * loop_i1); \ + iloc.set_direction(meep::direction(loop_d2), loop_is2 + 2 * loop_i2); \ iloc.set_direction(meep::direction(loop_d3), loop_is3 + 2 * loop_i3) #define IVEC_LOOP_LOC(gv, loc) \ - meep::vec loc((gv).dim); \ - loc.set_direction(meep::direction(loop_d1), (0.5 * loop_is1 + loop_i1) * (gv).inva); \ - loc.set_direction(meep::direction(loop_d2), (0.5 * loop_is2 + loop_i2) * (gv).inva); \ + meep::vec loc((gv).dim); \ + loc.set_direction(meep::direction(loop_d1), (0.5 * loop_is1 + loop_i1) * (gv).inva); \ + loc.set_direction(meep::direction(loop_d2), (0.5 * loop_is2 + loop_i2) * (gv).inva); \ loc.set_direction(meep::direction(loop_d3), (0.5 * loop_is3 + loop_i3) * (gv).inva) // integration weight for using LOOP_OVER_IVECS with field::integrate @@ -365,9 +373,8 @@ _Pragma("omp parallel for collapse(2)") ((i > 1 && i < n - 2) \ ? 1.0 \ : (i == 0 ? (s0).in_direction(meep::direction(dir)) \ - : (i == 1 ? (s1).in_direction(meep::direction(dir)) \ - : i == n - 1 \ - ? (e0).in_direction(meep::direction(dir)) \ + : (i == 1 ? (s1).in_direction(meep::direction(dir)) \ + : i == n - 1 ? (e0).in_direction(meep::direction(dir)) \ : (i == n - 2 ? (e1).in_direction(meep::direction(dir)) : 1.0)))) #define IVEC_LOOP_WEIGHT1(s0, s1, e0, e1, k) \ IVEC_LOOP_WEIGHT1x(s0, s1, e0, e1, loop_i##k, loop_n##k, loop_d##k) @@ -412,8 +419,8 @@ inline bool is_electric(component c) { return c < Hx; } inline bool is_magnetic(component c) { return c >= Hx && c < Dx; } inline bool is_D(component c) { return c >= Dx && c < Bx; } inline bool is_B(component c) { return c >= Bx && c < Dielectric; } -inline bool is_E_or_D(component c) {return is_electric(c) || is_D(c); } -inline bool is_H_or_B(component c) {return is_magnetic(c) || is_B(c); } +inline bool is_E_or_D(component c) { return is_electric(c) || is_D(c); } +inline bool is_H_or_B(component c) { return is_magnetic(c) || is_B(c); } inline bool is_derived(int c) { return c >= Sx; } inline bool is_poynting(derived_component c) { return c < EnergyDensity; } inline bool is_energydensity(derived_component c) { return c >= EnergyDensity; } @@ -1149,13 +1156,10 @@ class grid_volume { const char *str(char *buffer = 0, size_t buflen = 0); - std::complex get_split_costs(direction d, int split_point, - bool frag_cost) const; - void tile_split(int &best_split_point, - direction &best_split_direction) const; - void find_best_split(int desired_chunks, bool frag_cost, - int &best_split_point, direction &best_split_direction, - double &left_effort_fraction) const; + std::complex get_split_costs(direction d, int split_point, bool frag_cost) const; + void tile_split(int &best_split_point, direction &best_split_direction) const; + void find_best_split(int desired_chunks, bool frag_cost, int &best_split_point, + direction &best_split_direction, double &left_effort_fraction) const; private: grid_volume(ndim d, double ta, int na, int nb, int nc); @@ -1209,7 +1213,7 @@ class symmetry { volume_list *reduce(const volume_list *gl) const; symmetry operator+(const symmetry &) const; - symmetry operator*(std::complex)const; + symmetry operator*(std::complex) const; symmetry operator-(const symmetry &b) const { return *this + b * (-1.0); } symmetry operator-(void) const { return *this * (-1.0); } void operator=(const symmetry &); diff --git a/src/meep_internals.hpp b/src/meep_internals.hpp index c3461b3b1..b543ed41c 100644 --- a/src/meep_internals.hpp +++ b/src/meep_internals.hpp @@ -33,11 +33,8 @@ static inline int my_round(double x) { return int(floor(fabs(x) + 0.5) * (x < 0 int mirrorindex(int i, int n); /* map the cell coordinates into the range [0,1] */ -void map_coordinates(double rx, double ry, double rz, - int nx, int ny, int nz, - int &x1, int &y1, int &z1, - int &x2, int &y2, int &z2, - double &dx, double &dy, double &dz, +void map_coordinates(double rx, double ry, double rz, int nx, int ny, int nz, int &x1, int &y1, + int &z1, int &x2, int &y2, int &z2, double &dx, double &dy, double &dz, bool do_fabs = true); inline int small_r_metal(int m) { return m - 1; } @@ -55,7 +52,7 @@ class src_vol { // Constructs a new source volume. Takes ownership of `ind` and `amps`. // Requirement: ind.size() == amps.size() src_vol(component cc, src_time *st, std::vector &&ind, - std::vector > &&s, bool fix_boundaries=false); + std::vector > &&s, bool fix_boundaries = false); // Checks whether `a` and `b` are combinable, i.e. have the same indices and point to the same // `src_time` instance, but have potentially different amplitudes. @@ -77,7 +74,7 @@ class src_vol { // It is recommended to use `combinable` before calling this method. void add_amplitudes_from(const src_vol &other); - const component c; // field component the source applies to + const component c; // field component the source applies to bool needs_boundary_fix; // whether fix_boundary_sources needs calling private: src_time *src_t; // Not owned by us. @@ -91,78 +88,79 @@ symmetry r_to_minus_r_symmetry(int m); // functions in step_generic.cpp: -void step_curl(realnum *f, component c, const realnum *g1, const realnum *g2, - ptrdiff_t s1, ptrdiff_t s2, // strides for g1/g2 shift - const grid_volume &gv, const ivec is, const ivec ie, - realnum dtdx, direction dsig, const realnum *sig, - const realnum *kap, const realnum *siginv, realnum *fu, direction dsigu, - const realnum *sigu, const realnum *kapu, const realnum *siginvu, realnum dt, - const realnum *cnd, const realnum *cndinv, realnum *fcnd); - -void step_update_EDHB(realnum *f, component fc, const grid_volume &gv, const ivec is, const ivec ie, const realnum *g, - const realnum *g1, const realnum *g2, const realnum *u, const realnum *u1, - const realnum *u2, ptrdiff_t s, ptrdiff_t s1, ptrdiff_t s2, +void step_curl(realnum *f, component c, const realnum *g1, const realnum *g2, ptrdiff_t s1, + ptrdiff_t s2, // strides for g1/g2 shift + const grid_volume &gv, const ivec is, const ivec ie, realnum dtdx, direction dsig, + const realnum *sig, const realnum *kap, const realnum *siginv, realnum *fu, + direction dsigu, const realnum *sigu, const realnum *kapu, const realnum *siginvu, + realnum dt, const realnum *cnd, const realnum *cndinv, realnum *fcnd); + +void step_update_EDHB(realnum *f, component fc, const grid_volume &gv, const ivec is, const ivec ie, + const realnum *g, const realnum *g1, const realnum *g2, const realnum *u, + const realnum *u1, const realnum *u2, ptrdiff_t s, ptrdiff_t s1, ptrdiff_t s2, const realnum *chi2, const realnum *chi3, realnum *fw, direction dsigw, const realnum *sigw, const realnum *kapw); -void step_beta(realnum *f, component c, const realnum *g, const grid_volume &gv, const ivec is, const ivec ie, realnum betadt, - direction dsig, const realnum *siginv, realnum *fu, direction dsigu, - const realnum *siginvu, const realnum *cndinv, realnum *fcnd); +void step_beta(realnum *f, component c, const realnum *g, const grid_volume &gv, const ivec is, + const ivec ie, realnum betadt, direction dsig, const realnum *siginv, realnum *fu, + direction dsigu, const realnum *siginvu, const realnum *cndinv, realnum *fcnd); // functions in step_generic_stride1.cpp, generated from step_generic.cpp: -void step_curl_stride1(realnum *f, component c, const realnum *g1, const realnum *g2, - ptrdiff_t s1, ptrdiff_t s2, // strides for g1/g2 shift - const grid_volume &gv, const ivec is, const ivec ie, - realnum dtdx, direction dsig, const realnum *sig, - const realnum *kap, const realnum *siginv, realnum *fu, direction dsigu, - const realnum *sigu, const realnum *kapu, const realnum *siginvu, realnum dt, - const realnum *cnd, const realnum *cndinv, realnum *fcnd); - -void step_update_EDHB_stride1(realnum *f, component fc, const grid_volume &gv, const ivec is, const ivec ie, const realnum *g, - const realnum *g1, const realnum *g2, const realnum *u, - const realnum *u1, const realnum *u2, ptrdiff_t s, ptrdiff_t s1, - ptrdiff_t s2, const realnum *chi2, const realnum *chi3, realnum *fw, - direction dsigw, const realnum *sigw, const realnum *kapw); - -void step_beta_stride1(realnum *f, component c, const realnum *g, const grid_volume &gv, const ivec is, const ivec ie, - realnum betadt, direction dsig, const realnum *siginv, realnum *fu, - direction dsigu, const realnum *siginvu, const realnum *cndinv, - realnum *fcnd); +void step_curl_stride1(realnum *f, component c, const realnum *g1, const realnum *g2, ptrdiff_t s1, + ptrdiff_t s2, // strides for g1/g2 shift + const grid_volume &gv, const ivec is, const ivec ie, realnum dtdx, + direction dsig, const realnum *sig, const realnum *kap, + const realnum *siginv, realnum *fu, direction dsigu, const realnum *sigu, + const realnum *kapu, const realnum *siginvu, realnum dt, const realnum *cnd, + const realnum *cndinv, realnum *fcnd); + +void step_update_EDHB_stride1(realnum *f, component fc, const grid_volume &gv, const ivec is, + const ivec ie, const realnum *g, const realnum *g1, const realnum *g2, + const realnum *u, const realnum *u1, const realnum *u2, ptrdiff_t s, + ptrdiff_t s1, ptrdiff_t s2, const realnum *chi2, const realnum *chi3, + realnum *fw, direction dsigw, const realnum *sigw, + const realnum *kapw); + +void step_beta_stride1(realnum *f, component c, const realnum *g, const grid_volume &gv, + const ivec is, const ivec ie, realnum betadt, direction dsig, + const realnum *siginv, realnum *fu, direction dsigu, const realnum *siginvu, + const realnum *cndinv, realnum *fcnd); /* macro wrappers around time-stepping functions: for performance reasons, if the inner loop is stride-1 then we use the stride-1 versions, which allow gcc (and possibly other compilers) to do additional optimizations, especially loop vectorization */ -#define STEP_CURL(f, c, g1, g2, s1, s2, gv, is, ie, dtdx, dsig, sig, kap, siginv, fu, dsigu, sigu, kapu, \ - siginvu, dt, cnd, cndinv, fcnd) \ +#define STEP_CURL(f, c, g1, g2, s1, s2, gv, is, ie, dtdx, dsig, sig, kap, siginv, fu, dsigu, sigu, \ + kapu, siginvu, dt, cnd, cndinv, fcnd) \ do { \ if (LOOPS_ARE_STRIDE1(gv)) \ - step_curl_stride1(f, c, g1, g2, s1, s2, gv, is, ie, dtdx, dsig, sig, kap, siginv, fu, dsigu, sigu, \ - kapu, siginvu, dt, cnd, cndinv, fcnd); \ + step_curl_stride1(f, c, g1, g2, s1, s2, gv, is, ie, dtdx, dsig, sig, kap, siginv, fu, dsigu, \ + sigu, kapu, siginvu, dt, cnd, cndinv, fcnd); \ else \ - step_curl(f, c, g1, g2, s1, s2, gv, is, ie, dtdx, dsig, sig, kap, siginv, fu, dsigu, sigu, kapu, \ - siginvu, dt, cnd, cndinv, fcnd); \ + step_curl(f, c, g1, g2, s1, s2, gv, is, ie, dtdx, dsig, sig, kap, siginv, fu, dsigu, sigu, \ + kapu, siginvu, dt, cnd, cndinv, fcnd); \ } while (0) -#define STEP_UPDATE_EDHB(f, fc, gv, is, ie, g, g1, g2, u, u1, u2, s, s1, s2, chi2, chi3, fw, dsigw, sigw, \ - kapw) \ +#define STEP_UPDATE_EDHB(f, fc, gv, is, ie, g, g1, g2, u, u1, u2, s, s1, s2, chi2, chi3, fw, \ + dsigw, sigw, kapw) \ do { \ if (LOOPS_ARE_STRIDE1(gv)) \ - step_update_EDHB_stride1(f, fc, gv, is, ie, g, g1, g2, u, u1, u2, s, s1, s2, chi2, chi3, fw, dsigw, \ - sigw, kapw); \ + step_update_EDHB_stride1(f, fc, gv, is, ie, g, g1, g2, u, u1, u2, s, s1, s2, chi2, chi3, fw, \ + dsigw, sigw, kapw); \ else \ - step_update_EDHB(f, fc, gv, is, ie, g, g1, g2, u, u1, u2, s, s1, s2, chi2, chi3, fw, dsigw, sigw, \ - kapw); \ + step_update_EDHB(f, fc, gv, is, ie, g, g1, g2, u, u1, u2, s, s1, s2, chi2, chi3, fw, dsigw, \ + sigw, kapw); \ } while (0) -#define STEP_BETA(f, c, g, gv, is, ie, betadt, dsig, siginv, fu, dsigu, siginvu, cndinv, fcnd) \ +#define STEP_BETA(f, c, g, gv, is, ie, betadt, dsig, siginv, fu, dsigu, siginvu, cndinv, fcnd) \ do { \ if (LOOPS_ARE_STRIDE1(gv)) \ - step_beta_stride1(f, c, g, gv, is, ie, betadt, dsig, siginv, fu, dsigu, siginvu, cndinv, fcnd); \ + step_beta_stride1(f, c, g, gv, is, ie, betadt, dsig, siginv, fu, dsigu, siginvu, cndinv, \ + fcnd); \ else \ - step_beta(f, c, g, gv, is, ie, betadt, dsig, siginv, fu, dsigu, siginvu, cndinv, fcnd); \ + step_beta(f, c, g, gv, is, ie, betadt, dsig, siginv, fu, dsigu, siginvu, cndinv, fcnd); \ } while (0) // analytical Green's functions from near2far.cpp, which we might want to expose someday @@ -175,8 +173,11 @@ void greencyl(std::complex *EH, const vec &x, double freq, double eps, d // functions in array_slice.cpp: -complex *collapse_array(complex *array, int *rank, size_t dims[3], direction dirs[3], volume where); +complex *collapse_array(complex *array, int *rank, size_t dims[3], + direction dirs[3], volume where); -void reduce_array_dimensions(volume where, int full_rank, size_t dims[3], direction dirs[3], size_t stride[3], int &reduced_rank, size_t reduced_dims[3], direction reduced_dirs[3], size_t reduced_stride[3]); +void reduce_array_dimensions(volume where, int full_rank, size_t dims[3], direction dirs[3], + size_t stride[3], int &reduced_rank, size_t reduced_dims[3], + direction reduced_dirs[3], size_t reduced_stride[3]); } // namespace meep diff --git a/src/meepgeom.cpp b/src/meepgeom.cpp index 14ef07802..6b83d109b 100644 --- a/src/meepgeom.cpp +++ b/src/meepgeom.cpp @@ -232,9 +232,7 @@ int sym_matrix_positive_definite(symm_matrix *V) { static meep::ndim dim = meep::D3; void set_dimensions(int dims) { if (dims == CYLINDRICAL) { dim = meep::Dcyl; } - else { - dim = meep::ndim(dims - 1); - } + else { dim = meep::ndim(dims - 1); } } vector3 vec_to_vector3(const meep::vec &pt) { @@ -328,12 +326,10 @@ bool is_metal(meep::field_type ft, const material_type *material) { } bool has_offdiag(const medium_struct *material) { - if ((material->epsilon_offdiag.x.re != 0) || /* account for offdiagonal components */ - (material->epsilon_offdiag.y.re != 0) || - (material->epsilon_offdiag.z.re != 0) || - (material->epsilon_offdiag.x.im != 0) || - (material->epsilon_offdiag.y.im != 0) || - (material->epsilon_offdiag.z.im != 0)) + if ((material->epsilon_offdiag.x.re != 0) || /* account for offdiagonal components */ + (material->epsilon_offdiag.y.re != 0) || (material->epsilon_offdiag.z.re != 0) || + (material->epsilon_offdiag.x.im != 0) || (material->epsilon_offdiag.y.im != 0) || + (material->epsilon_offdiag.z.im != 0)) return true; else return false; @@ -362,8 +358,8 @@ vector3 to_geom_object_coords_VJP(vector3 v, const geometric_object *o) { if (size.z != 0.0) v.z /= size.z; return matrix3x3_transpose_vector3_mult(o->subclass.block_data->projection_matrix, v); } - /* case geometric_object::PRISM: - NOT YET IMPLEMENTED */ + /* case geometric_object::PRISM: + NOT YET IMPLEMENTED */ } } @@ -383,9 +379,7 @@ meep::vec material_grid_grad(vector3 p, material_data *md, const geometric_objec double dx, dy, dz; bool signflip_dx = false, signflip_dy = false, signflip_dz = false; - meep::map_coordinates(rx, ry, rz, nx, ny, nz, - x1, y1, z1, x2, y2, z2, - dx, dy, dz, + meep::map_coordinates(rx, ry, rz, nx, ny, nz, x1, y1, z1, x2, y2, z2, dx, dy, dz, false /* do_fabs */); if (dx != fabs(dx)) { @@ -405,21 +399,23 @@ meep::vec material_grid_grad(vector3 p, material_data *md, const geometric_objec in row-major order: */ #define D(x, y, z) (data[(((x)*ny + (y)) * nz + (z)) * stride]) - double du_dx = (signflip_dx ? -1.0 : 1.0) * - (((-D(x1, y1, z1) + D(x2, y1, z1)) * (1.0 - dy) + - (-D(x1, y2, z1) + D(x2, y2, z1)) * dy) * (1.0 - dz) + - ((-D(x1, y1, z2) + D(x2, y1, z2)) * (1.0 - dy) + - (-D(x1, y2, z2) + D(x2, y2, z2)) * dy) * dz); - double du_dy = (signflip_dy ? -1.0 : 1.0) * - ((-(D(x1, y1, z1) * (1.0 - dx) + D(x2, y1, z1) * dx) + - (D(x1, y2, z1) * (1.0 - dx) + D(x2, y2, z1) * dx)) * (1.0 - dz) + - (-(D(x1, y1, z2) * (1.0 - dx) + D(x2, y1, z2) * dx) + - (D(x1, y2, z2) * (1.0 - dx) + D(x2, y2, z2) * dx)) * dz); + double du_dx = + (signflip_dx ? -1.0 : 1.0) * + (((-D(x1, y1, z1) + D(x2, y1, z1)) * (1.0 - dy) + (-D(x1, y2, z1) + D(x2, y2, z1)) * dy) * + (1.0 - dz) + + ((-D(x1, y1, z2) + D(x2, y1, z2)) * (1.0 - dy) + (-D(x1, y2, z2) + D(x2, y2, z2)) * dy) * + dz); + double du_dy = (signflip_dy ? -1.0 : 1.0) * ((-(D(x1, y1, z1) * (1.0 - dx) + D(x2, y1, z1) * dx) + + (D(x1, y2, z1) * (1.0 - dx) + D(x2, y2, z1) * dx)) * + (1.0 - dz) + + (-(D(x1, y1, z2) * (1.0 - dx) + D(x2, y1, z2) * dx) + + (D(x1, y2, z2) * (1.0 - dx) + D(x2, y2, z2) * dx)) * + dz); double du_dz = (signflip_dz ? -1.0 : 1.0) * - (-((D(x1, y1, z1) * (1.0 - dx) + D(x2, y1, z1) * dx) * (1.0 - dy) + - (D(x1, y2, z1) * (1.0 - dx) + D(x2, y2, z1) * dx) * dy) + - ((D(x1, y1, z2) * (1.0 - dx) + D(x2, y1, z2) * dx) * (1.0 - dy) + - (D(x1, y2, z2) * (1.0 - dx) + D(x2, y2, z2) * dx) * dy)); + (-((D(x1, y1, z1) * (1.0 - dx) + D(x2, y1, z1) * dx) * (1.0 - dy) + + (D(x1, y2, z1) * (1.0 - dx) + D(x2, y2, z1) * dx) * dy) + + ((D(x1, y1, z2) * (1.0 - dx) + D(x2, y1, z2) * dx) * (1.0 - dy) + + (D(x1, y2, z2) * (1.0 - dx) + D(x2, y2, z2) * dx) * dy)); #undef D @@ -439,27 +435,28 @@ meep::vec material_grid_grad(vector3 p, material_data *md, const geometric_objec gradient.set_direction(meep::Z, grad_u_J.z); } else { - gradient.set_direction(meep::X, geometry_lattice.size.x == 0 ? 0 : grad_u.x / geometry_lattice.size.x); - gradient.set_direction(meep::Y, geometry_lattice.size.y == 0 ? 0 : grad_u.y / geometry_lattice.size.y); - gradient.set_direction(meep::Z, geometry_lattice.size.z == 0 ? 0 : grad_u.z / geometry_lattice.size.z); + gradient.set_direction(meep::X, + geometry_lattice.size.x == 0 ? 0 : grad_u.x / geometry_lattice.size.x); + gradient.set_direction(meep::Y, + geometry_lattice.size.y == 0 ? 0 : grad_u.y / geometry_lattice.size.y); + gradient.set_direction(meep::Z, + geometry_lattice.size.z == 0 ? 0 : grad_u.z / geometry_lattice.size.z); } return gradient; } void map_lattice_coordinates(double &px, double &py, double &pz) { - px = geometry_lattice.size.x == 0 ? 0 - : 0.5 + (px - geometry_center.x) / geometry_lattice.size.x; - py = geometry_lattice.size.y == 0 ? 0 - : 0.5 + (py - geometry_center.y) / geometry_lattice.size.y; - pz = geometry_lattice.size.z == 0 ? 0 - : 0.5 + (pz - geometry_center.z) / geometry_lattice.size.z; + px = geometry_lattice.size.x == 0 ? 0 : 0.5 + (px - geometry_center.x) / geometry_lattice.size.x; + py = geometry_lattice.size.y == 0 ? 0 : 0.5 + (py - geometry_center.y) / geometry_lattice.size.y; + pz = geometry_lattice.size.z == 0 ? 0 : 0.5 + (pz - geometry_center.z) / geometry_lattice.size.z; } meep::vec matgrid_grad(vector3 p, geom_box_tree tp, int oi, material_data *md) { if (md->material_grid_kinds == material_data::U_MIN || md->material_grid_kinds == material_data::U_PROD) - meep::abort("%s:%i:matgrid_grad does not support overlapping grids with U_MIN or U_PROD\n",__FILE__,__LINE__); + meep::abort("%s:%i:matgrid_grad does not support overlapping grids with U_MIN or U_PROD\n", + __FILE__, __LINE__); meep::vec gradient(zero_vec(dim)); int matgrid_val_count = 0; @@ -467,9 +464,9 @@ meep::vec matgrid_grad(vector3 p, geom_box_tree tp, int oi, material_data *md) { // iterate through object tree at current point if (tp) { do { - gradient += material_grid_grad(to_geom_box_coords(p, &tp->objects[oi]), - (material_data *)tp->objects[oi].o->material, - tp->objects[oi].o); + gradient += + material_grid_grad(to_geom_box_coords(p, &tp->objects[oi]), + (material_data *)tp->objects[oi].o->material, tp->objects[oi].o); if (md->material_grid_kinds == material_data::U_DEFAULT) break; ++matgrid_val_count; tp = geom_tree_search_next(p, tp, &oi); @@ -477,13 +474,14 @@ meep::vec matgrid_grad(vector3 p, geom_box_tree tp, int oi, material_data *md) { } // perhaps there is no object tree and the default material is a material grid if (!tp && is_material_grid(default_material)) { - map_lattice_coordinates(p.x,p.y,p.z); - gradient = material_grid_grad(p, (material_data *)default_material, NULL /* geometric_object *o */); + map_lattice_coordinates(p.x, p.y, p.z); + gradient = + material_grid_grad(p, (material_data *)default_material, NULL /* geometric_object *o */); ++matgrid_val_count; } if (md->material_grid_kinds == material_data::U_MEAN) - gradient = gradient * 1.0/matgrid_val_count; + gradient = gradient * 1.0 / matgrid_val_count; return gradient; } @@ -492,17 +490,15 @@ double material_grid_val(vector3 p, material_data *md) { // given the relative location, p, interpolate the material grid point. if (!is_material_grid(md)) { meep::abort("Invalid material grid detected.\n"); } - return meep::linear_interpolate(p.x, p.y, p.z, md->weights, md->grid_size.x, - md->grid_size.y, md->grid_size.z, 1); - + return meep::linear_interpolate(p.x, p.y, p.z, md->weights, md->grid_size.x, md->grid_size.y, + md->grid_size.z, 1); } static double tanh_projection(double u, double beta, double eta) { if (beta == 0) return u; if (u == eta) return 0.5; // avoid NaN when beta is Inf - double tanh_beta_eta = tanh(beta*eta); - return (tanh_beta_eta + tanh(beta*(u-eta))) / - (tanh_beta_eta + tanh(beta*(1-eta))); + double tanh_beta_eta = tanh(beta * eta); + return (tanh_beta_eta + tanh(beta * (u - eta))) / (tanh_beta_eta + tanh(beta * (1 - eta))); } double matgrid_val(vector3 p, geom_box_tree tp, int oi, material_data *md) { @@ -527,7 +523,7 @@ double matgrid_val(vector3 p, geom_box_tree tp, int oi, material_data *md) { } // perhaps there is no object tree and the default material is a material grid if (!tp && is_material_grid(default_material)) { - map_lattice_coordinates(p.x,p.y,p.z); + map_lattice_coordinates(p.x, p.y, p.z); u = material_grid_val(p, (material_data *)default_material); if (matgrid_val_count == 0) udefault = u; if (u < umin) umin = u; @@ -537,11 +533,11 @@ double matgrid_val(vector3 p, geom_box_tree tp, int oi, material_data *md) { } return (md->material_grid_kinds == material_data::U_MIN - ? umin - : (md->material_grid_kinds == material_data::U_PROD - ? uprod - : (md->material_grid_kinds == material_data::U_MEAN ? usum / matgrid_val_count - : udefault))); + ? umin + : (md->material_grid_kinds == material_data::U_PROD + ? uprod + : (md->material_grid_kinds == material_data::U_MEAN ? usum / matgrid_val_count + : udefault))); } static void cinterp_tensors(vector3 diag_in_1, cvector3 offdiag_in_1, vector3 diag_in_2, cvector3 offdiag_in_2, vector3 *diag_out, cvector3 *offdiag_out, @@ -589,16 +585,14 @@ void epsilon_material_grid(material_data *md, double u) { for (size_t i = 0; i < m1->E_susceptibilities.size(); i++) { // iterate through medium1 sus list first interp_tensors(zero_vec, zero_vec, m1->E_susceptibilities[i].sigma_diag, - m1->E_susceptibilities[i].sigma_offdiag, - &mm->E_susceptibilities[i].sigma_diag, + m1->E_susceptibilities[i].sigma_offdiag, &mm->E_susceptibilities[i].sigma_diag, &mm->E_susceptibilities[i].sigma_offdiag, (1 - u)); } for (size_t i = 0; i < m2->E_susceptibilities.size(); i++) { // iterate through medium2 sus list next size_t j = i + m1->E_susceptibilities.size(); interp_tensors(zero_vec, zero_vec, m2->E_susceptibilities[i].sigma_diag, - m2->E_susceptibilities[i].sigma_offdiag, - &mm->E_susceptibilities[j].sigma_diag, + m2->E_susceptibilities[i].sigma_offdiag, &mm->E_susceptibilities[j].sigma_diag, &mm->E_susceptibilities[j].sigma_offdiag, u); } @@ -624,16 +618,15 @@ void epsilon_material_grid(material_data *md, double u) { // TODO: dampen the lorentzians to improve stability // mm->D_conductivity_diag.x = mm->D_conductivity_diag.y = mm->D_conductivity_diag.z = u*(1-u) * // omega_mean; - md->trivial=false; + md->trivial = false; } - double fake_damping = u*(1-u)*(md->damping); + double fake_damping = u * (1 - u) * (md->damping); mm->D_conductivity_diag.x += fake_damping; mm->D_conductivity_diag.y += fake_damping; mm->D_conductivity_diag.z += fake_damping; // set the trivial flag - if (md->damping != 0) - md->trivial=false; + if (md->damping != 0) md->trivial = false; } // return material of the point p from the file (assumed already read) @@ -665,10 +658,11 @@ geom_epsilon::geom_epsilon(geometric_object_list g, material_type_list mlist, int length = g.num_items; geometry.num_items = length; geometry.items = new geometric_object[length]; - for (int i = 0; i < length; i++){ - geometric_object_copy(&g.items[i],&geometry.items[i]); + for (int i = 0; i < length; i++) { + geometric_object_copy(&g.items[i], &geometry.items[i]); geometry.items[i].material = new material_data(); - static_cast(geometry.items[i].material)->copy_from(*(material_data *)(g.items[i].material)); + static_cast(geometry.items[i].material) + ->copy_from(*(material_data *)(g.items[i].material)); } extra_materials = mlist; @@ -719,10 +713,11 @@ geom_epsilon::geom_epsilon(const geom_epsilon &geps1) { int length = geps1.geometry.num_items; geometry.num_items = length; geometry.items = new geometric_object[length]; - for (int i = 0; i < length; i++){ - geometric_object_copy(&geps1.geometry.items[i],&geometry.items[i]); + for (int i = 0; i < length; i++) { + geometric_object_copy(&geps1.geometry.items[i], &geometry.items[i]); geometry.items[i].material = new material_data(); - static_cast(geometry.items[i].material)->copy_from(*(material_data *)(geps1.geometry.items[i].material)); + static_cast(geometry.items[i].material) + ->copy_from(*(material_data *)(geps1.geometry.items[i].material)); } geometry_tree = geps1.geometry_tree; @@ -731,11 +726,10 @@ geom_epsilon::geom_epsilon(const geom_epsilon &geps1) { current_pol = NULL; FOR_DIRECTIONS(d) FOR_SIDES(b) { cond[d][b].prof = geps1.cond[d][b].prof; } - } geom_epsilon::~geom_epsilon() { int length = geometry.num_items; - for (int i = 0; i < length; i++){ + for (int i = 0; i < length; i++) { material_free((material_type)geometry.items[i].material); geometric_object_destroy(geometry.items[i]); } @@ -780,8 +774,7 @@ void geom_epsilon::set_volume(const meep::volume &v) { unset_volume(); geom_box box = gv2box(v); - if (!restricted_tree) - restricted_tree = create_geom_box_tree0(geometry, box); + if (!restricted_tree) restricted_tree = create_geom_box_tree0(geometry, box); } static void material_epsmu(meep::field_type ft, material_type material, symm_matrix *epsmu, @@ -865,7 +858,7 @@ void geom_epsilon::get_material_pt(material_type &material, const meep::vec &r) tp = geom_tree_search(p, restricted_tree, &oi); // interpolate and project onto material grid - u = tanh_projection(matgrid_val(p, tp, oi, md)+this->u_p, md->beta, md->eta); + u = tanh_projection(matgrid_val(p, tp, oi, md) + this->u_p, md->beta, md->eta); // interpolate material from material grid point epsilon_material_grid(md, u); @@ -1084,15 +1077,14 @@ void geom_epsilon::eff_chi1inv_matrix(meep::component c, symm_matrix *chi1inv_ma if (!get_front_object(v, geometry_tree, p, &o, shiftby, mat, mat_behind)) { get_material_pt(mat, v.center()); - if (mat && (mat->which_subclass == material_data::MATERIAL_USER || - mat->which_subclass == material_data::MATERIAL_GRID) - && mat->do_averaging) { + if (mat && + (mat->which_subclass == material_data::MATERIAL_USER || + mat->which_subclass == material_data::MATERIAL_GRID) && + mat->do_averaging) { fallback = true; return; } - else { - goto trivial; - } + else { goto trivial; } } /* check for trivial case of only one object/material */ @@ -1203,25 +1195,26 @@ static int eps_ever_negative = 0; static meep::field_type func_ft = meep::E_stuff; struct matgrid_volavg { - meep::ndim dim; // dimensionality of voxel - double rad; // (spherical) voxel radius - double uval; // bilinearly-interpolated weight at voxel center - double ugrad_abs; // magnitude of gradient of uval - double beta; // thresholding bias - double eta; // thresholding erosion/dilation - double eps1; // trace of epsilon tensor from medium 1 - double eps2; // trace of epsilon tensor from medium 2 + meep::ndim dim; // dimensionality of voxel + double rad; // (spherical) voxel radius + double uval; // bilinearly-interpolated weight at voxel center + double ugrad_abs; // magnitude of gradient of uval + double beta; // thresholding bias + double eta; // thresholding erosion/dilation + double eps1; // trace of epsilon tensor from medium 1 + double eps2; // trace of epsilon tensor from medium 2 }; static void get_uproj_w(const matgrid_volavg *mgva, double x0, double &u_proj, double &w) { // use a linear approximation for the material grid weights around the Yee grid point - u_proj = tanh_projection(mgva->uval + mgva->ugrad_abs*x0, mgva->beta, mgva->eta); + u_proj = tanh_projection(mgva->uval + mgva->ugrad_abs * x0, mgva->beta, mgva->eta); if (mgva->dim == meep::D1) - w = 1/(2*mgva->rad); + w = 1 / (2 * mgva->rad); else if (mgva->dim == meep::D2 || mgva->dim == meep::Dcyl) - w = 2*sqrt(mgva->rad*mgva->rad - x0*x0)/(meep::pi * mgva->rad*mgva->rad); + w = 2 * sqrt(mgva->rad * mgva->rad - x0 * x0) / (meep::pi * mgva->rad * mgva->rad); else if (mgva->dim == meep::D3) - w = meep::pi*(mgva->rad*mgva->rad - x0*x0)/(4/3 * meep::pi * mgva->rad*mgva->rad*mgva->rad); + w = meep::pi * (mgva->rad * mgva->rad - x0 * x0) / + (4 / 3 * meep::pi * mgva->rad * mgva->rad * mgva->rad); } #ifdef CTL_HAS_COMPLEX_INTEGRATION @@ -1231,8 +1224,8 @@ static cnumber matgrid_ceps_func(int n, number *x, void *mgva_) { matgrid_volavg *mgva = (matgrid_volavg *)mgva_; get_uproj_w(mgva, x[0], u_proj, w); cnumber ret; - ret.re = (1-u_proj)*mgva->eps1 + u_proj*mgva->eps2; - ret.im = (1-u_proj)/mgva->eps1 + u_proj/mgva->eps2; + ret.re = (1 - u_proj) * mgva->eps1 + u_proj * mgva->eps2; + ret.im = (1 - u_proj) / mgva->eps1 + u_proj / mgva->eps2; return ret * w; } #else @@ -1241,14 +1234,14 @@ static number matgrid_eps_func(int n, number *x, void *mgva_) { double u_proj = 0, w = 0; matgrid_volavg *mgva = (matgrid_volavg *)mgva_; get_uproj_w(mgva, x[0], u_proj, w); - return w * ((1-u_proj)*mgva->eps1 + u_proj*mgva->eps2); + return w * ((1 - u_proj) * mgva->eps1 + u_proj * mgva->eps2); } static number matgrid_inveps_func(int n, number *x, void *mgva_) { (void)n; // unused double u_proj = 0, w = 0; matgrid_volavg *mgva = (matgrid_volavg *)mgva_; get_uproj_w(mgva, x[0], u_proj, w); - return w * ((1-u_proj)/mgva->eps1 + u_proj/mgva->eps2); + return w * ((1 - u_proj) / mgva->eps1 + u_proj / mgva->eps2); } #endif @@ -1329,11 +1322,9 @@ void geom_epsilon::fallback_chi1inv_row(meep::component c, double chi1inv_row[3] int oi; tp = geom_tree_search(p, restricted_tree, &oi); gradient = matgrid_grad(p, tp, oi, md); - uval = matgrid_val(p, tp, oi, md)+this->u_p; - } - else { - gradient = normal_vector(meep::type(c), v); + uval = matgrid_val(p, tp, oi, md) + this->u_p; } + else { gradient = normal_vector(meep::type(c), v); } get_material_pt(material, v.center()); material_epsmu(meep::type(c), material, &chi1p1, &chi1p1_inv); @@ -1368,23 +1359,27 @@ void geom_epsilon::fallback_chi1inv_row(meep::component c, double chi1inv_row[3] mgva.dim = v.dim; mgva.ugrad_abs = meep::abs(gradient); mgva.uval = uval; - mgva.rad = v.diameter()/2; + mgva.rad = v.diameter() / 2; mgva.beta = md->beta; mgva.eta = md->eta; - mgva.eps1 = (md->medium_1.epsilon_diag.x+md->medium_1.epsilon_diag.y+md->medium_1.epsilon_diag.z)/3; - mgva.eps2 = (md->medium_2.epsilon_diag.x+md->medium_2.epsilon_diag.y+md->medium_2.epsilon_diag.z)/3; - xmin[0] = -v.diameter()/2; - xmax[0] = v.diameter()/2; + mgva.eps1 = + (md->medium_1.epsilon_diag.x + md->medium_1.epsilon_diag.y + md->medium_1.epsilon_diag.z) / + 3; + mgva.eps2 = + (md->medium_2.epsilon_diag.x + md->medium_2.epsilon_diag.y + md->medium_2.epsilon_diag.z) / + 3; + xmin[0] = -v.diameter() / 2; + xmax[0] = v.diameter() / 2; #ifdef CTL_HAS_COMPLEX_INTEGRATION - cnumber ret = cadaptive_integration(matgrid_ceps_func, xmin, xmax, 1, (void *)&mgva, 0, tol, maxeval, - &esterr, &errflag); + cnumber ret = cadaptive_integration(matgrid_ceps_func, xmin, xmax, 1, (void *)&mgva, 0, tol, + maxeval, &esterr, &errflag); meps = ret.re; minveps = ret.im; #else - meps = adaptive_integration(matgrid_eps_func, xmin, xmax, 1, (void *)&mgva, 0, tol, maxeval, &esterr, - &errflag); - minveps = adaptive_integration(matgrid_inveps_func, xmin, xmax, 1, (void *)&mgva, 0, tol, maxeval, &esterr, - &errflag); + meps = adaptive_integration(matgrid_eps_func, xmin, xmax, 1, (void *)&mgva, 0, tol, maxeval, + &esterr, &errflag); + minveps = adaptive_integration(matgrid_inveps_func, xmin, xmax, 1, (void *)&mgva, 0, tol, + maxeval, &esterr, &errflag); #endif } else { @@ -1424,9 +1419,11 @@ void geom_epsilon::fallback_chi1inv_row(meep::component c, double chi1inv_row[3] minveps = ret.im / vol; #else meps = adaptive_integration(eps_func, xmin, xmax, n, (void *)this, 0, tol, maxeval, &esterr, - &errflag) / vol; - minveps = adaptive_integration(inveps_func, xmin, xmax, n, (void *)this, 0, tol, maxeval, &esterr, - &errflag) / vol; + &errflag) / + vol; + minveps = adaptive_integration(inveps_func, xmin, xmax, n, (void *)this, 0, tol, maxeval, + &esterr, &errflag) / + vol; #endif } if (eps_ever_negative) // averaging negative eps causes instability @@ -1562,12 +1559,12 @@ static double get_cnd(meep::component c, const medium_struct *m) { } static bool has_conductivity(const material_type &md, meep::component c) { - medium_struct *mm; - if (is_medium(md, &mm) && get_cnd(c, mm)) return true; - if (md->which_subclass == material_data::MATERIAL_GRID && - (get_cnd(c, &md->medium_1) || get_cnd(c, &md->medium_2) || - md->damping != 0)) return true; - return false; + medium_struct *mm; + if (is_medium(md, &mm) && get_cnd(c, mm)) return true; + if (md->which_subclass == material_data::MATERIAL_GRID && + (get_cnd(c, &md->medium_1) || get_cnd(c, &md->medium_2) || md->damping != 0)) + return true; + return false; } bool geom_epsilon::has_conductivity(meep::component c) { @@ -1575,10 +1572,10 @@ bool geom_epsilon::has_conductivity(meep::component c) { if (cond[d][b].prof) return true; } for (int i = 0; i < geometry.num_items; ++i) - if (meep_geom::has_conductivity((material_type) geometry.items[i].material, c)) return true; + if (meep_geom::has_conductivity((material_type)geometry.items[i].material, c)) return true; for (int i = 0; i < extra_materials.num_items; ++i) - if (meep_geom::has_conductivity((material_type) extra_materials.items[i], c)) return true; - return meep_geom::has_conductivity((material_type) default_material, c); + if (meep_geom::has_conductivity((material_type)extra_materials.items[i], c)) return true; + return meep_geom::has_conductivity((material_type)default_material, c); } static meep::vec geometry_edge; // geometry_lattice.size / 2 @@ -1670,8 +1667,8 @@ void geom_epsilon::sigma_row(meep::component c, double sigrow[3], const meep::ve tp = geom_tree_search(p, restricted_tree, &oi); // interpolate and project onto material grid - u = tanh_projection(matgrid_val(p, tp, oi, mat)+this->u_p, mat->beta, mat->eta); - epsilon_material_grid(mat, u); // interpolate material from material grid point + u = tanh_projection(matgrid_val(p, tp, oi, mat) + this->u_p, mat->beta, mat->eta); + epsilon_material_grid(mat, u); // interpolate material from material grid point mat->medium.check_offdiag_im_zero_or_abort(); } @@ -1852,21 +1849,21 @@ void geom_epsilon::add_susceptibilities(meep::field_type ft, meep::structure *s) ss->drude); } else if (gyrotropic) { - meep::gyrotropy_model model = - ss->saturated_gyrotropy - ? meep::GYROTROPIC_SATURATED - : ss->drude ? meep::GYROTROPIC_DRUDE : meep::GYROTROPIC_LORENTZIAN; + meep::gyrotropy_model model = ss->saturated_gyrotropy ? meep::GYROTROPIC_SATURATED + : ss->drude ? meep::GYROTROPIC_DRUDE + : meep::GYROTROPIC_LORENTZIAN; sus = new meep::gyrotropic_susceptibility(meep::vec(ss->bias.x, ss->bias.y, ss->bias.z), ss->frequency, ss->gamma, ss->alpha, model); } - else { - sus = new meep::lorentzian_susceptibility(ss->frequency, ss->gamma, ss->drude); - } + else { sus = new meep::lorentzian_susceptibility(ss->frequency, ss->gamma, ss->drude); } if (meep::verbosity > 0) { master_printf("%s%s susceptibility: frequency=%g, gamma=%g", - noisy ? "noisy " : gyrotropic ? "gyrotropic " : "", + noisy ? "noisy " + : gyrotropic ? "gyrotropic " + : "", ss->saturated_gyrotropy ? "Landau-Lifshitz-Gilbert-type" - : ss->drude ? "drude" : "lorentzian", + : ss->drude ? "drude" + : "lorentzian", ss->frequency, ss->gamma); if (noisy) master_printf(", amp=%g ", ss->noise_amp); if (gyrotropic) { @@ -1937,7 +1934,7 @@ void add_absorbing_layer(absorber_list alist, double thickness, int direction, i /* create a geom_epsilon object that can persist if needed */ -geom_epsilon* make_geom_epsilon(meep::structure *s, geometric_object_list *g, vector3 center, +geom_epsilon *make_geom_epsilon(meep::structure *s, geometric_object_list *g, vector3 center, bool _ensure_periodicity, material_type _default_material, material_type_list extra_materials) { // set global variables in libctlgeom based on data fields in s @@ -2001,16 +1998,15 @@ void set_materials_from_geometry(meep::structure *s, geometric_object_list g, ve absorber_list alist, material_type_list extra_materials) { meep_geom::geom_epsilon *geps = meep_geom::make_geom_epsilon(s, &g, center, _ensure_periodicity, _default_material, extra_materials); - set_materials_from_geom_epsilon(s, geps, use_anisotropic_averaging, tol, - maxeval, alist); + set_materials_from_geom_epsilon(s, geps, use_anisotropic_averaging, tol, maxeval, alist); delete geps; } /* from a previously created geom_epsilon object, set the materials as specified */ void set_materials_from_geom_epsilon(meep::structure *s, geom_epsilon *geps, - bool use_anisotropic_averaging, - double tol, int maxeval, absorber_list alist) { + bool use_anisotropic_averaging, double tol, int maxeval, + absorber_list alist) { // store for later use in gradient calculations geps->tol = tol; @@ -2220,8 +2216,7 @@ fragment_stats::fragment_stats(geom_box &bx) } void init_libctl(material_type default_mat, bool ensure_per, meep::grid_volume *gv, - vector3 cell_size, vector3 cell_center, - geometric_object_list *geom_) { + vector3 cell_size, vector3 cell_center, geometric_object_list *geom_) { geom_initialize(); set_default_material(default_mat); ensure_periodicity = ensure_per; @@ -2289,8 +2284,9 @@ void fragment_stats::compute_stats() { for (int i = 0; i < geom.num_items; ++i) { geometric_object *go = &geom.items[i]; - // tolerance and max number of function evaluations of numerical quadrature are increased and decreased - // from default values of 0.0001 and 100000, respectively, to obtain fast, approximate result + // tolerance and max number of function evaluations of numerical quadrature are increased and + // decreased from default values of 0.0001 and 100000, respectively, to obtain fast, approximate + // result double overlap = box_overlap_with_object(box, *go, 0.05 /* tol */, 1000 /* maxeval */); bool anisotropic_pixels_already_added = false; @@ -2486,35 +2482,16 @@ geom_box_tree calculate_tree(const meep::volume &v, geometric_object_list g) { static std::complex cvec_to_value(vector3 diag, cvector3 offdiag, int idx) { std::complex val = std::complex(0, 0); switch (idx) { - case 0: - val = std::complex(diag.x, 0); - break; - case 1: - val = std::complex(offdiag.x.re, offdiag.x.im); - break; - case 2: - val = std::complex(offdiag.y.re, offdiag.y.im); - break; - case 3: - val = std::complex(offdiag.x.re, -offdiag.x.im); - break; - case 4: - val = std::complex(diag.y, 0); - break; - case 5: - val = std::complex(offdiag.z.re, offdiag.z.im); - break; - case 6: - val = std::complex(offdiag.y.re, -offdiag.y.im); - break; - case 7: - val = std::complex(offdiag.z.re, -offdiag.z.im); - break; - case 8: - val = std::complex(diag.z, 0); - break; - default: - meep::abort("Invalid value in switch statement."); + case 0: val = std::complex(diag.x, 0); break; + case 1: val = std::complex(offdiag.x.re, offdiag.x.im); break; + case 2: val = std::complex(offdiag.y.re, offdiag.y.im); break; + case 3: val = std::complex(offdiag.x.re, -offdiag.x.im); break; + case 4: val = std::complex(diag.y, 0); break; + case 5: val = std::complex(offdiag.z.re, offdiag.z.im); break; + case 6: val = std::complex(offdiag.y.re, -offdiag.y.im); break; + case 7: val = std::complex(offdiag.z.re, -offdiag.z.im); break; + case 8: val = std::complex(diag.z, 0); break; + default: meep::abort("Invalid value in switch statement."); } return val; } @@ -2523,46 +2500,27 @@ static std::complex cvec_to_value(vector3 diag, cvector3 offdiag, int id double vec_to_value(vector3 diag, vector3 offdiag, int idx) { double val = 0.0; switch (idx) { - case 0: - val = diag.x; - break; - case 1: - val = offdiag.x; - break; - case 2: - val = offdiag.y; - break; - case 3: - val = offdiag.x; - break; - case 4: - val = diag.y; - break; - case 5: - val = offdiag.z; - break; - case 6: - val = offdiag.y; - break; - case 7: - val = offdiag.z; - break; - case 8: - val = diag.z; - break; - default: - meep::abort("Invalid value in switch statement."); + case 0: val = diag.x; break; + case 1: val = offdiag.x; break; + case 2: val = offdiag.y; break; + case 3: val = offdiag.x; break; + case 4: val = diag.y; break; + case 5: val = offdiag.z; break; + case 6: val = offdiag.y; break; + case 7: val = offdiag.z; break; + case 8: val = diag.z; break; + default: meep::abort("Invalid value in switch statement."); } return val; } void invert_tensor(std::complex t_inv[9], std::complex t[9]) { -#define m(x,y) t[x*3+y] -#define minv(x,y) t_inv[x*3+y] +#define m(x, y) t[x * 3 + y] +#define minv(x, y) t_inv[x * 3 + y] std::complex det = m(0, 0) * (m(1, 1) * m(2, 2) - m(2, 1) * m(1, 2)) - - m(0, 1) * (m(1, 0) * m(2, 2) - m(1, 2) * m(2, 0)) + - m(0, 2) * (m(1, 0) * m(2, 1) - m(1, 1) * m(2, 0)); + m(0, 1) * (m(1, 0) * m(2, 2) - m(1, 2) * m(2, 0)) + + m(0, 2) * (m(1, 0) * m(2, 1) - m(1, 1) * m(2, 0)); std::complex invdet = 1.0 / det; minv(0, 0) = (m(1, 1) * m(2, 2) - m(2, 1) * m(1, 2)) * invdet; minv(0, 1) = (m(0, 2) * m(2, 1) - m(0, 1) * m(2, 2)) * invdet; @@ -2577,7 +2535,8 @@ void invert_tensor(std::complex t_inv[9], std::complex t[9]) { #undef minv } -void get_chi1_tensor_disp(std::complex tensor[9], const meep::vec &r, double freq, geom_epsilon *geps) { +void get_chi1_tensor_disp(std::complex tensor[9], const meep::vec &r, double freq, + geom_epsilon *geps) { // locate the proper material material_type md; geps->get_material_pt(md, r); @@ -2585,18 +2544,18 @@ void get_chi1_tensor_disp(std::complex tensor[9], const meep::vec &r, do // loop over all the tensor components for (int i = 0; i < 9; i++) { - std::complex a,b; + std::complex a, b; // compute first part containing conductivity vector3 dummy; dummy.x = dummy.y = dummy.z = 0.0; double conductivityCur = vec_to_value(mm->D_conductivity_diag, dummy, i); - a = std::complex(1.0, conductivityCur / (2*meep::pi*freq)); + a = std::complex(1.0, conductivityCur / (2 * meep::pi * freq)); // compute lorentzian component including the instantaneous ε b = cvec_to_value(mm->epsilon_diag, mm->epsilon_offdiag, i); - for (const auto &mm_susc: mm->E_susceptibilities) { - meep::lorentzian_susceptibility sus = meep::lorentzian_susceptibility( - mm_susc.frequency, mm_susc.gamma, mm_susc.drude); + for (const auto &mm_susc : mm->E_susceptibilities) { + meep::lorentzian_susceptibility sus = + meep::lorentzian_susceptibility(mm_susc.frequency, mm_susc.gamma, mm_susc.drude); double sigma = vec_to_value(mm_susc.sigma_diag, mm_susc.sigma_offdiag, i); b += sus.chi1(freq, sigma); } @@ -2607,63 +2566,67 @@ void get_chi1_tensor_disp(std::complex tensor[9], const meep::vec &r, do } void eff_chi1inv_row_disp(meep::component c, std::complex chi1inv_row[3], - const meep::vec &r, double freq, geom_epsilon *geps) { + const meep::vec &r, double freq, geom_epsilon *geps) { std::complex tensor[9], tensor_inv[9]; get_chi1_tensor_disp(tensor, r, freq, geps); // invert the matrix invert_tensor(tensor_inv, tensor); // get the row we care about - switch (component_direction(c)) { - case meep::X: - case meep::R: - chi1inv_row[0] = tensor_inv[0]; - chi1inv_row[1] = tensor_inv[1]; - chi1inv_row[2] = tensor_inv[2]; - break; - case meep::Y: - case meep::P: - chi1inv_row[0] = tensor_inv[3]; - chi1inv_row[1] = tensor_inv[4]; - chi1inv_row[2] = tensor_inv[5]; - break; - case meep::Z: - chi1inv_row[0] = tensor_inv[6]; - chi1inv_row[1] = tensor_inv[7]; - chi1inv_row[2] = tensor_inv[8]; - break; - case meep::NO_DIRECTION: chi1inv_row[0] = chi1inv_row[1] = chi1inv_row[2] = 0; break; - } + switch (component_direction(c)) { + case meep::X: + case meep::R: + chi1inv_row[0] = tensor_inv[0]; + chi1inv_row[1] = tensor_inv[1]; + chi1inv_row[2] = tensor_inv[2]; + break; + case meep::Y: + case meep::P: + chi1inv_row[0] = tensor_inv[3]; + chi1inv_row[1] = tensor_inv[4]; + chi1inv_row[2] = tensor_inv[5]; + break; + case meep::Z: + chi1inv_row[0] = tensor_inv[6]; + chi1inv_row[1] = tensor_inv[7]; + chi1inv_row[2] = tensor_inv[8]; + break; + case meep::NO_DIRECTION: chi1inv_row[0] = chi1inv_row[1] = chi1inv_row[2] = 0; break; + } } -std::complex cond_cmp(meep::component c, const meep::vec &r, double freq, geom_epsilon *geps) { +std::complex cond_cmp(meep::component c, const meep::vec &r, double freq, + geom_epsilon *geps) { // locate the proper material material_type md; geps->get_material_pt(md, r); const medium_struct *mm = &(md->medium); // get the row we care about - switch (component_direction(c)) { - case meep::X: - case meep::R: return std::complex(1.0, mm->D_conductivity_diag.x / (2*meep::pi*freq)); - case meep::Y: - case meep::P: return std::complex(1.0, mm->D_conductivity_diag.y / (2*meep::pi*freq)); - case meep::Z: return std::complex(1.0, mm->D_conductivity_diag.z / (2*meep::pi*freq)); - case meep::NO_DIRECTION: meep::abort("Invalid adjoint field component"); - } -} - -std::complex get_material_gradient( - const meep::vec &r, // current point - const meep::component adjoint_c, // adjoint field component - const meep::component forward_c, // forward field component - std::complex fields_f, // forward field at current point - double freq, // frequency - geom_epsilon *geps, // material - meep::grid_volume &gv, // simulation grid volume - double du, // step size - double *u, // matgrid - int idx // matgrid index + switch (component_direction(c)) { + case meep::X: + case meep::R: + return std::complex(1.0, mm->D_conductivity_diag.x / (2 * meep::pi * freq)); + case meep::Y: + case meep::P: + return std::complex(1.0, mm->D_conductivity_diag.y / (2 * meep::pi * freq)); + case meep::Z: + return std::complex(1.0, mm->D_conductivity_diag.z / (2 * meep::pi * freq)); + case meep::NO_DIRECTION: meep::abort("Invalid adjoint field component"); + } +} + +std::complex +get_material_gradient(const meep::vec &r, // current point + const meep::component adjoint_c, // adjoint field component + const meep::component forward_c, // forward field component + std::complex fields_f, // forward field at current point + double freq, // frequency + geom_epsilon *geps, // material + meep::grid_volume &gv, // simulation grid volume + double du, // step size + double *u, // matgrid + int idx // matgrid index ) { /*Compute the Aᵤx product from the -λᵀAᵤx calculation. The current adjoint (λ) field component (adjoint_c) @@ -2702,30 +2665,33 @@ std::complex get_material_gradient( const double sd = 1.0; // FIXME: make user-changable? meep::volume v(r); LOOP_OVER_DIRECTIONS(dim, d) { - v.set_direction_min(d, r.in_direction(d) - 0.5*gv.inva*sd); - v.set_direction_max(d, r.in_direction(d) + 0.5*gv.inva*sd); + v.set_direction_min(d, r.in_direction(d) - 0.5 * gv.inva * sd); + v.set_direction_max(d, r.in_direction(d) + 0.5 * gv.inva * sd); } double row_1[3], row_2[3], dA_du[3]; double orig = u[idx]; u[idx] -= du; geps->eff_chi1inv_row(adjoint_c, row_1, v, geps->tol, geps->maxeval); - u[idx] += 2*du; + u[idx] += 2 * du; geps->eff_chi1inv_row(adjoint_c, row_2, v, geps->tol, geps->maxeval); u[idx] = orig; - for (int i=0;i<3;i++) dA_du[i] = (row_1[i] - row_2[i])/(2*du); + for (int i = 0; i < 3; i++) + dA_du[i] = (row_1[i] - row_2[i]) / (2 * du); return dA_du[dir_idx] * fields_f; - } else { + } + else { double orig = u[idx]; std::complex row_1[3], row_2[3], dA_du[3]; u[idx] -= du; - eff_chi1inv_row_disp(adjoint_c,row_1,r,freq,geps); - u[idx] += 2*du; - eff_chi1inv_row_disp(adjoint_c,row_2,r,freq,geps); + eff_chi1inv_row_disp(adjoint_c, row_1, r, freq, geps); + u[idx] += 2 * du; + eff_chi1inv_row_disp(adjoint_c, row_2, r, freq, geps); u[idx] = orig; - for (int i=0;i<3;i++) dA_du[i] = (row_1[i] - row_2[i])/(2*du); - return dA_du[dir_idx] * fields_f * cond_cmp(forward_c,r,freq,geps); + for (int i = 0; i < 3; i++) + dA_du[i] = (row_1[i] - row_2[i]) / (2 * du); + return dA_du[dir_idx] * fields_f * cond_cmp(forward_c, r, freq, geps); } } @@ -2736,27 +2702,24 @@ With the addition of subpixel smoothing, however, the vJp became much more complicated and it is easier to calculate the entire gradient using finite differences (at the cost of slightly less accurate gradients due to floating-point roundoff errors). */ -void add_interpolate_weights(double rx, double ry, double rz, - double *data, int nx, int ny, int nz, int stride, - double scaleby, double *udata, int ukind, double uval, - meep::vec r, geom_epsilon *geps, - meep::component adjoint_c, meep::component forward_c, - std::complex fwd, std::complex adj, - double freq, meep::grid_volume &gv, double du) { +void add_interpolate_weights(double rx, double ry, double rz, double *data, int nx, int ny, int nz, + int stride, double scaleby, double *udata, int ukind, double uval, + meep::vec r, geom_epsilon *geps, meep::component adjoint_c, + meep::component forward_c, std::complex fwd, + std::complex adj, double freq, meep::grid_volume &gv, + double du) { int x1, y1, z1, x2, y2, z2; double dx, dy, dz, u; - meep::map_coordinates(rx, ry, rz, nx, ny, nz, - x1, y1, z1, x2, y2, z2, - dx, dy, dz); - int x_list[2] = {x1,x2}, y_list[2] = {y1,y2}, z_list[2] = {z1,z2}; + meep::map_coordinates(rx, ry, rz, nx, ny, nz, x1, y1, z1, x2, y2, z2, dx, dy, dz); + int x_list[2] = {x1, x2}, y_list[2] = {y1, y2}, z_list[2] = {z1, z2}; int lx = (x1 == x2) ? 1 : 2; int ly = (y1 == y2) ? 1 : 2; int lz = (z1 == z2) ? 1 : 2; /* define a macro to give us data(x,y,z) on the grid, in row-major order (the order used by HDF5): */ -#define IDX(x,y,z) (((x)*ny + (y)) * nz + (z)) * stride +#define IDX(x, y, z) (((x)*ny + (y)) * nz + (z)) * stride #define D(x, y, z) (data[(((x)*ny + (y)) * nz + (z)) * stride]) #define U(x, y, z) (udata[(((x)*ny + (y)) * nz + (z)) * stride]) @@ -2770,13 +2733,13 @@ in row-major order (the order used by HDF5): */ if (ukind == material_data::U_MIN && u != uval) return; // TODO look into this if (ukind == material_data::U_PROD) scaleby *= uval / u; - for (int xi=0;xi prod = adj*get_material_gradient( - r,adjoint_c,forward_c,fwd,freq,geps,gv,du,udata,u_idx); + for (int xi = 0; xi < lx; xi++) { + for (int yi = 0; yi < ly; yi++) { + for (int zi = 0; zi < lz; zi++) { + int x = x_list[xi], y = y_list[yi], z = z_list[zi]; + int u_idx = IDX(x, y, z); + std::complex prod = adj * get_material_gradient(r, adjoint_c, forward_c, fwd, freq, + geps, gv, du, udata, u_idx); D(x, y, z) += prod.real() * scaleby; } } @@ -2821,7 +2784,9 @@ void material_grids_addgradient_point(double *v, vector3 p, double scalegrad, ge } else if ((tp) && ((mg->material_grid_kinds == material_data::U_MIN) || (mg->material_grid_kinds == material_data::U_PROD))) { - meep::abort("%s:%i:material_grids_addgradient_point does not support overlapping MATERIAL_GRIDs with U_MIN or U_PROD.\n",__FILE__,__LINE__); + meep::abort("%s:%i:material_grids_addgradient_point does not support overlapping " + "MATERIAL_GRIDs with U_MIN or U_PROD.\n", + __FILE__, __LINE__); } // Iterate through grids and add weights as needed @@ -2843,62 +2808,66 @@ void material_grids_addgradient_point(double *v, vector3 p, double scalegrad, ge uval = tanh_projection(matgrid_val(p, tp, oi, mg), mg->beta, mg->eta); do { vector3 pb = to_geom_box_coords(p, &tp->objects[oi]); - add_interpolate_weights(pb.x, pb.y, pb.z, vcur, sz.x, sz.y, sz.z, 1, - scalegrad, ucur, kind, uval, - vector3_to_vec(p), geps, adjoint_c, forward_c, - fwd, adj, freq, gv, tol); + add_interpolate_weights(pb.x, pb.y, pb.z, vcur, sz.x, sz.y, sz.z, 1, scalegrad, ucur, kind, + uval, vector3_to_vec(p), geps, adjoint_c, forward_c, fwd, adj, freq, + gv, tol); if (kind == material_data::U_DEFAULT) break; tp = geom_tree_search_next(p, tp, &oi); } while (tp && is_material_grid((material_data *)tp->objects[oi].o->material)); } // no object tree -- the whole domain is the material grid if (!tp && is_material_grid(default_material)) { - map_lattice_coordinates(p.x,p.y,p.z); + map_lattice_coordinates(p.x, p.y, p.z); vector3 sz = mg->grid_size; double *vcur = v; double *ucur = mg->weights; uval = tanh_projection(material_grid_val(p, mg), mg->beta, mg->eta); - add_interpolate_weights(p.x, p.y, p.z, vcur, sz.x, sz.y, sz.z, 1, - scalegrad, ucur, kind, uval, - vector3_to_vec(p), geps, adjoint_c, forward_c, - fwd, adj, freq, gv, tol); + add_interpolate_weights(p.x, p.y, p.z, vcur, sz.x, sz.y, sz.z, 1, scalegrad, ucur, kind, uval, + vector3_to_vec(p), geps, adjoint_c, forward_c, fwd, adj, freq, gv, tol); } } -void material_grids_addgradient(double *v, size_t ng, size_t nf, std::vector fields_a, std::vector fields_f, - double *frequencies, double scalegrad, meep::grid_volume &gv, - meep::volume &where, geom_epsilon *geps, double du) { +void material_grids_addgradient(double *v, size_t ng, size_t nf, + std::vector fields_a, + std::vector fields_f, double *frequencies, + double scalegrad, meep::grid_volume &gv, meep::volume &where, + geom_epsilon *geps, double du) { /* ------------------------------------------------------------ */ // initialize local gradient array /* ------------------------------------------------------------ */ - double *v_local = new double[ng*nf]; - for (int i = 0; i < ng*nf; i++) { + double *v_local = new double[ng * nf]; + for (int i = 0; i < ng * nf; i++) { v_local[i] = 0; } /* ------------------------------------------------------------ */ // store chunk info in vectors for simplicity /* ------------------------------------------------------------ */ - std::vector> adjoint_dft_chunks; - std::vector> forward_dft_chunks; - for (int i=0;i<3;i++){ - std::vector c_adjoint_dft_chunks; - std::vector c_forward_dft_chunks; + std::vector > adjoint_dft_chunks; + std::vector > forward_dft_chunks; + for (int i = 0; i < 3; i++) { + std::vector c_adjoint_dft_chunks; + std::vector c_forward_dft_chunks; meep::dft_chunk *current_adjoint_chunk = fields_a[i]->chunks; meep::dft_chunk *current_forward_chunk = fields_f[i]->chunks; - while(current_adjoint_chunk) { - if (current_adjoint_chunk->omega.size() != nf) meep::abort("Supplied frequencies %d don't match dft frequencies %d\n",nf,current_adjoint_chunk->omega.size()); + while (current_adjoint_chunk) { + if (current_adjoint_chunk->omega.size() != nf) + meep::abort("Supplied frequencies %d don't match dft frequencies %d\n", nf, + current_adjoint_chunk->omega.size()); c_adjoint_dft_chunks.push_back(current_adjoint_chunk); current_adjoint_chunk = current_adjoint_chunk->next_in_dft; } - while(current_forward_chunk) { - if (current_forward_chunk->omega.size() != nf) meep::abort("Supplied frequencies %d don't match dft frequencies %d\n",nf,current_forward_chunk->omega.size()); + while (current_forward_chunk) { + if (current_forward_chunk->omega.size() != nf) + meep::abort("Supplied frequencies %d don't match dft frequencies %d\n", nf, + current_forward_chunk->omega.size()); c_forward_dft_chunks.push_back(current_forward_chunk); current_forward_chunk = current_forward_chunk->next_in_dft; } if (c_adjoint_dft_chunks.size() != c_forward_dft_chunks.size()) - meep::abort("The number of adjoint chunks (%ld) is not equal to the number of forward chunks (%ld).\n", - c_adjoint_dft_chunks.size(),c_forward_dft_chunks.size()); + meep::abort("The number of adjoint chunks (%ld) is not equal to the number of forward chunks " + "(%ld).\n", + c_adjoint_dft_chunks.size(), c_forward_dft_chunks.size()); adjoint_dft_chunks.push_back(c_adjoint_dft_chunks); forward_dft_chunks.push_back(c_forward_dft_chunks); } @@ -2909,56 +2878,58 @@ void material_grids_addgradient(double *v, size_t ng, size_t nf, std::vectorc; - meep::grid_volume gv_adj = gv.subvolume(adj_chunk->is,adj_chunk->ie,adjoint_c); + meep::grid_volume gv_adj = gv.subvolume(adj_chunk->is, adj_chunk->ie, adjoint_c); // loop over forward components - for (int ci_forward=0; ci_forward<3; ci_forward++){ + for (int ci_forward = 0; ci_forward < 3; ci_forward++) { size_t num_f_chunks = forward_dft_chunks[ci_forward].size(); - if ((num_f_chunks == 0) || (cur_chunk>=num_f_chunks)) continue; - meep::dft_chunk* fwd_chunk = forward_dft_chunks[ci_forward][cur_chunk]; + if ((num_f_chunks == 0) || (cur_chunk >= num_f_chunks)) continue; + meep::dft_chunk *fwd_chunk = forward_dft_chunks[ci_forward][cur_chunk]; meep::component forward_c = fwd_chunk->c; - meep::grid_volume gv_fwd = gv.subvolume(fwd_chunk->is,fwd_chunk->ie,forward_c); - + meep::grid_volume gv_fwd = gv.subvolume(fwd_chunk->is, fwd_chunk->ie, forward_c); + // loop over each point of interest - LOOP_OVER_IVECS(gv_adj,adj_chunk->is_old,adj_chunk->ie_old,idx_adj){ - double cyl_scale; + LOOP_OVER_IVECS(gv_adj, adj_chunk->is_old, adj_chunk->ie_old, idx_adj) { + double cyl_scale; IVEC_LOOP_ILOC(gv_adj, ip); IVEC_LOOP_LOC(gv_adj, p); - std::complex adj = adj_chunk->dft[nf*idx_adj+f_i]; + std::complex adj = adj_chunk->dft[nf * idx_adj + f_i]; material_type md; geps->get_material_pt(md, p); /* if we have conductivities (e.g. for damping) then we need to make sure we correctly account for that here */ - if (!md->trivial) adj *= cond_cmp(adjoint_c,p,frequencies[f_i], geps); - + if (!md->trivial) adj *= cond_cmp(adjoint_c, p, frequencies[f_i], geps); + /**************************************/ /* Main Routine */ /**************************************/ - + /********* compute -λᵀAᵤx *************/ /* trivial case, no interpolation/restriction needed */ if (forward_c == adjoint_c) { - std::complex fwd = fwd_chunk->dft[nf*idx_adj+f_i]; - cyl_scale = (gv.dim == meep::Dcyl) ? 2*p.r() : 1; // the pi is already factored in near2far.cpp - material_grids_addgradient_point( - v_local+ng*f_i, vec_to_vector3(p), scalegrad*cyl_scale, geps, - adjoint_c, forward_c, fwd, adj, frequencies[f_i], gv, du); - /* more complicated case requires interpolation/restriction */ - } else if ((md->do_averaging) || /* account for subpixel smoothing */ - (!is_material_grid(md)) || /* account for edge effects of mg */ - (has_offdiag(&(md->medium_1))) || /* account for offdiagonal components */ + std::complex fwd = fwd_chunk->dft[nf * idx_adj + f_i]; + cyl_scale = (gv.dim == meep::Dcyl) ? 2 * p.r() + : 1; // the pi is already factored in near2far.cpp + material_grids_addgradient_point(v_local + ng * f_i, vec_to_vector3(p), + scalegrad * cyl_scale, geps, adjoint_c, forward_c, + fwd, adj, frequencies[f_i], gv, du); + /* more complicated case requires interpolation/restriction */ + } + else if ((md->do_averaging) || /* account for subpixel smoothing */ + (!is_material_grid(md)) || /* account for edge effects of mg */ + (has_offdiag(&(md->medium_1))) || /* account for offdiagonal components */ (has_offdiag(&(md->medium_2)))) { /* we need to restrict the adjoint fields to the two nodes of interest (which requires a factor @@ -2969,35 +2940,40 @@ void material_grids_addgradient(double *v, size_t ng, size_t nf, std::vector fwd_avg, fwd1, fwd2; ptrdiff_t fwd1_idx, fwd2_idx; - //identify the first corner of the forward fields + // identify the first corner of the forward fields meep::ivec fwd_p = ip + gv.iyee_shift(forward_c) - gv.iyee_shift(adjoint_c); - //identify the other three corners - meep::ivec unit_a = unit_ivec(gv.dim,component_direction(adjoint_c)); - meep::ivec unit_f = unit_ivec(gv.dim,component_direction(forward_c)); - meep::ivec fwd_pa = (fwd_p + unit_a*2); - meep::ivec fwd_pf = (fwd_p - unit_f*2); - meep::ivec fwd_paf = (fwd_p + unit_a*2 - unit_f*2); + // identify the other three corners + meep::ivec unit_a = unit_ivec(gv.dim, component_direction(adjoint_c)); + meep::ivec unit_f = unit_ivec(gv.dim, component_direction(forward_c)); + meep::ivec fwd_pa = (fwd_p + unit_a * 2); + meep::ivec fwd_pf = (fwd_p - unit_f * 2); + meep::ivec fwd_paf = (fwd_p + unit_a * 2 - unit_f * 2); // store in vector for convenience std::vector fwd_pl = {fwd_p, fwd_pa}; std::vector fwd_pr = {fwd_pf, fwd_paf}; - //identify the two eps points + // identify the two eps points std::vector ieps = {(fwd_p + fwd_pf) / 2, (fwd_pa + fwd_paf) / 2}; - //operate on the each eps node - #pragma unroll - for (int node=0;node<2;node++) { // two nodes - fwd1_idx = gv_fwd.index(forward_c,fwd_pl[node]); - fwd1 = ((fwd1_idx >= fwd_chunk->N) || (fwd1_idx<0)) ? 0 : fwd_chunk->dft[nf*fwd1_idx+f_i]; - fwd2_idx = gv_fwd.index(forward_c,fwd_pr[node]); - fwd2 = ((fwd2_idx >= fwd_chunk->N) || (fwd2_idx<0)) ? 0 : fwd_chunk->dft[nf*fwd2_idx+f_i]; - fwd_avg = std::complex(0.5,0) * (fwd1 + fwd2); +// operate on the each eps node +#pragma unroll + for (int node = 0; node < 2; node++) { // two nodes + fwd1_idx = gv_fwd.index(forward_c, fwd_pl[node]); + fwd1 = ((fwd1_idx >= fwd_chunk->N) || (fwd1_idx < 0)) + ? 0 + : fwd_chunk->dft[nf * fwd1_idx + f_i]; + fwd2_idx = gv_fwd.index(forward_c, fwd_pr[node]); + fwd2 = ((fwd2_idx >= fwd_chunk->N) || (fwd2_idx < 0)) + ? 0 + : fwd_chunk->dft[nf * fwd2_idx + f_i]; + fwd_avg = std::complex(0.5, 0) * (fwd1 + fwd2); meep::vec eps1 = gv[ieps[node]]; cyl_scale = (gv.dim == meep::Dcyl) ? eps1.r() : 1; - material_grids_addgradient_point( - v_local+ng*f_i, vec_to_vector3(eps1), scalegrad*cyl_scale, geps, - adjoint_c, forward_c, fwd_avg, std::complex(0.5,0)*adj, frequencies[f_i], gv, du); + material_grids_addgradient_point(v_local + ng * f_i, vec_to_vector3(eps1), + scalegrad * cyl_scale, geps, adjoint_c, forward_c, + fwd_avg, std::complex(0.5, 0) * adj, + frequencies[f_i], gv, du); } } /********* compute λᵀbᵤ ***************/ @@ -3012,17 +2988,17 @@ void material_grids_addgradient(double *v, size_t ng, size_t nf, std::vector max_val) - max_val = data[i]; + if (data[i] < min_val) min_val = data[i]; + if (data[i] > max_val) max_val = data[i]; } return; } -void get_epsilon_grid(geometric_object_list gobj_list, - material_type_list mlist, - material_type _default_material, - bool _ensure_periodicity, - meep::grid_volume gv, - vector3 cell_size, - vector3 cell_center, - int nx, const double *x, - int ny, const double *y, - int nz, const double *z, - std::complex *grid_vals, - double frequency) { +void get_epsilon_grid(geometric_object_list gobj_list, material_type_list mlist, + material_type _default_material, bool _ensure_periodicity, + meep::grid_volume gv, vector3 cell_size, vector3 cell_center, int nx, + const double *x, int ny, const double *y, int nz, const double *z, + std::complex *grid_vals, double frequency) { double min_val[3], max_val[3]; for (int n = 0; n < 3; ++n) { int ndir = (n == 0) ? nx : ((n == 1) ? ny : nz); @@ -3062,10 +3028,9 @@ void get_epsilon_grid(geometric_object_list gobj_list, const double *adir = (n == 0) ? x : ((n == 1) ? y : z); find_array_min_max(ndir, adir, min_val[n], max_val[n]); } - const meep::volume vol(meep::vec(min_val[0],min_val[1],min_val[2]), - meep::vec(max_val[0],max_val[1],max_val[2])); - init_libctl(_default_material, _ensure_periodicity, &gv, - cell_size, cell_center, &gobj_list); + const meep::volume vol(meep::vec(min_val[0], min_val[1], min_val[2]), + meep::vec(max_val[0], max_val[1], max_val[2])); + init_libctl(_default_material, _ensure_periodicity, &gv, cell_size, cell_center, &gobj_list); dim = gv.dim; geom_epsilon geps(gobj_list, mlist, vol); for (int i = 0; i < nx; ++i) @@ -3074,11 +3039,12 @@ void get_epsilon_grid(geometric_object_list gobj_list, /* obtain the trace of the ε tensor (dispersive or non) for each grid point in row-major order (the order used by NumPy) */ if (frequency == 0) - grid_vals[k + nz*(j + ny*i)] = geps.chi1p1(meep::E_stuff, meep::vec(x[i],y[j],z[k])); + grid_vals[k + nz * (j + ny * i)] = + geps.chi1p1(meep::E_stuff, meep::vec(x[i], y[j], z[k])); else { std::complex tensor[9]; - get_chi1_tensor_disp(tensor, meep::vec(x[i],y[j],z[k]), frequency, &geps); - grid_vals[k + nz*(j + ny*i)] = (tensor[0] + tensor[4] + tensor[8]) / 3.0; + get_chi1_tensor_disp(tensor, meep::vec(x[i], y[j], z[k]), frequency, &geps); + grid_vals[k + nz * (j + ny * i)] = (tensor[0] + tensor[4] + tensor[8]) / 3.0; } } } diff --git a/src/meepgeom.hpp b/src/meepgeom.hpp index ccbb1296e..ef77c74ac 100644 --- a/src/meepgeom.hpp +++ b/src/meepgeom.hpp @@ -177,8 +177,8 @@ class geom_epsilon : public meep::material_function { geom_box_tree restricted_tree; geometric_object_list geometry; cond_profile cond[5][2]; // [direction][side] - double tol=DEFAULT_SUBPIXEL_TOL; - int maxeval=DEFAULT_SUBPIXEL_MAXEVAL; + double tol = DEFAULT_SUBPIXEL_TOL; + int maxeval = DEFAULT_SUBPIXEL_MAXEVAL; geom_epsilon(geometric_object_list g, material_type_list mlist, const meep::volume &v); geom_epsilon(const geom_epsilon &geps1); // copy constructor @@ -207,8 +207,8 @@ class geom_epsilon : public meep::material_function { virtual void eff_chi1inv_row(meep::component c, double chi1inv_row[3], const meep::volume &v, double tol, int maxeval); - void eff_chi1inv_matrix(meep::component c, symm_matrix *chi1inv_matrix, - const meep::volume &v, double tol, int maxeval, bool &fallback); + void eff_chi1inv_matrix(meep::component c, symm_matrix *chi1inv_matrix, const meep::volume &v, + double tol, int maxeval, bool &fallback); void fallback_chi1inv_row(meep::component c, double chi1inv_row[3], const meep::volume &v, double tol, int maxeval); @@ -218,17 +218,17 @@ class geom_epsilon : public meep::material_function { void add_susceptibilities(meep::field_type ft, meep::structure *s); void get_material_pt(material_type &material, const meep::vec &r); + private: material_type_list extra_materials; pol *current_pol; }; void set_dimensions(int dims); -geom_epsilon* make_geom_epsilon(meep::structure *s, geometric_object_list *g, - vector3 center = make_vector3(), - bool ensure_periodicity = false, - material_type _default_material = vacuum, - material_type_list extra_materials = material_type_list()); +geom_epsilon *make_geom_epsilon(meep::structure *s, geometric_object_list *g, + vector3 center = make_vector3(), bool ensure_periodicity = false, + material_type _default_material = vacuum, + material_type_list extra_materials = material_type_list()); //, geometric_object_list g, material_type_list extra_materials void set_materials_from_geometry(meep::structure *s, geometric_object_list g, vector3 center = make_vector3(), @@ -239,10 +239,10 @@ void set_materials_from_geometry(meep::structure *s, geometric_object_list g, material_type _default_material = vacuum, absorber_list alist = 0, material_type_list extra_materials = material_type_list()); void set_materials_from_geom_epsilon(meep::structure *s, geom_epsilon *geps, - bool use_anisotropic_averaging = true, - double tol = DEFAULT_SUBPIXEL_TOL, - int maxeval = DEFAULT_SUBPIXEL_MAXEVAL, - absorber_list alist = 0); + bool use_anisotropic_averaging = true, + double tol = DEFAULT_SUBPIXEL_TOL, + int maxeval = DEFAULT_SUBPIXEL_MAXEVAL, + absorber_list alist = 0); material_type make_dielectric(double epsilon); material_type make_user_material(user_material_func user_func, void *user_data, bool do_averaging); @@ -272,21 +272,13 @@ bool is_medium(material_type md, medium_struct **m); bool is_medium(void *md, medium_struct **m); bool is_metal(meep::field_type ft, const material_type *material); geom_box gv2box(const meep::volume &v); -void get_epsilon_grid(geometric_object_list gobj_list, - material_type_list mlist, - material_type _default_material, - bool _ensure_periodicity, - meep::grid_volume gv, - vector3 cell_size, - vector3 cell_center, - int nx, const double *x, - int ny, const double *y, - int nz, const double *z, - std::complex *grid_vals, - double frequency = 0); -void init_libctl(material_type default_mat, bool ensure_per, - meep::grid_volume *gv, vector3 cell_size, vector3 cell_center, - geometric_object_list *geom_list); +void get_epsilon_grid(geometric_object_list gobj_list, material_type_list mlist, + material_type _default_material, bool _ensure_periodicity, + meep::grid_volume gv, vector3 cell_size, vector3 cell_center, int nx, + const double *x, int ny, const double *y, int nz, const double *z, + std::complex *grid_vals, double frequency = 0); +void init_libctl(material_type default_mat, bool ensure_per, meep::grid_volume *gv, + vector3 cell_size, vector3 cell_center, geometric_object_list *geom_list); /***************************************************************/ // material grid functions @@ -297,10 +289,11 @@ meep::vec material_grid_grad(vector3 p, material_data *md, const geometric_objec double matgrid_val(vector3 p, geom_box_tree tp, int oi, material_data *md); double material_grid_val(vector3 p, material_data *md); geom_box_tree calculate_tree(const meep::volume &v, geometric_object_list g); -void material_grids_addgradient(double *v, size_t ng, size_t nf, std::vector fields_a, - std::vectorfields_f, - double *frequencies, double scalegrad, meep::grid_volume &gv, - meep::volume &where, geom_epsilon *geps, double du = 1e-6); +void material_grids_addgradient(double *v, size_t ng, size_t nf, + std::vector fields_a, + std::vector fields_f, double *frequencies, + double scalegrad, meep::grid_volume &gv, meep::volume &where, + geom_epsilon *geps, double du = 1e-6); /***************************************************************/ /* routines in GDSIIgeom.cc ************************************/ diff --git a/src/monitor.cpp b/src/monitor.cpp index 8b355defe..84439f65a 100644 --- a/src/monitor.cpp +++ b/src/monitor.cpp @@ -178,7 +178,9 @@ complex fields::get_chi1inv(component c, direction d, const ivec &origlo 0); return parallel ? sum_to_all(val) : val; } - return d == component_direction(c) && (parallel || am_master()) ? 1.0 : 0; // default to vacuum outside computational cell + return d == component_direction(c) && (parallel || am_master()) + ? 1.0 + : 0; // default to vacuum outside computational cell } complex fields_chunk::get_chi1inv(component c, direction d, const ivec &iloc, diff --git a/src/mpb.cpp b/src/mpb.cpp index db63ccf9a..b337c667d 100644 --- a/src/mpb.cpp +++ b/src/mpb.cpp @@ -298,9 +298,9 @@ void special_kz_phasefix(eigenmode_data *edata, bool phase_flip) { complex *H = (complex *)edata->fft_data_H; complex im(0, phase_flip ? -1 : 1); for (size_t i = 0; i < n; ++i) { - E[3*i + 2] *= im; // Ez - H[3*i + 0] *= im; // Hx - H[3*i + 1] *= im; // Hy + E[3 * i + 2] *= im; // Ez + H[3 * i + 0] *= im; // Hx + H[3 * i + 1] *= im; // Hy } } @@ -352,8 +352,7 @@ void *fields::get_eigenmode(double frequency, direction d, const volume where, c // special case: 2d cell in x and y with non-zero kz if ((v.dim == D3) && (float(v.in_direction(Z)) == float(1 / a)) && - (boundaries[High][Z] == Periodic && boundaries[Low][Z] == Periodic) && - (real(k[Z]) != 0)) + (boundaries[High][Z] == Periodic && boundaries[Low][Z] == Periodic) && (real(k[Z]) != 0)) empty_dim[2] = true; if (resolution <= 0.0) resolution = 2 * gv.a; // default to twice resolution @@ -533,7 +532,7 @@ void *fields::get_eigenmode(double frequency, direction d, const volume where, c if (am_master()) { set_random_seed(314159); for (int i = 0; i < H.n * H.p; ++i) { - ASSIGN_SCALAR(H.data[i], uniform_random(-1,1), uniform_random(-1,1)); + ASSIGN_SCALAR(H.data[i], uniform_random(-1, 1), uniform_random(-1, 1)); } restore_random_seed(); } @@ -604,17 +603,15 @@ void *fields::get_eigenmode(double frequency, direction d, const volume where, c k[i] = dot_product(R[i], kdir) * kmatch; // kdir*kmatch in reciprocal basis if (gv.dim == D2) k[2] = beta; } - else { - k[d - X] = kmatch * R[d - X][d - X]; - } + else { k[d - X] = kmatch * R[d - X][d - X]; } update_maxwell_data_k(mdata, k, G[0], G[1], G[2]); } } while (match_frequency && fabs(sqrt(eigvals[band_num - 1]) - frequency) > frequency * match_tol); if (dp) { - scalar_complex s = {real(dp->get_s()),imag(dp->get_s())}; - scalar_complex p = {real(dp->get_p()),imag(dp->get_p())}; + scalar_complex s = {real(dp->get_s()), imag(dp->get_s())}; + scalar_complex p = {real(dp->get_p()), imag(dp->get_p())}; // compute sum of (kparallel+G)^2 in all the periodic directions double k2sum = 0, ktmp = 0; @@ -622,14 +619,15 @@ void *fields::get_eigenmode(double frequency, direction d, const volume where, c LOOP_OVER_DIRECTIONS(v.dim, dd) { m = dp->get_g()[dd - X]; if (eig_vol.in_direction(dd) != 0) { - ktmp = kpoint.in_direction(dd) + m/eig_vol.in_direction(dd); - k2sum += ktmp*ktmp; + ktmp = kpoint.in_direction(dd) + m / eig_vol.in_direction(dd); + k2sum += ktmp * ktmp; } } if (((v.dim == D3) && (float(v.in_direction(Z)) == float(1 / a)) && - (boundaries[High][Z] == Periodic && boundaries[Low][Z] == Periodic) && (real(k[Z]) != 0)) || + (boundaries[High][Z] == Periodic && boundaries[Low][Z] == Periodic) && + (real(k[Z]) != 0)) || ((v.dim == D2) && (real(k[Z]) != 0))) { - k2sum += k[Z]*k[Z]; + k2sum += k[Z] * k[Z]; } // compute kperp (if it is non evanescent) OR @@ -647,23 +645,23 @@ void *fields::get_eigenmode(double frequency, direction d, const volume where, c if (match_frequency) { vec cen = eig_vol.center(); double nn = sqrt(real(get_eps(cen, frequency)) * real(get_mu(cen, frequency))); - double k2 = frequency*frequency*nn*nn - k2sum; + double k2 = frequency * frequency * nn * nn - k2sum; if (k2 < 0) { master_printf("WARNING: diffraction order for g=(%d,%d,%d) is evanescent!\n", - dp->get_g()[0],dp->get_g()[1],dp->get_g()[2]); + dp->get_g()[0], dp->get_g()[1], dp->get_g()[2]); return NULL; } else if (k2 > 0) k[dd - X] = sqrt(k2); } else - frequency = sqrt(kpoint.in_direction(dd)*kpoint.in_direction(dd) + k2sum); + frequency = sqrt(kpoint.in_direction(dd) * kpoint.in_direction(dd) + k2sum); } if (am_master()) { update_maxwell_data_k(mdata, k, G[0], G[1], G[2]); maxwell_set_planewave(mdata, H, band_num, dp->get_g(), s, p, dp->get_axis()); - eigvals[band_num - 1] = frequency*frequency; + eigvals[band_num - 1] = frequency * frequency; evectmatrix_resize(&W[0], 1, 0); evectmatrix_resize(&W[1], 1, 0); for (int i = 0; i < H.n; ++i) @@ -751,7 +749,8 @@ void *fields::get_eigenmode(double frequency, direction d, const volume where, c // so we need to divide the E-field amplitudes by -frequency; we also take this // opportunity to rescale the overall E and H amplitudes to yield unit power flux. double scale = -1.0 / frequency, factor = 2.0 / sqrt(fabs(vgrp)); - complex *efield = (complex *)fft_data_E, *hfield = (complex *)(mdata->fft_data); + complex *efield = (complex *)fft_data_E, + *hfield = (complex *)(mdata->fft_data); for (int n = 0; n < NFFT; ++n) { efield[n] *= factor * scale; hfield[n] *= factor; @@ -824,8 +823,7 @@ void fields::add_eigenmode_source(component c0, const src_time &src, direction d const volume &where, const volume &eig_vol, int band_num, const vec &kpoint, bool match_frequency, int parity, double resolution, double eigensolver_tol, complex amp, - complex A(const vec &), - diffractedplanewave *dp) { + complex A(const vec &), diffractedplanewave *dp) { /*--------------------------------------------------------------*/ /* step 1: call MPB to compute the eigenmode */ /*--------------------------------------------------------------*/ @@ -833,10 +831,9 @@ void fields::add_eigenmode_source(component c0, const src_time &src, direction d double frequency = real(src.frequency()); am_now_working_on(MPBTime); - global_eigenmode_data = - (eigenmode_data *)get_eigenmode(frequency, d, where, eig_vol, band_num, kpoint, - match_frequency, parity, resolution, eigensolver_tol, - NULL, NULL, dp); + global_eigenmode_data = (eigenmode_data *)get_eigenmode( + frequency, d, where, eig_vol, band_num, kpoint, match_frequency, parity, resolution, + eigensolver_tol, NULL, NULL, dp); finished_working(); if (is_real && beta != 0) special_kz_phasefix(global_eigenmode_data, true /* phase_flip */); @@ -849,8 +846,9 @@ void fields::add_eigenmode_source(component c0, const src_time &src, direction d global_eigenmode_data->center -= where.center(); if (!global_eigenmode_data) - meep::abort("eigenmode solver failed to find the requested mode; you may need to supply a better " - "guess for k"); + meep::abort( + "eigenmode solver failed to find the requested mode; you may need to supply a better " + "guess for k"); global_eigenmode_data->amp_func = A ? A : default_amp_func; @@ -868,9 +866,10 @@ void fields::add_eigenmode_source(component c0, const src_time &src, direction d component cE[3] = {Ex, Ey, Ez}, cH[3] = {Hx, Hy, Hz}; int n = (d == X ? 0 : (d == Y ? 1 : 2)); if (d == NO_DIRECTION) { - n = where.in_direction(X) == 0 - ? 0 - : where.in_direction(Y) == 0 ? 1 : where.in_direction(Z) == 0 ? 2 : -1; + n = where.in_direction(X) == 0 ? 0 + : where.in_direction(Y) == 0 ? 1 + : where.in_direction(Z) == 0 ? 2 + : -1; if (n == -1) meep::abort( "can't determine source direction for non-empty source volume with NO_DIRECTION source"); @@ -926,7 +925,7 @@ void fields::get_eigenmode_coefficients(dft_flux flux, const volume &eig_vol, in bool match_frequency = true; if (flux.use_symmetry && S.multiplicity() > 1 && parity == 0) meep::abort("flux regions for eigenmode projection with symmetry should be created by " - "add_mode_monitor()"); + "add_mode_monitor()"); vec kpoint(0.0, 0.0, 0.0); // default guess @@ -955,7 +954,8 @@ void fields::get_eigenmode_coefficients(dft_flux flux, const volume &eig_vol, in continue; } - if (is_real && beta != 0) special_kz_phasefix((eigenmode_data *) mode_data, false /* phase_flip */); + if (is_real && beta != 0) + special_kz_phasefix((eigenmode_data *)mode_data, false /* phase_flip */); double vg = get_group_velocity(mode_data); vec kfound = get_k(mode_data); diff --git a/src/multilevel-atom.cpp b/src/multilevel-atom.cpp index df9c2213f..a838d36e8 100644 --- a/src/multilevel-atom.cpp +++ b/src/multilevel-atom.cpp @@ -159,7 +159,8 @@ void multilevel_susceptibility::init_internal_data(realnum *W[NUM_FIELD_COMPONEN for (int i = 0; i < L; ++i) for (int j = 0; j < L; ++j) d->GammaInv[i * L + j] = (i == j) + Gamma[i * L + j] * dt / 2; - if (!invert(d->GammaInv, L)) meep::abort("multilevel_susceptibility: I + Gamma*dt/2 matrix singular"); + if (!invert(d->GammaInv, L)) + meep::abort("multilevel_susceptibility: I + Gamma*dt/2 matrix singular"); realnum *P = d->data + L * L; realnum *P_prev = P + ntot; diff --git a/src/mympi.cpp b/src/mympi.cpp index 501e987bf..57da0ad73 100644 --- a/src/mympi.cpp +++ b/src/mympi.cpp @@ -161,25 +161,24 @@ int verbosity = 1; // defined in meep.h code based on github.com/JuliaLang/julia/blob/master/src/processor_x86.cpp#L1087-L1104, which is free software under the GPL-compatible "MIT license" */ -static void _set_zero_subnormals(bool iszero) -{ +static void _set_zero_subnormals(bool iszero) { #if HAVE_IMMINTRIN_H - unsigned int flags = 0x00008040; // assume a non-ancient processor with SSE2, supporting both FTZ and DAZ flags - unsigned int state = _mm_getcsr(); - if (iszero) - state |= flags; - else - state &= ~flags; - _mm_setcsr(state); + unsigned int flags = + 0x00008040; // assume a non-ancient processor with SSE2, supporting both FTZ and DAZ flags + unsigned int state = _mm_getcsr(); + if (iszero) + state |= flags; + else + state &= ~flags; + _mm_setcsr(state); #else - (void) iszero; // unused + (void)iszero; // unused #endif } -void set_zero_subnormals(bool iszero) -{ +void set_zero_subnormals(bool iszero) { int n = omp_get_num_threads(); #ifdef _OPENMP -#pragma omp parallel for schedule(static,1) +#pragma omp parallel for schedule(static, 1) #endif for (int i = 0; i < n; ++i) _set_zero_subnormals(iszero); // This has to be done in every thread for OpenMP. @@ -188,8 +187,7 @@ void set_zero_subnormals(bool iszero) void setup() { set_zero_subnormals(true); #ifdef _OPENMP - if (getenv("OMP_NUM_THREADS") == NULL) - omp_set_num_threads(1); + if (getenv("OMP_NUM_THREADS") == NULL) omp_set_num_threads(1); #endif } @@ -199,7 +197,7 @@ initialize::initialize(int &argc, char **&argv) { int provided; MPI_Init_thread(&argc, &argv, MPI_THREAD_FUNNELED, &provided); if (provided < MPI_THREAD_FUNNELED && omp_get_num_threads() > 1) - abort("MPI does not support multi-threaded execution"); + abort("MPI does not support multi-threaded execution"); #else MPI_Init(&argc, &argv); #endif @@ -257,7 +255,7 @@ double wall_time(void) { fprintf(stderr, "meep: %s", error_msg.c_str()); if (fmt[strlen(fmt) - 1] != '\n') fputc('\n', stderr); // force newline MPI_Abort(MPI_COMM_WORLD, 1); - std::abort(); // Unreachable but MPI_Abort does not have the noreturn attribute. + std::abort(); // Unreachable but MPI_Abort does not have the noreturn attribute. #else throw runtime_error("meep: " + error_msg); #endif @@ -686,8 +684,8 @@ meep_printf_callback_func set_meep_printf_stderr_callback(meep_printf_callback_f return old_func; } -static void _do_master_printf(FILE* output, meep_printf_callback_func callback, - const char *fmt, va_list ap) { +static void _do_master_printf(FILE *output, meep_printf_callback_func callback, const char *fmt, + va_list ap) { if (am_really_master()) { if (callback) { char *s; diff --git a/src/near2far.cpp b/src/near2far.cpp index 92dacdf0f..ff8f5daf5 100644 --- a/src/near2far.cpp +++ b/src/near2far.cpp @@ -43,7 +43,7 @@ dft_near2far::dft_near2far(dft_chunk *F_, double fmin, double fmax, int Nf, doub } } -dft_near2far::dft_near2far(dft_chunk *F_, const std::vector& freq_, double eps_, double mu_, +dft_near2far::dft_near2far(dft_chunk *F_, const std::vector &freq_, double eps_, double mu_, const volume &where_, const direction periodic_d_[2], const int periodic_n_[2], const double periodic_k_[2], const double period_[2]) @@ -151,8 +151,7 @@ void green3d(std::complex *EH, const vec &x, double freq, double eps, do vec p = zero_vec(rhat.dim); p.set_direction(component_direction(c0), 1); double pdotrhat = p & rhat; - vec rhatcrossp = vec(rhat.y() * p.z() - rhat.z() * p.y(), - rhat.z() * p.x() - rhat.x() * p.z(), + vec rhatcrossp = vec(rhat.y() * p.z() - rhat.z() * p.y(), rhat.z() * p.x() - rhat.x() * p.z(), rhat.x() * p.y() - rhat.y() * p.x()); /* compute the various scalar quantities in the point source formulae */ @@ -632,7 +631,8 @@ dft_near2far fields::add_dft_near2far(const volume_list *where, const double *fr double s = j == 0 ? 1 : -1; /* sign of n x c */ if (is_electric(c)) s = -s; - F = add_dft(c, w->v, freq, Nfreq, true, s * w->weight, F, false, 1.0, false, c0, decimation_factor); + F = add_dft(c, w->v, freq, Nfreq, true, s * w->weight, F, false, 1.0, false, c0, + decimation_factor); } } } @@ -641,8 +641,10 @@ dft_near2far fields::add_dft_near2far(const volume_list *where, const double *fr period); } -//Modified from farfield_lowlevel -std::vector dft_near2far::near_sourcedata(const vec &x_0, double* farpt_list, size_t nfar_pts, const std::complex* dJ) { +// Modified from farfield_lowlevel +std::vector dft_near2far::near_sourcedata(const vec &x_0, double *farpt_list, + size_t nfar_pts, + const std::complex *dJ) { if (x_0.dim != D3 && x_0.dim != D2 && x_0.dim != Dcyl) meep::abort("only 2d or 3d or cylindrical far-field computation is supported"); greenfunc green = x_0.dim == D2 ? green2d : green3d; @@ -657,49 +659,49 @@ std::vector dft_near2far::near_sourcedata(const vec &x_0, dou component c0 = component(f->vc); /* equivalent source component */ vec rshift(f->shift * (0.5 * f->fc->gv.inva)); - std::complex EH6[6]; - size_t idx_dft = 0; - sourcedata temp_struct = {component(f->c), idx_arr, f->fc->chunk_idx, amp_arr}; - - LOOP_OVER_IVECS(f->fc->gv, f->is, f->ie, idx) { - IVEC_LOOP_ILOC(f->fc->gv, ix0); - IVEC_LOOP_LOC(f->fc->gv, x0); - x0 = f->S.transform(x0, f->sn) + rshift; - vec xs(x0); - double w; - w = IVEC_LOOP_WEIGHT(f->s0, f->s1, f->e0, f->e1, f->dV0 + f->dV1 * loop_i2); - - temp_struct.idx_arr.push_back(idx); - for (size_t i = 0; i < Nfreq; ++i) { - std::complex EH0 = std::complex(0,0); - for (int i0 = -periodic_n[0]; i0 <= periodic_n[0]; ++i0) { - if (periodic_d[0] != NO_DIRECTION) - xs.set_direction(periodic_d[0], x0.in_direction(periodic_d[0]) + i0 * period[0]); - double phase0 = i0 * periodic_k[0]; - for (int i1 = -periodic_n[1]; i1 <= periodic_n[1]; ++i1) { - if (periodic_d[1] != NO_DIRECTION) - xs.set_direction(periodic_d[1], x0.in_direction(periodic_d[1]) + i1 * period[1]); - double phase = phase0 + i1 * periodic_k[1]; - std::complex cphase = std::polar(1.0, phase); - for (size_t ipt = 0; ipt < nfar_pts; ++ipt){ - vec x = vec(farpt_list[3*ipt], farpt_list[3*ipt+1], farpt_list[3*ipt+2]); - if (x_0.dim == Dcyl) - greencyl(EH6, x, freq[i], eps, mu, xs, c0, w, f->fc->m, 1e-3); - else - green(EH6, x, freq[i], eps, mu, xs, c0, w); - for (int j = 0; j < 6; ++j) - EH0 += EH6[j] * cphase * (f->stored_weight) * dJ[6*Nfreq*ipt + 6*i + j]; - } + std::complex EH6[6]; + size_t idx_dft = 0; + sourcedata temp_struct = {component(f->c), idx_arr, f->fc->chunk_idx, amp_arr}; + + LOOP_OVER_IVECS(f->fc->gv, f->is, f->ie, idx) { + IVEC_LOOP_ILOC(f->fc->gv, ix0); + IVEC_LOOP_LOC(f->fc->gv, x0); + x0 = f->S.transform(x0, f->sn) + rshift; + vec xs(x0); + double w; + w = IVEC_LOOP_WEIGHT(f->s0, f->s1, f->e0, f->e1, f->dV0 + f->dV1 * loop_i2); + + temp_struct.idx_arr.push_back(idx); + for (size_t i = 0; i < Nfreq; ++i) { + std::complex EH0 = std::complex(0, 0); + for (int i0 = -periodic_n[0]; i0 <= periodic_n[0]; ++i0) { + if (periodic_d[0] != NO_DIRECTION) + xs.set_direction(periodic_d[0], x0.in_direction(periodic_d[0]) + i0 * period[0]); + double phase0 = i0 * periodic_k[0]; + for (int i1 = -periodic_n[1]; i1 <= periodic_n[1]; ++i1) { + if (periodic_d[1] != NO_DIRECTION) + xs.set_direction(periodic_d[1], x0.in_direction(periodic_d[1]) + i1 * period[1]); + double phase = phase0 + i1 * periodic_k[1]; + std::complex cphase = std::polar(1.0, phase); + for (size_t ipt = 0; ipt < nfar_pts; ++ipt) { + vec x = vec(farpt_list[3 * ipt], farpt_list[3 * ipt + 1], farpt_list[3 * ipt + 2]); + if (x_0.dim == Dcyl) + greencyl(EH6, x, freq[i], eps, mu, xs, c0, w, f->fc->m, 1e-3); + else + green(EH6, x, freq[i], eps, mu, xs, c0, w); + for (int j = 0; j < 6; ++j) + EH0 += EH6[j] * cphase * (f->stored_weight) * dJ[6 * Nfreq * ipt + 6 * i + j]; + } } } idx_dft++; - if (is_electric(temp_struct.near_fd_comp)) - EH0 *= -1; + if (is_electric(temp_struct.near_fd_comp)) EH0 *= -1; EH0 /= f->S.multiplicity(ix0); - if (x_0.dim == Dcyl){ + if (x_0.dim == Dcyl) { if (xs.r() != 0) EH0 /= xs.r(); - //Somehow, a factor of (2pi)r for r of the near2far region was double counted. - //2pi is canceled out by the integral over design region, where an extra factor of 2pi*r' (r' of the design region) is needed. See meepgeom.cpp + // Somehow, a factor of (2pi)r for r of the near2far region was double counted. + // 2pi is canceled out by the integral over design region, where an extra factor of 2pi*r' + // (r' of the design region) is needed. See meepgeom.cpp } temp_struct.amp_arr.push_back(EH0); } diff --git a/src/output_directory.cpp b/src/output_directory.cpp index caec99187..0b207cced 100644 --- a/src/output_directory.cpp +++ b/src/output_directory.cpp @@ -109,9 +109,7 @@ const char *make_output_directory(const char *exename, const char *jobname) { snprintf(sourcename, buflen, "%s.cpp", stripped_name); if (jobname != NULL) { snprintf(basename, buflen, "%s", jobname); } - else { - snprintf(basename, buflen, "%s", stripped_name); - } + else { snprintf(basename, buflen, "%s", stripped_name); } static char outdirname[buflen]; snprintf(outdirname, buflen, "%s-out", basename); diff --git a/src/random.cpp b/src/random.cpp index 928ca6738..74a4d7236 100644 --- a/src/random.cpp +++ b/src/random.cpp @@ -65,9 +65,7 @@ double gaussian_random(double mean, double stddev) { s = v1 * v1 + v2 * v2; } while (s >= 1.0); if (s == 0) { return mean; } - else { - return mean + v1 * sqrt(-2 * log(s) / s) * stddev; - } + else { return mean + v1 * sqrt(-2 * log(s) / s) * stddev; } } } // namespace meep diff --git a/src/sources.cpp b/src/sources.cpp index cc1dc91d3..61a55cde8 100644 --- a/src/sources.cpp +++ b/src/sources.cpp @@ -254,7 +254,7 @@ static void src_vol_chunkloop(fields_chunk *fc, int ichunk, component c, ivec is size_t npts = 1; LOOP_OVER_DIRECTIONS(is.dim, d) { npts *= (ie.in_direction(d) - is.in_direction(d)) / 2 + 1; } std::vector index_array(npts); - std::vector> amps_array(npts); + std::vector > amps_array(npts); complex amp = data->amp * conj(shift_phase); @@ -283,29 +283,33 @@ static void src_vol_chunkloop(fields_chunk *fc, int ichunk, component c, ivec is index_array[idx_vol++] = idx; } - if (idx_vol > npts) meep::abort("add_volume_source: computed wrong npts (%zd vs. %zd)", npts, idx_vol); + if (idx_vol > npts) + meep::abort("add_volume_source: computed wrong npts (%zd vs. %zd)", npts, idx_vol); field_type ft = is_magnetic(c) ? B_stuff : D_stuff; fc->add_source(ft, src_vol(c, data->src, std::move(index_array), std::move(amps_array))); } -void fields::add_srcdata(struct sourcedata cur_data, src_time *src, size_t n, std::complex* amp_arr, bool needs_boundary_fix){ +void fields::add_srcdata(struct sourcedata cur_data, src_time *src, size_t n, + std::complex *amp_arr, bool needs_boundary_fix) { if (n == 0) { - n = cur_data.idx_arr.size(); - assert(amp_arr == NULL); - amp_arr = cur_data.amp_arr.data(); + n = cur_data.idx_arr.size(); + assert(amp_arr == NULL); + amp_arr = cur_data.amp_arr.data(); } assert(n == cur_data.idx_arr.size()); sources = src->add_to(sources, &src); std::vector index_arr(cur_data.idx_arr); - std::vector> amplitudes(amp_arr, amp_arr+n); + std::vector > amplitudes(amp_arr, amp_arr + n); component c = cur_data.near_fd_comp; field_type ft = is_magnetic(c) ? B_stuff : D_stuff; - if (0 > cur_data.fc_idx or cur_data.fc_idx >= num_chunks) meep::abort("fields chunk index out of range"); + if (0 > cur_data.fc_idx or cur_data.fc_idx >= num_chunks) + meep::abort("fields chunk index out of range"); fields_chunk *fc = chunks[cur_data.fc_idx]; if (!fc->is_mine()) meep::abort("wrong fields chunk"); - fc->add_source(ft, src_vol(c, src, std::move(index_arr), std::move(amplitudes), needs_boundary_fix)); + fc->add_source(ft, + src_vol(c, src, std::move(index_arr), std::move(amplitudes), needs_boundary_fix)); // We can't do require_component(c) since that only works if all processes are adding // srcdata for the same components in the same order, which may not be true. // ... instead, the caller should call fields::require_source_components() @@ -402,13 +406,15 @@ void fields::add_volume_source(component c, const src_time &src, const volume &w std::string dataset_im = std::string(dataset) + ".im"; size_t re_dims[] = {1, 1, 1}; - realnum *real_data = (realnum *)eps_file.read(dataset_re.c_str(), &rank, re_dims, 3, sizeof(realnum) == sizeof(float)); + realnum *real_data = (realnum *)eps_file.read(dataset_re.c_str(), &rank, re_dims, 3, + sizeof(realnum) == sizeof(float)); if (verbosity > 0) master_printf("read in %zdx%zdx%zd amplitude function file \"%s:%s\"\n", re_dims[0], re_dims[1], re_dims[2], filename, dataset_re.c_str()); size_t im_dims[] = {1, 1, 1}; - realnum *imag_data = (realnum *)eps_file.read(dataset_im.c_str(), &rank, im_dims, 3, sizeof(realnum) == sizeof(float)); + realnum *imag_data = (realnum *)eps_file.read(dataset_im.c_str(), &rank, im_dims, 3, + sizeof(realnum) == sizeof(float)); if (verbosity > 0) master_printf("read in %zdx%zdx%zd amplitude function file \"%s:%s\"\n", im_dims[0], im_dims[1], im_dims[2], filename, dataset_im.c_str()); @@ -466,8 +472,8 @@ void fields::add_volume_source(component c, const src_time &src, const volume &w /* add_volume_source only if certain conditions are met */ /***************************************************************/ void fields::add_volume_source_check(component c, const src_time &src, const volume &where, - complex A(const vec &), complex amp, component c0, - direction d, int has_tm, int has_te) { + complex A(const vec &), complex amp, + component c0, direction d, int has_tm, int has_te) { if (!gv.has_field(c)) return; if (c0 != Centered && c0 != c) return; if (component_direction(c) == d) return; @@ -486,13 +492,13 @@ static std::complex gaussianbeam_ampfunc(const vec &p) { std::complex EH[6]; global_gaussianbeam_object->get_fields(EH, p); switch (global_gaussianbeam_component) { - case Ex: return EH[0]; - case Ey: return EH[1]; - case Ez: return EH[2]; - case Hx: return EH[3]; - case Hy: return EH[4]; - case Hz: return EH[5]; - default: meep::abort("invalid component in gaussianbeam_ampfunc"); + case Ex: return EH[0]; + case Ey: return EH[1]; + case Ez: return EH[2]; + case Hx: return EH[3]; + case Hy: return EH[4]; + case Hz: return EH[5]; + default: meep::abort("invalid component in gaussianbeam_ampfunc"); } } @@ -502,9 +508,10 @@ void fields::add_volume_source(const src_time &src, const volume &where, gaussia component cE[3] = {Ex, Ey, Ez}, cH[3] = {Hx, Hy, Hz}; int n = (d == X ? 0 : (d == Y ? 1 : 2)); if (d == NO_DIRECTION) { - n = where.in_direction(X) == 0 - ? 0 - : where.in_direction(Y) == 0 ? 1 : where.in_direction(Z) == 0 ? 2 : -1; + n = where.in_direction(X) == 0 ? 0 + : where.in_direction(Y) == 0 ? 1 + : where.in_direction(Z) == 0 ? 2 + : -1; if (n == -1) meep::abort( "can't determine source direction for non-empty source volume with NO_DIRECTION source"); @@ -515,22 +522,22 @@ void fields::add_volume_source(const src_time &src, const volume &where, gaussia int np2 = (n + 2) % 3; // Kx = -Hy, Ky = Hx (for d==Z) global_gaussianbeam_component = cH[np1]; - add_volume_source_check(cE[np2], src, where, gaussianbeam_ampfunc, +1.0, cE[np2], d, - has_tm, has_te); + add_volume_source_check(cE[np2], src, where, gaussianbeam_ampfunc, +1.0, cE[np2], d, has_tm, + has_te); global_gaussianbeam_component = cH[np2]; - add_volume_source_check(cE[np1], src, where, gaussianbeam_ampfunc, -1.0, cE[np1], d, - has_tm, has_te); + add_volume_source_check(cE[np1], src, where, gaussianbeam_ampfunc, -1.0, cE[np1], d, has_tm, + has_te); // Nx = +Ey, Ny = -Ex (for d==Z) global_gaussianbeam_component = cE[np1]; - add_volume_source_check(cH[np2], src, where, gaussianbeam_ampfunc, -1.0, cH[np2], d, - has_tm, has_te); + add_volume_source_check(cH[np2], src, where, gaussianbeam_ampfunc, -1.0, cH[np2], d, has_tm, + has_te); global_gaussianbeam_component = cE[np2]; - add_volume_source_check(cH[np1], src, where, gaussianbeam_ampfunc, +1.0, cH[np1], d, - has_tm, has_te); + add_volume_source_check(cH[np1], src, where, gaussianbeam_ampfunc, +1.0, cH[np1], d, has_tm, + has_te); } -gaussianbeam::gaussianbeam(const vec &x0_, const vec &kdir_, double w0_, double freq_, - double eps_, double mu_, std::complex E0_[3]) { +gaussianbeam::gaussianbeam(const vec &x0_, const vec &kdir_, double w0_, double freq_, double eps_, + double mu_, std::complex E0_[3]) { if (x0_.dim == Dcyl) meep::abort("wrong dimensionality in gaussianbeam"); x0 = x0_; @@ -596,61 +603,64 @@ gaussianbeam::gaussianbeam(const vec &x0_, const vec &kdir_, double w0_, double void gaussianbeam::get_fields(std::complex *EH, const vec &x) const { double n = sqrt(eps * mu); double k = 2 * pi * freq * n; - double ZR = sqrt(mu/eps); + double ZR = sqrt(mu / eps); double z0 = k * w0 * w0 / 2; - double kz0 = k*z0; + double kz0 = k * z0; vec xrel = x - x0; vec zhat = kdir / abs(kdir); - double rho = abs(vec(zhat.y()*xrel.z()-zhat.z()*xrel.y(), - zhat.z()*xrel.x()-zhat.x()*xrel.z(), - zhat.x()*xrel.y()-zhat.y()*xrel.x())); + double rho = + abs(vec(zhat.y() * xrel.z() - zhat.z() * xrel.y(), zhat.z() * xrel.x() - zhat.x() * xrel.z(), + zhat.x() * xrel.y() - zhat.y() * xrel.x())); double zhatdotxrel = zhat & xrel; bool UseRescaledFG = false; - complex zc = complex(zhatdotxrel,-z0); - complex Rsq = rho*rho + zc*zc; + complex zc = complex(zhatdotxrel, -z0); + complex Rsq = rho * rho + zc * zc; complex R = sqrt(Rsq); - complex kR = k*R, kR2 = kR*kR, kR3 = kR2*kR; - complex f,g,fmgbRsq; + complex kR = k * R, kR2 = kR * kR, kR3 = kR2 * kR; + complex f, g, fmgbRsq; if (abs(kR) > 1e-4) { complex coskR, sinkR; if (fabs(imag(kR)) > 30.0) { UseRescaledFG = true; - complex ExpI = exp(complex(0,1.0)*real(kR)); - complex ExpPlus = exp(imag(kR)-kz0); - complex ExpMinus = exp(-(imag(kR)+kz0)); - coskR = 0.5*(ExpI*ExpMinus + conj(ExpI)*ExpPlus); - sinkR = -0.5*complex(0,1.0)*(ExpI*ExpMinus - conj(ExpI)*ExpPlus); - } else { + complex ExpI = exp(complex(0, 1.0) * real(kR)); + complex ExpPlus = exp(imag(kR) - kz0); + complex ExpMinus = exp(-(imag(kR) + kz0)); + coskR = 0.5 * (ExpI * ExpMinus + conj(ExpI) * ExpPlus); + sinkR = -0.5 * complex(0, 1.0) * (ExpI * ExpMinus - conj(ExpI) * ExpPlus); + } + else { coskR = cos(kR); sinkR = sin(kR); } - f = -3.0 * (coskR/kR2 - sinkR/kR3); - g = 1.5 * (sinkR/kR + coskR/kR2 - sinkR/kR3); - fmgbRsq = (f-g)/Rsq; - } else { - complex kR4 = kR2*kR2; + f = -3.0 * (coskR / kR2 - sinkR / kR3); + g = 1.5 * (sinkR / kR + coskR / kR2 - sinkR / kR3); + fmgbRsq = (f - g) / Rsq; + } + else { + complex kR4 = kR2 * kR2; // Taylor series expansion for small R - f = kR4/280.0 - kR2/10.0 + 1.0; - g = 3.0*kR4/280.0 - kR2/5.0 + 1.0; - fmgbRsq = (kR4/5040.0 - kR2/140.0 + 0.1)*(k*k); + f = kR4 / 280.0 - kR2 / 10.0 + 1.0; + g = 3.0 * kR4 / 280.0 - kR2 / 5.0 + 1.0; + fmgbRsq = (kR4 / 5040.0 - kR2 / 140.0 + 0.1) * (k * k); } - complex i2fk = 0.5*complex(0,1)*f*k; + complex i2fk = 0.5 * complex(0, 1) * f * k; complex E[3], H[3]; - for (int j=0; j<3; ++j) { - E[j] = complex(0,0); - H[j] = complex(0,0); + for (int j = 0; j < 3; ++j) { + E[j] = complex(0, 0); + H[j] = complex(0, 0); } - double rnorm = sqrt(real(E0[0])*real(E0[0])+real(E0[1])*real(E0[1])+real(E0[2])*real(E0[2])); + double rnorm = + sqrt(real(E0[0]) * real(E0[0]) + real(E0[1]) * real(E0[1]) + real(E0[2]) * real(E0[2])); if (rnorm > 1e-13) { - vec xhat = vec(real(E0[0]),real(E0[1]),real(E0[2])) / rnorm; - vec yhat = vec(zhat.y()*xhat.z()-zhat.z()*xhat.y(), - zhat.z()*xhat.x()-zhat.x()*xhat.z(), - zhat.x()*xhat.y()-zhat.y()*xhat.x()); + vec xhat = vec(real(E0[0]), real(E0[1]), real(E0[2])) / rnorm; + vec yhat = + vec(zhat.y() * xhat.z() - zhat.z() * xhat.y(), zhat.z() * xhat.x() - zhat.x() * xhat.z(), + zhat.x() * xhat.y() - zhat.y() * xhat.x()); double xhatdotxrel = xhat & xrel; double yhatdotxrel = yhat & xrel; @@ -669,12 +679,13 @@ void gaussianbeam::get_fields(std::complex *EH, const vec &x) const { H[2] += rnorm * (gb_Hx * xhat.z() + gb_Hy * yhat.z() + gb_Hz * zhat.z()); } - double inorm = sqrt(imag(E0[0])*imag(E0[0])+imag(E0[1])*imag(E0[1])+imag(E0[2])*imag(E0[2])); + double inorm = + sqrt(imag(E0[0]) * imag(E0[0]) + imag(E0[1]) * imag(E0[1]) + imag(E0[2]) * imag(E0[2])); if (inorm > 1e-13) { - vec xhat = vec(imag(E0[0]),imag(E0[1]),imag(E0[2])) / inorm; - vec yhat = vec(zhat.y()*xhat.z()-zhat.z()*xhat.y(), - zhat.z()*xhat.x()-zhat.x()*xhat.z(), - zhat.x()*xhat.y()-zhat.y()*xhat.x()); + vec xhat = vec(imag(E0[0]), imag(E0[1]), imag(E0[2])) / inorm; + vec yhat = + vec(zhat.y() * xhat.z() - zhat.z() * xhat.y(), zhat.z() * xhat.x() - zhat.x() * xhat.z(), + zhat.x() * xhat.y() - zhat.y() * xhat.x()); double xhatdotxrel = xhat & xrel; double yhatdotxrel = yhat & xrel; @@ -685,29 +696,36 @@ void gaussianbeam::get_fields(std::complex *EH, const vec &x) const { complex gb_Hy = g + fmgbRsq * yhatdotxrel * yhatdotxrel + i2fk * zc; complex gb_Hz = fmgbRsq * yhatdotxrel * zc - i2fk * yhatdotxrel; - E[0] += complex(0,1.0) * inorm * (gb_Ex * xhat.x() + gb_Ey * yhat.x() + gb_Ez * zhat.x()); - E[1] += complex(0,1.0) * inorm * (gb_Ex * xhat.y() + gb_Ey * yhat.y() + gb_Ez * zhat.y()); - E[2] += complex(0,1.0) * inorm * (gb_Ex * xhat.z() + gb_Ey * yhat.z() + gb_Ez * zhat.z()); - H[0] += complex(0,1.0) * inorm * (gb_Hx * xhat.x() + gb_Hy * yhat.x() + gb_Hz * zhat.x()); - H[1] += complex(0,1.0) * inorm * (gb_Hx * xhat.y() + gb_Hy * yhat.y() + gb_Hz * zhat.y()); - H[2] += complex(0,1.0) * inorm * (gb_Hx * xhat.z() + gb_Hy * yhat.z() + gb_Hz * zhat.z()); + E[0] += + complex(0, 1.0) * inorm * (gb_Ex * xhat.x() + gb_Ey * yhat.x() + gb_Ez * zhat.x()); + E[1] += + complex(0, 1.0) * inorm * (gb_Ex * xhat.y() + gb_Ey * yhat.y() + gb_Ez * zhat.y()); + E[2] += + complex(0, 1.0) * inorm * (gb_Ex * xhat.z() + gb_Ey * yhat.z() + gb_Ez * zhat.z()); + H[0] += + complex(0, 1.0) * inorm * (gb_Hx * xhat.x() + gb_Hy * yhat.x() + gb_Hz * zhat.x()); + H[1] += + complex(0, 1.0) * inorm * (gb_Hx * xhat.y() + gb_Hy * yhat.y() + gb_Hz * zhat.y()); + H[2] += + complex(0, 1.0) * inorm * (gb_Hx * xhat.z() + gb_Hy * yhat.z() + gb_Hz * zhat.z()); } double Eorig; if (UseRescaledFG) - Eorig = 3.0/(2*kz0*kz0*kz0) * (kz0*(kz0-1) + 0.5*(1.0-exp(-2.0*kz0))); + Eorig = 3.0 / (2 * kz0 * kz0 * kz0) * (kz0 * (kz0 - 1) + 0.5 * (1.0 - exp(-2.0 * kz0))); else - Eorig = 3.0/(2*kz0*kz0*kz0) * (exp(kz0)*kz0*(kz0-1) + sinh(kz0)); + Eorig = 3.0 / (2 * kz0 * kz0 * kz0) * (exp(kz0) * kz0 * (kz0 - 1) + sinh(kz0)); EH[0] = E[0] / Eorig; EH[1] = E[1] / Eorig; EH[2] = E[2] / Eorig; - EH[3] = H[0] / (Eorig*ZR); - EH[4] = H[1] / (Eorig*ZR); - EH[5] = H[2] / (Eorig*ZR); + EH[3] = H[0] / (Eorig * ZR); + EH[4] = H[1] / (Eorig * ZR); + EH[5] = H[2] / (Eorig * ZR); } -diffractedplanewave::diffractedplanewave(int g_[3], double axis_[3], std::complex s_, std::complex p_) { +diffractedplanewave::diffractedplanewave(int g_[3], double axis_[3], std::complex s_, + std::complex p_) { for (int j = 0; j < 3; ++j) { g[j] = g_[j]; axis[j] = axis_[j]; diff --git a/src/step_db.cpp b/src/step_db.cpp index 1f08c7802..9841297a7 100644 --- a/src/step_db.cpp +++ b/src/step_db.cpp @@ -44,7 +44,7 @@ void fields::step_db(field_type ft) { bool fields_chunk::step_db(field_type ft) { bool allocated_u = false; - for (const auto& sub_gv : gvs_tiled) { + for (const auto &sub_gv : gvs_tiled) { DOCMP FOR_FT_COMPONENTS(ft, cc) { if (f[cc][cmp]) { const component c_p = plus_component[cc], c_m = minus_component[cc]; @@ -116,12 +116,10 @@ bool fields_chunk::step_db(field_type ft) { default: meep::abort("bug - non-cylindrical field component in Dcyl"); } - STEP_CURL(the_f, cc, f_p, f_m, stride_p, stride_m, - gv, sub_gv.little_owned_corner0(cc), sub_gv.big_corner(), - Courant, dsig, s->sig[dsig], - s->kap[dsig], s->siginv[dsig], f_u[cc][cmp], dsigu, s->sig[dsigu], s->kap[dsigu], - s->siginv[dsigu], dt, s->conductivity[cc][d_c], s->condinv[cc][d_c], - f_cond[cc][cmp]); + STEP_CURL(the_f, cc, f_p, f_m, stride_p, stride_m, gv, sub_gv.little_owned_corner0(cc), + sub_gv.big_corner(), Courant, dsig, s->sig[dsig], s->kap[dsig], s->siginv[dsig], + f_u[cc][cmp], dsigu, s->sig[dsigu], s->kap[dsigu], s->siginv[dsigu], dt, + s->conductivity[cc][d_c], s->condinv[cc][d_c], f_cond[cc][cmp]); } } } @@ -149,10 +147,10 @@ bool fields_chunk::step_db(field_type ft) { const direction dsigu0 = cycle_direction(gv.dim, d_c, 2); const direction dsigu = s->sigsize[dsigu0] > 1 ? dsigu0 : NO_DIRECTION; const realnum betadt = 2 * pi * beta * dt * (d_c == X ? +1 : -1) * - (f[c_g][1 - cmp] ? (ft == D_stuff ? -1 : +1) * (2 * cmp - 1) : 1); - STEP_BETA(the_f, cc, g, gv, gv.little_owned_corner0(cc), gv.big_corner(), - betadt, dsig, s->siginv[dsig], f_u[cc][cmp], dsigu, - s->siginv[dsigu], s->condinv[cc][d_c], f_cond[cc][cmp]); + (f[c_g][1 - cmp] ? (ft == D_stuff ? -1 : +1) * (2 * cmp - 1) : 1); + STEP_BETA(the_f, cc, g, gv, gv.little_owned_corner0(cc), gv.big_corner(), betadt, dsig, + s->siginv[dsig], f_u[cc][cmp], dsigu, s->siginv[dsigu], s->condinv[cc][d_c], + f_cond[cc][cmp]); } // in cylindrical coordinates, we now have to add the i*m/r terms... */ @@ -336,7 +334,7 @@ bool fields_chunk::step_db(field_type ft) { for (int iz = (ft == D_stuff); iz < nz + (ft == D_stuff); ++iz) { realnum df; realnum dfcnd = (sd * Courant) * (f_p[iz] - f_p[iz - sd] - f_m_mult * f_m[iz]) * - (cndinv ? cndinv[iz] : 1); + (cndinv ? cndinv[iz] : 1); if (fcnd) fcnd[iz] += dfcnd; the_f[iz] += (df = dfcnd * (siginv ? siginv[dk + 2 * (dsig == Z) * iz] : 1)); if (fu) fu[iz] += siginvu[dku + 2 * (dsigu == Z) * iz] * df; diff --git a/src/step_generic.cpp b/src/step_generic.cpp index 454d55a7a..aa49bdf92 100644 --- a/src/step_generic.cpp +++ b/src/step_generic.cpp @@ -12,7 +12,7 @@ KSTRIDE_DEF defines the relevant strides etc. and goes outside the LOOP, wheras KDEF defines the k index and goes inside the LOOP. */ #define KSTRIDE_DEF(dsig, k, is, gv) \ - const int k##0 = is.in_direction(dsig) - gv.little_corner().in_direction(dsig); \ + const int k##0 = is.in_direction(dsig) - gv.little_corner().in_direction(dsig); \ const int s##k##1 = gv.yucky_direction(0) == dsig ? 2 : 0; \ const int s##k##2 = gv.yucky_direction(1) == dsig ? 2 : 0; \ const int s##k##3 = gv.yucky_direction(2) == dsig ? 2 : 0 @@ -63,13 +63,13 @@ namespace meep { df/dt = dfu/dt - sigma_u * f and fu replaces f in the equations above (fu += dt curl g etcetera). */ -void step_curl(RPR f, component c, const RPR g1, const RPR g2, - ptrdiff_t s1, ptrdiff_t s2, // strides for g1/g2 shift - const grid_volume &gv, const ivec is, const ivec ie, - realnum dtdx, direction dsig, const RPR sig, const RPR kap, - const RPR siginv, RPR fu, direction dsigu, const RPR sigu, const RPR kapu, - const RPR siginvu, realnum dt, const RPR cnd, const RPR cndinv, RPR fcnd) { - (void) c; // currently unused +void step_curl(RPR f, component c, const RPR g1, const RPR g2, ptrdiff_t s1, + ptrdiff_t s2, // strides for g1/g2 shift + const grid_volume &gv, const ivec is, const ivec ie, realnum dtdx, direction dsig, + const RPR sig, const RPR kap, const RPR siginv, RPR fu, direction dsigu, + const RPR sigu, const RPR kapu, const RPR siginvu, realnum dt, const RPR cnd, + const RPR cndinv, RPR fcnd) { + (void)c; // currently unused if (!g1) { // swap g1 and g2 SWAP(const RPR, g1, g2); SWAP(ptrdiff_t, s1, s2); @@ -253,10 +253,10 @@ void step_curl(RPR f, component c, const RPR g1, const RPR g2, and/or PML). This is used in 2d calculations to add an exp(i beta z) time dependence, which gives an additional i \beta \hat{z} \times cross-product in the curl equations. */ -void step_beta(RPR f, component c, const RPR g, const grid_volume &gv, const ivec is, const ivec ie, realnum betadt, - direction dsig, const RPR siginv, RPR fu, direction dsigu, const RPR siginvu, - const RPR cndinv, RPR fcnd) { - (void) c; // currently unused +void step_beta(RPR f, component c, const RPR g, const grid_volume &gv, const ivec is, const ivec ie, + realnum betadt, direction dsig, const RPR siginv, RPR fu, direction dsigu, + const RPR siginvu, const RPR cndinv, RPR fcnd) { + (void)c; // currently unused if (!g) return; if (dsig != NO_DIRECTION) { // PML in f update KSTRIDE_DEF(dsig, k, is, gv); @@ -364,11 +364,11 @@ inline realnum calc_nonlinear_u(const realnum Dsqr, const realnum Di, const real */ -void step_update_EDHB(RPR f, component fc, const grid_volume &gv, const ivec is, const ivec ie, const RPR g, const RPR g1, - const RPR g2, const RPR u, const RPR u1, const RPR u2, ptrdiff_t s, - ptrdiff_t s1, ptrdiff_t s2, const RPR chi2, const RPR chi3, RPR fw, - direction dsigw, const RPR sigw, const RPR kapw) { - (void) fc; // currently unused +void step_update_EDHB(RPR f, component fc, const grid_volume &gv, const ivec is, const ivec ie, + const RPR g, const RPR g1, const RPR g2, const RPR u, const RPR u1, + const RPR u2, ptrdiff_t s, ptrdiff_t s1, ptrdiff_t s2, const RPR chi2, + const RPR chi3, RPR fw, direction dsigw, const RPR sigw, const RPR kapw) { + (void)fc; // currently unused if (!f) return; if ((!g1 && g2) || (g1 && g2 && !u1 && u2)) { /* swap g1 and g2 */ @@ -468,9 +468,7 @@ void step_update_EDHB(RPR f, component fc, const grid_volume &gv, const ivec is, f[i] += (kapwkw + sigwkw) * fw[i] - (kapwkw - sigwkw) * fwprev; } } - else if (g2) { - meep::abort("bug - didn't swap off-diagonal terms!?"); - } + else if (g2) { meep::abort("bug - didn't swap off-diagonal terms!?"); } else { PLOOP_OVER_IVECS(gv, is, ie, i) { realnum gs = g[i]; @@ -565,9 +563,7 @@ void step_update_EDHB(RPR f, component fc, const grid_volume &gv, const ivec is, calc_nonlinear_u(gs * gs + 0.0625 * (g1s * g1s), gs, us, chi2[i], chi3[i]); } } - else if (g2) { - meep::abort("bug - didn't swap off-diagonal terms!?"); - } + else if (g2) { meep::abort("bug - didn't swap off-diagonal terms!?"); } else { PLOOP_OVER_IVECS(gv, is, ie, i) { realnum gs = g[i]; diff --git a/src/stress.cpp b/src/stress.cpp index 8cc1a6e2d..bed26cd0b 100644 --- a/src/stress.cpp +++ b/src/stress.cpp @@ -93,8 +93,7 @@ static void stress_sum(size_t Nfreq, double *F, const dft_chunk *F1, const dft_c complex extra_weight(real(curF1->extra_weight), imag(curF1->extra_weight)); for (size_t k = 0; k < curF1->N; ++k) for (size_t i = 0; i < Nfreq; ++i) - F[i] += real(extra_weight * - complex(curF1->dft[k * Nfreq + i]) * + F[i] += real(extra_weight * complex(curF1->dft[k * Nfreq + i]) * conj(complex(curF2->dft[k * Nfreq + i]))); } } diff --git a/src/structure.cpp b/src/structure.cpp index 9edd5a512..e05c830e0 100644 --- a/src/structure.cpp +++ b/src/structure.cpp @@ -30,7 +30,6 @@ using namespace std; namespace meep { - typedef structure_chunk *structure_chunk_ptr; structure::structure(const grid_volume &thegv, material_function &eps, const boundary_region &br, @@ -64,10 +63,10 @@ structure::structure(const grid_volume &thegv, double eps(const vec &), const bo } } -static std::unique_ptr split_by_cost(int n, grid_volume gvol, - bool fragment_cost, int &proc_id) { - if (n == 1) return std::unique_ptr(new binary_partition(proc_id++ - % count_processors())); +static std::unique_ptr split_by_cost(int n, grid_volume gvol, bool fragment_cost, + int &proc_id) { + if (n == 1) + return std::unique_ptr(new binary_partition(proc_id++ % count_processors())); int best_split_point; direction best_split_direction; @@ -88,17 +87,18 @@ static std::unique_ptr split_by_cost(int n, grid_volume gvol, split_plane optimal_plane{best_split_direction, best_split_position}; grid_volume left_gvol = gvol.split_at_fraction(false, best_split_point, best_split_direction); grid_volume right_gvol = gvol.split_at_fraction(true, best_split_point, best_split_direction); - return std::unique_ptr( - new binary_partition(optimal_plane, - /*left=*/split_by_cost(num_left, left_gvol, fragment_cost, proc_id), - /*right=*/split_by_cost(n - num_left, right_gvol, fragment_cost, proc_id))); + return std::unique_ptr(new binary_partition( + optimal_plane, + /*left=*/split_by_cost(num_left, left_gvol, fragment_cost, proc_id), + /*right=*/split_by_cost(n - num_left, right_gvol, fragment_cost, proc_id))); } void structure::choose_chunkdivision(const grid_volume &thegv, int desired_num_chunks, const boundary_region &br, const symmetry &s, const binary_partition *_bp) { - if (thegv.dim == Dcyl && thegv.get_origin().r() < 0) meep::abort("r < 0 origins are not supported"); + if (thegv.dim == Dcyl && thegv.get_origin().r() < 0) + meep::abort("r < 0 origins are not supported"); user_volume = thegv; gv = thegv; @@ -107,11 +107,8 @@ void structure::choose_chunkdivision(const grid_volume &thegv, int desired_num_c a = gv.a; dt = Courant / a; - if (_bp) { - bp.reset(new binary_partition(*_bp)); - } else { - bp = meep::choose_chunkdivision(gv, v, desired_num_chunks, s); - } + if (_bp) { bp.reset(new binary_partition(*_bp)); } + else { bp = meep::choose_chunkdivision(gv, v, desired_num_chunks, s); } // create the chunks: std::vector chunk_volumes; @@ -149,7 +146,6 @@ void structure::choose_chunkdivision(const grid_volume &thegv, int desired_num_c chunks[i]->cost = chunks[i]->gv.get_cost(); } } - } std::unique_ptr choose_chunkdivision(grid_volume &gv, volume &v, @@ -165,8 +161,7 @@ std::unique_ptr choose_chunkdivision(grid_volume &gv, volume & const direction d = (direction)dd; break_this[dd] = false; for (int n = 0; n < S.multiplicity(); n++) - if (has_direction(gv.dim, d) && - (S.transform(d, n).d != d || S.transform(d, n).flipped)) { + if (has_direction(gv.dim, d) && (S.transform(d, n).d != d || S.transform(d, n).flipped)) { if (gv.num_direction(d) & 1 && !break_this[d] && verbosity > 0) master_printf("Padding %s to even number of grid points.\n", direction_name(d)); break_this[dd] = true; @@ -291,7 +286,8 @@ void structure::check_chunks() { } size_t v_grid_points = 1; LOOP_OVER_DIRECTIONS(gv.dim, d) { v_grid_points *= gv.num_direction(d); } - if (sum != v_grid_points) meep::abort("v_grid_points = %zd, sum(chunks) = %zd\n", v_grid_points, sum); + if (sum != v_grid_points) + meep::abort("v_grid_points = %zd, sum(chunks) = %zd\n", v_grid_points, sum); } void structure::add_to_effort_volumes(const grid_volume &new_effort_volume, double extra_effort) { @@ -339,8 +335,7 @@ void structure::add_to_effort_volumes(const grid_volume &new_effort_volume, doub structure::structure(const structure &s) : num_chunks{s.num_chunks}, shared_chunks{false}, gv(s.gv), user_volume(s.user_volume), a{s.a}, Courant{s.Courant}, dt{s.dt}, v(s.v), S(s.S), - outdir(s.outdir), num_effort_volumes{s.num_effort_volumes}, - bp(new binary_partition(*s.bp)) { + outdir(s.outdir), num_effort_volumes{s.num_effort_volumes}, bp(new binary_partition(*s.bp)) { chunks = new structure_chunk_ptr[num_chunks]; for (int i = 0; i < num_chunks; i++) { chunks[i] = new structure_chunk(s.chunks[i]); @@ -517,11 +512,9 @@ void structure::use_pml(direction d, boundary_side b, double dx) { pml_volume.set_num_direction(d, int(dx * user_volume.a + 1 + 0.5)); // FIXME: exact value? const int v_to_user_shift = (gv.big_corner().in_direction(d) - user_volume.big_corner().in_direction(d)) / 2; - if (b == Low){ - pml_volume.set_origin(d, user_volume.little_corner().in_direction(d)); - } - - if (b == High){ + if (b == Low) { pml_volume.set_origin(d, user_volume.little_corner().in_direction(d)); } + + if (b == High) { pml_volume.set_origin(d, user_volume.big_corner().in_direction(d) - pml_volume.num_direction(d) * 2); pml_volume.set_num_direction(d, pml_volume.num_direction(d) + v_to_user_shift); @@ -715,9 +708,7 @@ structure_chunk::structure_chunk(const structure_chunk *o) : v(o->v) { cur->next = ocur->clone(); cur = cur->next; } - else { - chiP[ft] = cur = ocur->clone(); - } + else { chiP[ft] = cur = ocur->clone(); } cur->next = NULL; } } @@ -736,18 +727,14 @@ structure_chunk::structure_chunk(const structure_chunk *o) : v(o->v) { for (size_t i = 0; i < gv.ntot(); i++) chi3[c][i] = o->chi3[c][i]; } - else { - chi3[c] = NULL; - } + else { chi3[c] = NULL; } if (is_mine() && o->chi2[c]) { chi2[c] = new realnum[gv.ntot()]; if (chi2[c] == NULL) meep::abort("Out of memory!\n"); for (size_t i = 0; i < gv.ntot(); i++) chi2[c][i] = o->chi2[c][i]; } - else { - chi2[c] = NULL; - } + else { chi2[c] = NULL; } } FOR_COMPONENTS(c) FOR_DIRECTIONS(d) { trivial_chi1inv[c][d] = true; } FOR_COMPONENTS(c) FOR_DIRECTIONS(d) { diff --git a/src/structure_dump.cpp b/src/structure_dump.cpp index e0db507d7..fadda6fbb 100644 --- a/src/structure_dump.cpp +++ b/src/structure_dump.cpp @@ -33,8 +33,7 @@ namespace meep { // Write the parameters required to reconstruct the susceptibility (id, noise_amp (for noisy), // omega_0, gamma, no_omega_0_denominator) -void structure::write_susceptibility_params(h5file *file, - bool single_parallel_file, +void structure::write_susceptibility_params(h5file *file, bool single_parallel_file, const char *dname, int EorH) { // Get number of susceptibility params from first chunk, since all chunks will have // the same susceptibility list. @@ -88,7 +87,8 @@ void structure::dump_chunk_layout(const char *filename) { } void structure::dump(const char *filename, bool single_parallel_file) { - if (verbosity > 0) printf("creating epsilon from file \"%s\" (%d)...\n", filename, single_parallel_file); + if (verbosity > 0) + printf("creating epsilon from file \"%s\" (%d)...\n", filename, single_parallel_file); /* * make/save a num_chunks x NUM_FIELD_COMPONENTS x 5 array counting @@ -122,9 +122,8 @@ void structure::dump(const char *filename, bool single_parallel_file) { if (single_parallel_file) { num_chi1inv.resize(num_chi1inv_size); sum_to_master(num_chi1inv_.data(), num_chi1inv.data(), num_chi1inv_size); - } else { - num_chi1inv = std::move(num_chi1inv_); } + else { num_chi1inv = std::move(num_chi1inv_); } // determine total dataset size and offset of this process's data size_t my_start = 0; @@ -407,9 +406,7 @@ susceptibility *make_sus_list_from_params(h5file *file, int rank, size_t dims[3] } if (sus->next) sus = sus->next; } - else { - meep::abort("Invalid number of susceptibility parameters in structure::load"); - } + else { meep::abort("Invalid number of susceptibility parameters in structure::load"); } } return res; } @@ -437,7 +434,8 @@ binary_partition::binary_partition(const split_plane &_split_plane, if (!left || !right) { meep::abort("Binary partition tree is required to be full"); } } -binary_partition::binary_partition(const binary_partition& other) : proc_id(other.proc_id), plane(other.plane) { +binary_partition::binary_partition(const binary_partition &other) + : proc_id(other.proc_id), plane(other.plane) { if (!other.is_leaf()) { left.reset(new binary_partition(*other.left)); right.reset(new binary_partition(*other.right)); @@ -476,10 +474,10 @@ void split_by_binarytree(grid_volume gvol, std::vector &result_gvs, } const auto &plane = bp->get_plane(); - int split_point = static_cast( - (plane.pos - gvol.surroundings().in_direction_min(plane.dir)) / - gvol.surroundings().in_direction(plane.dir) * gvol.num_direction(plane.dir) + - 0.5); + int split_point = static_cast((plane.pos - gvol.surroundings().in_direction_min(plane.dir)) / + gvol.surroundings().in_direction(plane.dir) * + gvol.num_direction(plane.dir) + + 0.5); // traverse left branch grid_volume left_gvol = gvol.split_at_fraction(false, split_point, plane.dir); split_by_binarytree(left_gvol, result_gvs, result_ids, bp->left_tree()); @@ -542,8 +540,7 @@ void structure::load_chunk_layout(const char *filename, boundary_region &br) { delete[] nums; } -void structure::load_chunk_layout(const std::vector &gvs, - const std::vector &ids, +void structure::load_chunk_layout(const std::vector &gvs, const std::vector &ids, boundary_region &br) { if (gvs.size() != size_t(num_chunks)) meep::abort("load_chunk_layout: wrong number of chunks."); // Recreate the chunks with the new grid_volumes @@ -558,7 +555,8 @@ void structure::load_chunk_layout(const std::vector &gvs, void structure::load(const char *filename, bool single_parallel_file) { h5file file(filename, h5file::READONLY, single_parallel_file, !single_parallel_file); - if (verbosity > 0) printf("reading epsilon from file \"%s\" (%d)...\n", filename, single_parallel_file); + if (verbosity > 0) + printf("reading epsilon from file \"%s\" (%d)...\n", filename, single_parallel_file); /* * make/save a num_chunks x NUM_FIELD_COMPONENTS x 5 array counting @@ -623,10 +621,9 @@ void structure::load(const char *filename, bool single_parallel_file) { // read the data file.read_size("chi1inv", &rank, dims, 1); if (rank != 1 || dims[0] != ntotal) { - meep::abort( - "inconsistent data size for chi1inv in structure::load (rank, dims[0]): " - "(%d, %zu) != (1, %zu)", - rank, dims[0], ntotal); + meep::abort("inconsistent data size for chi1inv in structure::load (rank, dims[0]): " + "(%d, %zu) != (1, %zu)", + rank, dims[0], ntotal); } for (int i = 0; i < num_chunks; i++) if (chunks[i]->is_mine()) { @@ -671,7 +668,9 @@ void structure::load(const char *filename, bool single_parallel_file) { int rank = 0; size_t dims[] = {0, 0, 0}; file.read_size("num_sigmas", &rank, dims, 1); - if (dims[0] != (size_t)num_chunks * 2) { meep::abort("inconsistent data size for num_sigmas in structure::load"); } + if (dims[0] != (size_t)num_chunks * 2) { + meep::abort("inconsistent data size for num_sigmas in structure::load"); + } if (am_master() || !single_parallel_file) { size_t start = 0; size_t count = num_chunks; diff --git a/src/support/mt19937ar.c b/src/support/mt19937ar.c index f5b5f286d..a532aa887 100644 --- a/src/support/mt19937ar.c +++ b/src/support/mt19937ar.c @@ -54,133 +54,131 @@ #define UPPER_MASK 0x80000000UL /* most significant w-r bits */ #define LOWER_MASK 0x7fffffffUL /* least significant r bits */ -static unsigned long mt[N]; /* the array for the state vector */ -static int mti=N+1; /* mti==N+1 means mt[N] is not initialized */ +static unsigned long mt[N]; /* the array for the state vector */ +static int mti = N + 1; /* mti==N+1 means mt[N] is not initialized */ static unsigned long mt_save[N]; /* save state from before latest genrand */ /* initializes mt[N] with a seed */ -void meep_mt_init_genrand(unsigned long s) -{ - int i; - for (i=0; i> 30)) + mti); - /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */ - /* In the previous versions, MSBs of the seed affect */ - /* only MSBs of the array mt[]. */ - /* 2002/01/09 modified by Makoto Matsumoto */ - mt[mti] &= 0xffffffffUL; - /* for >32 bit machines */ - } +void meep_mt_init_genrand(unsigned long s) { + int i; + for (i = 0; i < N; ++i) + mt_save[i] = mt[i]; + mt[0] = s & 0xffffffffUL; + for (mti = 1; mti < N; mti++) { + mt[mti] = (1812433253UL * (mt[mti - 1] ^ (mt[mti - 1] >> 30)) + mti); + /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */ + /* In the previous versions, MSBs of the seed affect */ + /* only MSBs of the array mt[]. */ + /* 2002/01/09 modified by Makoto Matsumoto */ + mt[mti] &= 0xffffffffUL; + /* for >32 bit machines */ + } } /* restores state to what it was before most recent call to genrand */ void meep_mt_restore_genrand() { - int i; - for (i=0; ikey_length ? N : key_length); - for (; k; k--) { - mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1664525UL)) - + init_key[j] + j; /* non linear */ - mt[i] &= 0xffffffffUL; /* for WORDSIZE > 32 machines */ - i++; j++; - if (i>=N) { mt[0] = mt[N-1]; i=1; } - if (j>=key_length) j=0; +void meep_mt_init_by_array(unsigned long init_key[], int key_length) { + int i, j, k; + meep_mt_init_genrand(19650218UL); + i = 1; + j = 0; + k = (N > key_length ? N : key_length); + for (; k; k--) { + mt[i] = + (mt[i] ^ ((mt[i - 1] ^ (mt[i - 1] >> 30)) * 1664525UL)) + init_key[j] + j; /* non linear */ + mt[i] &= 0xffffffffUL; /* for WORDSIZE > 32 machines */ + i++; + j++; + if (i >= N) { + mt[0] = mt[N - 1]; + i = 1; } - for (k=N-1; k; k--) { - mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1566083941UL)) - - i; /* non linear */ - mt[i] &= 0xffffffffUL; /* for WORDSIZE > 32 machines */ - i++; - if (i>=N) { mt[0] = mt[N-1]; i=1; } + if (j >= key_length) j = 0; + } + for (k = N - 1; k; k--) { + mt[i] = (mt[i] ^ ((mt[i - 1] ^ (mt[i - 1] >> 30)) * 1566083941UL)) - i; /* non linear */ + mt[i] &= 0xffffffffUL; /* for WORDSIZE > 32 machines */ + i++; + if (i >= N) { + mt[0] = mt[N - 1]; + i = 1; } + } - mt[0] = 0x80000000UL; /* MSB is 1; assuring non-zero initial array */ + mt[0] = 0x80000000UL; /* MSB is 1; assuring non-zero initial array */ } /* generates a random number on [0,0xffffffff]-interval */ -unsigned long meep_mt_genrand_int32(void) -{ - unsigned long y; - static unsigned long mag01[2]={0x0UL, MATRIX_A}; - /* mag01[x] = x * MATRIX_A for x=0,1 */ - - if (mti >= N) { /* generate N words at one time */ - int kk; - - if (mti == N+1) /* if init_genrand() has not been called, */ - meep_mt_init_genrand(5489UL); /* a default initial seed is used */ - - for (kk=0;kk> 1) ^ mag01[y & 0x1UL]; - } - for (;kk> 1) ^ mag01[y & 0x1UL]; - } - y = (mt[N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK); - mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & 0x1UL]; - - mti = 0; +unsigned long meep_mt_genrand_int32(void) { + unsigned long y; + static unsigned long mag01[2] = {0x0UL, MATRIX_A}; + /* mag01[x] = x * MATRIX_A for x=0,1 */ + + if (mti >= N) { /* generate N words at one time */ + int kk; + + if (mti == N + 1) /* if init_genrand() has not been called, */ + meep_mt_init_genrand(5489UL); /* a default initial seed is used */ + + for (kk = 0; kk < N - M; kk++) { + y = (mt[kk] & UPPER_MASK) | (mt[kk + 1] & LOWER_MASK); + mt[kk] = mt[kk + M] ^ (y >> 1) ^ mag01[y & 0x1UL]; } + for (; kk < N - 1; kk++) { + y = (mt[kk] & UPPER_MASK) | (mt[kk + 1] & LOWER_MASK); + mt[kk] = mt[kk + (M - N)] ^ (y >> 1) ^ mag01[y & 0x1UL]; + } + y = (mt[N - 1] & UPPER_MASK) | (mt[0] & LOWER_MASK); + mt[N - 1] = mt[M - 1] ^ (y >> 1) ^ mag01[y & 0x1UL]; + + mti = 0; + } - y = mt[mti++]; + y = mt[mti++]; - /* Tempering */ - y ^= (y >> 11); - y ^= (y << 7) & 0x9d2c5680UL; - y ^= (y << 15) & 0xefc60000UL; - y ^= (y >> 18); + /* Tempering */ + y ^= (y >> 11); + y ^= (y << 7) & 0x9d2c5680UL; + y ^= (y << 15) & 0xefc60000UL; + y ^= (y >> 18); - return y; + return y; } /* generates a random number on [0,0x7fffffff]-interval */ -long meep_mt_genrand_int31(void) -{ - return (long)(meep_mt_genrand_int32()>>1); -} +long meep_mt_genrand_int31(void) { return (long)(meep_mt_genrand_int32() >> 1); } /* generates a random number on [0,1]-real-interval */ -double meep_mt_genrand_real1(void) -{ - return meep_mt_genrand_int32()*(1.0/4294967295.0); - /* divided by 2^32-1 */ +double meep_mt_genrand_real1(void) { + return meep_mt_genrand_int32() * (1.0 / 4294967295.0); + /* divided by 2^32-1 */ } /* generates a random number on [0,1)-real-interval */ -double meep_mt_genrand_real2(void) -{ - return meep_mt_genrand_int32()*(1.0/4294967296.0); - /* divided by 2^32 */ +double meep_mt_genrand_real2(void) { + return meep_mt_genrand_int32() * (1.0 / 4294967296.0); + /* divided by 2^32 */ } /* generates a random number on (0,1)-real-interval */ -double meep_mt_genrand_real3(void) -{ - return (((double)meep_mt_genrand_int32()) + 0.5)*(1.0/4294967296.0); - /* divided by 2^32 */ +double meep_mt_genrand_real3(void) { + return (((double)meep_mt_genrand_int32()) + 0.5) * (1.0 / 4294967296.0); + /* divided by 2^32 */ } /* generates a random number on [0,1) with 53-bit resolution*/ -double meep_mt_genrand_res53(void) -{ - unsigned long a=meep_mt_genrand_int32()>>5, b=meep_mt_genrand_int32()>>6; - return(a*67108864.0+b)*(1.0/9007199254740992.0); +double meep_mt_genrand_res53(void) { + unsigned long a = meep_mt_genrand_int32() >> 5, b = meep_mt_genrand_int32() >> 6; + return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0); } /* These real versions are due to Isaku Wada, 2002/01/09 added */ diff --git a/src/susceptibility.cpp b/src/susceptibility.cpp index d160dcdb2..e0abe05ad 100644 --- a/src/susceptibility.cpp +++ b/src/susceptibility.cpp @@ -347,8 +347,9 @@ void noisy_lorentzian_susceptibility::dump_params(h5file *h5f, size_t *start) { *start += num_params; } -gyrotropic_susceptibility::gyrotropic_susceptibility(const vec &bias, realnum omega_0, realnum gamma, - realnum alpha, gyrotropy_model model) +gyrotropic_susceptibility::gyrotropic_susceptibility(const vec &bias, realnum omega_0, + realnum gamma, realnum alpha, + gyrotropy_model model) : omega_0(omega_0), gamma(gamma), alpha(alpha), model(model) { // Precalculate g_{ij} = sum_k epsilon_{ijk} b_k, used in update_P. // Ignore |b| for Landau-Lifshitz-Gilbert gyrotropy model. @@ -619,8 +620,8 @@ void gyrotropic_susceptibility::dump_params(h5file *h5f, size_t *start) { size_t num_params = 9; size_t params_dims[1] = {num_params}; realnum bias[] = {gyro_tensor[Y][Z], gyro_tensor[Z][X], gyro_tensor[X][Y]}; - realnum params_data[] = {8, (realnum)get_id(), bias[X], bias[Y], bias[Z], omega_0, gamma, - alpha, (realnum)model}; + realnum params_data[] = {8, (realnum)get_id(), bias[X], bias[Y], bias[Z], omega_0, gamma, + alpha, (realnum)model}; h5f->write_chunk(1, start, params_dims, params_data); *start += num_params; } diff --git a/src/update_eh.cpp b/src/update_eh.cpp index 0a28c21af..76cc43d51 100644 --- a/src/update_eh.cpp +++ b/src/update_eh.cpp @@ -45,9 +45,8 @@ void fields::update_eh(field_type ft, bool skip_w_components) { if (loop_tile_base_eh > 0 && is_aniso) { split_into_tiles(chunks[i]->gv, &chunks[i]->gvs_eh[ft], loop_tile_base_eh); check_tiles(chunks[i]->gv, chunks[i]->gvs_eh[ft]); - } else { - chunks[i]->gvs_eh[ft].push_back(chunks[i]->gv); } + else { chunks[i]->gvs_eh[ft].push_back(chunks[i]->gv); } } for (int i = 0; i < num_chunks; i++) @@ -189,8 +188,8 @@ bool fields_chunk::update_eh(field_type ft, bool skip_w_components) { } if (f[ec][cmp] != f[dc][cmp]) - STEP_UPDATE_EDHB(f[ec][cmp], ec, gv, gvs_eh[ft][i].little_owned_corner0(ec), gvs_eh[ft][i].big_corner(), - dmp[dc][cmp], dmp[dc_1][cmp], dmp[dc_2][cmp], + STEP_UPDATE_EDHB(f[ec][cmp], ec, gv, gvs_eh[ft][i].little_owned_corner0(ec), + gvs_eh[ft][i].big_corner(), dmp[dc][cmp], dmp[dc_1][cmp], dmp[dc_2][cmp], s->chi1inv[ec][d_ec], dmp[dc_1][cmp] ? s->chi1inv[ec][d_1] : NULL, dmp[dc_2][cmp] ? s->chi1inv[ec][d_2] : NULL, s_ec, s_1, s_2, s->chi2[ec], s->chi3[ec], f_w[ec][cmp], dsigw, s->sig[dsigw], s->kap[dsigw]); diff --git a/src/vec.cpp b/src/vec.cpp index c64a4a74f..ff7024ace 100644 --- a/src/vec.cpp +++ b/src/vec.cpp @@ -454,12 +454,8 @@ bool grid_volume::owns(const ivec &p) const { return o.x() > 0 && o.x() <= nx() * 2 && o.y() > 0 && o.y() <= ny() * 2 && o.z() > 0 && o.z() <= nz() * 2; } - else if (dim == D2) { - return o.x() > 0 && o.x() <= nx() * 2 && o.y() > 0 && o.y() <= ny() * 2; - } - else if (dim == D1) { - return o.z() > 0 && o.z() <= nz() * 2; - } + else if (dim == D2) { return o.x() > 0 && o.x() <= nx() * 2 && o.y() > 0 && o.y() <= ny() * 2; } + else if (dim == D1) { return o.z() > 0 && o.z() <= nz() * 2; } else { meep::abort("Unsupported dimension in owns.\n"); return false; @@ -683,9 +679,7 @@ double grid_volume::rmin() const { const double qinva = 0.25 * inva; if (dim == Dcyl) { if (origin.r() == 0.0) { return 0.0; } - else { - return origin.r() + qinva; - } + else { return origin.r() + qinva; } } meep::abort("No rmin in these dimensions.\n"); return 0.0; // This is never reached. @@ -814,7 +808,7 @@ bool grid_volume::intersect_with(const grid_volume &vol_in, grid_volume *interse } if (initial_points != final_points) meep::abort("intersect_with: initial_points != final_points, %zd, %zd\n", initial_points, - final_points); + final_points); } return true; } @@ -858,11 +852,11 @@ ivec grid_volume::iloc(component c, ptrdiff_t ind) const { } size_t grid_volume::surface_area() const { - switch(dim) { - case Dcyl: return 2*(nr()+nz()); + switch (dim) { + case Dcyl: return 2 * (nr() + nz()); case D1: return 2; - case D2: return 2*(nx()+ny()); - case D3: return 2*(nx()*ny()+nx()*nz()+ny()*nz()); + case D2: return 2 * (nx() + ny()); + case D3: return 2 * (nx() * ny() + nx() * nz() + ny() * nz()); } return 0; // This is never reached. } @@ -909,15 +903,15 @@ vec grid_volume::dz() const { grid_volume volone(double zsize, double a) { if (!isinteger(zsize * a)) - master_printf_stderr( - "Warning: grid volume is not an integer number of pixels; cell size will be rounded to nearest pixel.\n"); + master_printf_stderr("Warning: grid volume is not an integer number of pixels; cell size will " + "be rounded to nearest pixel.\n"); return grid_volume(D1, a, 0, 0, (int)(zsize * a + 0.5)); } grid_volume voltwo(double xsize, double ysize, double a) { if (!isinteger(xsize * a) || !isinteger(ysize * a)) - master_printf_stderr( - "Warning: grid volume is not an integer number of pixels; cell size will be rounded to nearest pixel.\n"); + master_printf_stderr("Warning: grid volume is not an integer number of pixels; cell size will " + "be rounded to nearest pixel.\n"); return grid_volume(D2, a, (xsize == 0) ? 1 : (int)(xsize * a + 0.5), (ysize == 0) ? 1 : (int)(ysize * a + 0.5), 0); } @@ -928,8 +922,8 @@ grid_volume vol2d(double xsize, double ysize, double a) { return voltwo(xsize, y grid_volume vol3d(double xsize, double ysize, double zsize, double a) { if (!isinteger(xsize * a) || !isinteger(ysize * a) || !isinteger(zsize * a)) - master_printf_stderr( - "Warning: grid volume is not an integer number of pixels; cell size will be rounded to nearest pixel.\n"); + master_printf_stderr("Warning: grid volume is not an integer number of pixels; cell size will " + "be rounded to nearest pixel.\n"); return grid_volume(D3, a, (xsize == 0) ? 1 : (int)(xsize * a + 0.5), (ysize == 0) ? 1 : (int)(ysize * a + 0.5), (zsize == 0) ? 1 : (int)(zsize * a + 0.5)); @@ -937,8 +931,8 @@ grid_volume vol3d(double xsize, double ysize, double zsize, double a) { grid_volume volcyl(double rsize, double zsize, double a) { if (!isinteger(rsize) || !isinteger(zsize)) - master_printf_stderr( - "Warning: grid volume is not an integer number of pixels; cell size will be rounded to nearest pixel.\n"); + master_printf_stderr("Warning: grid volume is not an integer number of pixels; cell size will " + "be rounded to nearest pixel.\n"); if (zsize == 0.0) return grid_volume(Dcyl, a, (int)(rsize * a + 0.5), 0, 1); @@ -978,26 +972,27 @@ static double cost_diff(int desired_chunks, std::complex costs) { return right_cost - left_cost; } -void grid_volume::tile_split(int &best_split_point, - direction &best_split_direction) const { +void grid_volume::tile_split(int &best_split_point, direction &best_split_direction) const { const size_t ntot_thresh = 10; if (ntot() < ntot_thresh) { best_split_point = 0; best_split_direction = NO_DIRECTION; - } else if (nx() > 1) { + } + else if (nx() > 1) { best_split_point = nx() / 2; best_split_direction = X; - } else if (ny() > 1) { + } + else if (ny() > 1) { best_split_point = ny() / 2; best_split_direction = Y; - } else { + } + else { best_split_point = nz() / 2; best_split_direction = Z; } } -void grid_volume::find_best_split(int desired_chunks, bool fragment_cost, - int &best_split_point, +void grid_volume::find_best_split(int desired_chunks, bool fragment_cost, int &best_split_point, direction &best_split_direction, double &left_effort_fraction) const { if (size_t(desired_chunks) > nowned_min()) { @@ -1037,9 +1032,11 @@ void grid_volume::find_best_split(int desired_chunks, bool fragment_cost, std::complex costs = get_split_costs(d, split_point, fragment_cost); double left_cost = real(costs), right_cost = imag(costs); double total_cost = left_cost + right_cost; - double split_measure = std::max(left_cost / (desired_chunks / 2), right_cost / (desired_chunks - (desired_chunks / 2))); + double split_measure = std::max(left_cost / (desired_chunks / 2), + right_cost / (desired_chunks - (desired_chunks / 2))); // Give a 30% preference to the longest axis, as a heuristic to prefer lower communication costs - // when the split_measure is somewhat close. TODO: use a data-driven communication cost function. + // when the split_measure is somewhat close. TODO: use a data-driven communication cost + // function. if (d == longest_axis) split_measure *= 0.7; if (split_measure < best_split_measure) { best_split_measure = split_measure; @@ -1072,8 +1069,8 @@ grid_volume grid_volume::split_at_fraction(bool side_high, int split_pt, int spl // Halve the grid_volume for symmetry exploitation...must contain icenter! grid_volume grid_volume::halve(direction d) const { grid_volume retval(*this); - retval.set_num_direction(d, 1+(big_corner().in_direction(d)-icenter().in_direction(d)) / 2); - retval.set_origin(d, icenter().in_direction(d)-2); + retval.set_num_direction(d, 1 + (big_corner().in_direction(d) - icenter().in_direction(d)) / 2); + retval.set_origin(d, icenter().in_direction(d) - 2); return retval; } @@ -1089,7 +1086,6 @@ void grid_volume::pad_self(direction d) { shift_origin(d, -2); } - ivec grid_volume::icenter() const { /* Find the center of the user's cell. This will be used as the symmetry point, and therefore icenter-io must be *even* @@ -1218,9 +1214,8 @@ int symmetry::multiplicity() const { int symmetry::multiplicity(ivec &x) const { int m = multiplicity(); - for (int n=1; ntransform(sd.d, nrest) * ph; } - else { - return sd * ph; - } + else { return sd * ph; } } } @@ -1600,8 +1593,7 @@ const char *volume::str(char *buffer, size_t buflen) { buffer = sbuf; buflen = sizeof(sbuf); } - snprintf(buffer, buflen, "min_corner:%s, max_corner:%s", - min_corner.str(), max_corner.str()); + snprintf(buffer, buflen, "min_corner:%s, max_corner:%s", min_corner.str(), max_corner.str()); return buffer; } @@ -1613,23 +1605,21 @@ const char *grid_volume::str(char *buffer, size_t buflen) { buflen = sizeof(sbuf); } - written += snprintf(buffer+written, buflen-written, + written += snprintf(buffer + written, buflen - written, "grid_volume {\n dim:%s, a:%f, inva:%f, num:{%d, %d, %d}\n", dimension_name(dim), a, inva, num[0], num[1], num[2]); // Adapted from the print() method LOOP_OVER_DIRECTIONS(dim, d) { - written += snprintf(buffer+written, buflen-written, - " %s =%5g - %5g (%5g) \t", direction_name(d), origin.in_direction(d), - origin.in_direction(d) + num_direction(d) / a, num_direction(d) / a); - if (buflen-written <=0) - break; + written += snprintf(buffer + written, buflen - written, " %s =%5g - %5g (%5g) \t", + direction_name(d), origin.in_direction(d), + origin.in_direction(d) + num_direction(d) / a, num_direction(d) / a); + if (buflen - written <= 0) break; } - snprintf(buffer+written, buflen-written, "\n}"); + snprintf(buffer + written, buflen - written, "\n}"); return buffer; } - /********************************************************************/ /********************************************************************/ /********************************************************************/ @@ -1645,13 +1635,14 @@ grid_volume grid_volume::subvolume(ivec is, ivec ie, component c) { void grid_volume::init_subvolume(ivec is, ivec ie, component c) { ivec origin(dim, 0); - for (int i=0;i<3;i++) num[i] = 0; + for (int i = 0; i < 3; i++) + num[i] = 0; LOOP_OVER_DIRECTIONS(dim, d) { - num[(int)d] = (ie - is).in_direction(d)/2; - origin.set_direction(d, is.in_direction(d)-iyee_shift(c).in_direction(d)); + num[(int)d] = (ie - is).in_direction(d) / 2; + origin.set_direction(d, is.in_direction(d) - iyee_shift(c).in_direction(d)); } num_changed(); - //center_origin(); + // center_origin(); set_origin(origin); } diff --git a/tests/aniso_disp.cpp b/tests/aniso_disp.cpp index 4ae352c09..f17d2a5e3 100644 --- a/tests/aniso_disp.cpp +++ b/tests/aniso_disp.cpp @@ -117,7 +117,7 @@ int main(int argc, char **argv) { } double T2 = 200; int iT2 = T2 / f.dt; - std::vector> vals(iT2); + std::vector > vals(iT2); while (f.t - iT < iT2) { if ((f.t - iT) % (iT2 / 10) == 0) master_printf("%g%% done with harminv\n", (f.t - iT) * 100.0 / iT2); diff --git a/tests/array-slice-ll.cpp b/tests/array-slice-ll.cpp index c98f4a741..5cea412ef 100644 --- a/tests/array-slice-ll.cpp +++ b/tests/array-slice-ll.cpp @@ -30,7 +30,8 @@ vector3 v3(double x, double y = 0.0, double z = 0.0) { } // passthrough field function -std::complex default_field_function(const std::complex *fields, const vec &loc, void *data_) { +std::complex default_field_function(const std::complex *fields, const vec &loc, + void *data_) { (void)loc; // unused (void)data_; // unused return fields[0]; @@ -39,7 +40,7 @@ std::complex default_field_function(const std::complex *fields, /***************************************************************/ /***************************************************************/ /***************************************************************/ -const double RELTOL = sizeof(realnum) == sizeof(float) ? 1.0e-4: 1.0e-6; +const double RELTOL = sizeof(realnum) == sizeof(float) ? 1.0e-4 : 1.0e-6; double Compare(realnum *d1, realnum *d2, int N, const char *Name) { double Norm1 = 0.0, Norm2 = 0.0, NormDelta = 0.0; @@ -137,9 +138,7 @@ int main(int argc, char *argv[]) { symmetry sym = use_symmetry ? -mirror(Y, gv) : identity(); structure the_structure(gv, dummy_eps, pml(dpml), sym); meep_geom::material_type vacuum = meep_geom::vacuum; - auto material_deleter = [](meep_geom::material_data *m) { - meep_geom::material_free(m); - }; + auto material_deleter = [](meep_geom::material_data *m) { meep_geom::material_free(m); }; std::unique_ptr dielectric( meep_geom::make_dielectric(eps), material_deleter); geometric_object objects[7]; @@ -204,17 +203,17 @@ int main(int argc, char *argv[]) { // read 1D and 2D array-slice data from HDF5 file // h5file *file = f.open_h5file(H5FILENAME, h5file::READONLY); - std::unique_ptr rdata(static_cast( + std::unique_ptr rdata(static_cast( file->read("hz.r", &rank, dims1D, 1, sizeof(realnum) == sizeof(float)))); if (rank != 1 || dims1D[0] != NX) meep::abort("failed to read 1D data(hz.r) from file %s.h5", H5FILENAME); - std::unique_ptr idata(static_cast( + std::unique_ptr idata(static_cast( file->read("hz.i", &rank, dims1D, 1, sizeof(realnum) == sizeof(float)))); if (rank != 1 || dims1D[0] != NX) meep::abort("failed to read 1D data(hz.i) from file %s.h5", H5FILENAME); - std::vector> file_slice1d; + std::vector > file_slice1d; for (size_t n = 0; n < dims1D[0]; n++) file_slice1d.emplace_back(rdata[n], idata[n]); @@ -230,16 +229,18 @@ int main(int argc, char *argv[]) { // rank = f.get_array_slice_dimensions(v1d, dims1D, dirs1D, true, false); if (rank != 1 || dims1D[0] != NX) meep::abort("incorrect dimensions for 1D slice"); - std::unique_ptr []> slice1d(f.get_complex_array_slice(v1d, Hz, 0, 0, true)); - std::vector> slice1d_realnum; + std::unique_ptr[]> slice1d( + f.get_complex_array_slice(v1d, Hz, 0, 0, true)); + std::vector > slice1d_realnum; for (int i = 0; i < NX; ++i) slice1d_realnum.emplace_back(slice1d[i]); double RelErr1D = Compare(slice1d_realnum.data(), file_slice1d.data(), NX, "Hz_1d"); master_printf("1D: rel error %e\n", RelErr1D); rank = f.get_array_slice_dimensions(v2d, dims2D, dirs2D, true, false); - if (rank != 2 || dims2D[0] != NX || dims2D[1] != NY) meep::abort("incorrect dimensions for 2D slice"); - std::unique_ptr slice2d(f.get_array_slice(v2d, Sy, 0, 0, true)); + if (rank != 2 || dims2D[0] != NX || dims2D[1] != NY) + meep::abort("incorrect dimensions for 2D slice"); + std::unique_ptr slice2d(f.get_array_slice(v2d, Sy, 0, 0, true)); std::unique_ptr slice2d_realnum(new realnum[NX * NY]); for (int i = 0; i < NX * NY; ++i) slice2d_realnum[i] = static_cast(slice2d[i]); diff --git a/tests/bragg_transmission.cpp b/tests/bragg_transmission.cpp index 7830b2031..3cf2c42ab 100644 --- a/tests/bragg_transmission.cpp +++ b/tests/bragg_transmission.cpp @@ -224,11 +224,11 @@ void doit(bool use_hdf5) { if (errT > maxerrT) maxerrT = errT; if (errR > maxerrR) maxerrR = errR; if (errT * sqr(freq_min / (freq_min + i * dfreq)) > 0.01) - meep::abort("large error %g at freq = %g: T = %g instead of %g\n", errT, freq_min + i * dfreq, T[i], - T0[i]); + meep::abort("large error %g at freq = %g: T = %g instead of %g\n", errT, freq_min + i * dfreq, + T[i], T0[i]); if (errR * sqr(freq_min / (freq_min + i * dfreq)) > 0.01) - meep::abort("large error %g at freq = %g: R = %g instead of %g\n", errR, freq_min + i * dfreq, R[i], - R0[i]); + meep::abort("large error %g at freq = %g: R = %g instead of %g\n", errR, freq_min + i * dfreq, + R[i], R0[i]); } master_printf("Done (max. err in T = %e, in R = %e)\n", maxerrT, maxerrR); diff --git a/tests/convergence_cyl_waveguide.cpp b/tests/convergence_cyl_waveguide.cpp index 992631d5a..3c94de0ce 100644 --- a/tests/convergence_cyl_waveguide.cpp +++ b/tests/convergence_cyl_waveguide.cpp @@ -48,7 +48,7 @@ void test_convergence_without_averaging() { while (f.time() < f.last_source_time()) f.step(); int t_harminv_max = 2500; // try increasing this in case of failure - std::vector> mon_data(t_harminv_max); + std::vector > mon_data(t_harminv_max); int t = 0; monitor_point mp; while (t < t_harminv_max) { @@ -58,10 +58,10 @@ void test_convergence_without_averaging() { t++; } const int maxbands = 10; - std::vector> amps(maxbands); + std::vector > amps(maxbands); std::vector freq_re(maxbands), freq_im(maxbands), errors(maxbands); - int nfreq = do_harminv(mon_data.data(), t_harminv_max - 1, f.dt, 0.10, 0.50, maxbands, amps.data(), - freq_re.data(), freq_im.data(), errors.data()); + int nfreq = do_harminv(mon_data.data(), t_harminv_max - 1, f.dt, 0.10, 0.50, maxbands, + amps.data(), freq_re.data(), freq_im.data(), errors.data()); double w = 0.0; for (int jf = 0; jf < nfreq; jf++) if (abs(freq_re[jf] - w0) < abs(w - w0)) w = freq_re[jf]; @@ -117,7 +117,7 @@ void test_convergence_with_averaging() { while (f.time() < f.last_source_time()) f.step(); int t_harminv_max = 2500; // try increasing this in case of failure - std::vector> mon_data(t_harminv_max); + std::vector > mon_data(t_harminv_max); int t = 0; monitor_point mp; while (t < t_harminv_max) { @@ -127,10 +127,10 @@ void test_convergence_with_averaging() { t++; } const int maxbands = 10; - std::vector> amps(maxbands); + std::vector > amps(maxbands); std::vector freq_re(maxbands), freq_im(maxbands), errors(maxbands); - int nfreq = do_harminv(mon_data.data(), t_harminv_max - 1, f.dt, 0.10, 0.50, maxbands, amps.data(), - freq_re.data(), freq_im.data(), errors.data()); + int nfreq = do_harminv(mon_data.data(), t_harminv_max - 1, f.dt, 0.10, 0.50, maxbands, + amps.data(), freq_re.data(), freq_im.data(), errors.data()); double w = 0.0; for (int jf = 0; jf < nfreq; jf++) if (abs(freq_re[jf] - w0) < abs(w - w0)) w = freq_re[jf]; diff --git a/tests/cyl-ellipsoid-ll.cpp b/tests/cyl-ellipsoid-ll.cpp index a6fe6f471..5741aa5ef 100644 --- a/tests/cyl-ellipsoid-ll.cpp +++ b/tests/cyl-ellipsoid-ll.cpp @@ -33,8 +33,8 @@ bool compare_hdf5_datasets(const char *file1, const char *name1, const char *fil int rank1; std::vector dims1(expected_rank); - std::unique_ptr data1; - std::unique_ptr data2; + std::unique_ptr data1; + std::unique_ptr data2; data1.reset(static_cast( f1.read(name1, &rank1, dims1.data(), expected_rank, sizeof(realnum) == sizeof(float)))); if (!data1) return false; @@ -129,9 +129,7 @@ int main(int argc, char *argv[]) { // (make ellipsoid (center 0 0 0) (size 1 2 infinity) // (material air)))) double n = 3.5; // index of refraction - auto material_deleter = [](meep_geom::material_data *m) { - meep_geom::material_free(m); - }; + auto material_deleter = [](meep_geom::material_data *m) { meep_geom::material_free(m); }; std::unique_ptr dielectric( meep_geom::make_dielectric(n * n), material_deleter); geometric_object objects[2]; diff --git a/tests/cyl-ellipsoid.ctl b/tests/cyl-ellipsoid.ctl index 907deaf61..727f482cb 100644 --- a/tests/cyl-ellipsoid.ctl +++ b/tests/cyl-ellipsoid.ctl @@ -27,7 +27,7 @@ (run-until 23 (at-beginning output-epsilon) (at-every 0.25 print-stuff) - (at-end print-stuff) + (at-end print-stuff) (at-end output-efield-z)) (print "stopped at meep time = " (meep-round-time) ) diff --git a/tests/cylindrical.cpp b/tests/cylindrical.cpp index 831fcd74e..150120fb6 100644 --- a/tests/cylindrical.cpp +++ b/tests/cylindrical.cpp @@ -32,9 +32,7 @@ int compare(double a, double b, const char *n, double eps = 4e-15) { master_printf("This gives a fractional error of %g\n", fabs(a - b) / fabs(b)); return 0; } - else { - return 1; - } + else { return 1; } } int compare_point(fields &f1, fields &f2, const vec &p, double eps = 4e-8) { diff --git a/tests/dft-fields.cpp b/tests/dft-fields.cpp index 6e1e44746..074528ae9 100644 --- a/tests/dft-fields.cpp +++ b/tests/dft-fields.cpp @@ -33,8 +33,8 @@ double dummy_eps(const vec &) { return 1.0; } /***************************************************************/ /***************************************************************/ /***************************************************************/ -void Run(bool Pulse, double resolution, std::complex **field_array = 0, int *array_rank = 0, - size_t *array_dims = 0) { +void Run(bool Pulse, double resolution, std::complex **field_array = 0, + int *array_rank = 0, size_t *array_dims = 0) { /***************************************************************/ /* initialize geometry */ /***************************************************************/ @@ -102,16 +102,18 @@ void Run(bool Pulse, double resolution, std::complex **field_arra /***************************************************************/ /* return L2 norm of error normalized by average of L2 norms */ /***************************************************************/ -double compare_array_to_dataset(std::complex *field_array, int array_rank, size_t *array_dims, - const char *file, const char *name) { +double compare_array_to_dataset(std::complex *field_array, int array_rank, + size_t *array_dims, const char *file, const char *name) { int file_rank; size_t file_dims[3]; h5file f(file, h5file::READONLY, false); char dataname[100]; snprintf(dataname, 100, "%s.r", name); - double *rdata = (double *)f.read(dataname, &file_rank, file_dims, 2, false /* single_precision */); + double *rdata = + (double *)f.read(dataname, &file_rank, file_dims, 2, false /* single_precision */); snprintf(dataname, 100, "%s.i", name); - double *idata = (double *)f.read(dataname, &file_rank, file_dims, 2, false /* single_precision */); + double *idata = + (double *)f.read(dataname, &file_rank, file_dims, 2, false /* single_precision */); if (!rdata || !idata) return -1.0; if (file_rank != array_rank) return -1.0; for (int n = 0; n < file_rank; n++) @@ -148,9 +150,11 @@ double compare_complex_hdf5_datasets(const char *file1, const char *name1, const int rank1; size_t *dims1 = new size_t[expected_rank]; snprintf(dataname, 100, "%s.r", name1); - double *rdata1 = (double *)f1.read(dataname, &rank1, dims1, expected_rank, false /* single_precision */); + double *rdata1 = + (double *)f1.read(dataname, &rank1, dims1, expected_rank, false /* single_precision */); snprintf(dataname, 100, "%s.i", name1); - double *idata1 = (double *)f1.read(dataname, &rank1, dims1, expected_rank, false /* single_precision */); + double *idata1 = + (double *)f1.read(dataname, &rank1, dims1, expected_rank, false /* single_precision */); if (!rdata1 || !idata1) return -1.0; // read dataset 2 @@ -158,9 +162,11 @@ double compare_complex_hdf5_datasets(const char *file1, const char *name1, const int rank2; size_t *dims2 = new size_t[expected_rank]; snprintf(dataname, 100, "%s.r", name2); - double *rdata2 = (double *)f2.read(dataname, &rank2, dims2, expected_rank, false /* single_precision */); + double *rdata2 = + (double *)f2.read(dataname, &rank2, dims2, expected_rank, false /* single_precision */); snprintf(dataname, 100, "%s.i", name2); - double *idata2 = (double *)f2.read(dataname, &rank2, dims2, expected_rank, false /* single_precision */); + double *idata2 = + (double *)f2.read(dataname, &rank2, dims2, expected_rank, false /* single_precision */); if (!rdata2 || !idata2) return -1.0; // check same size diff --git a/tests/dump_load.cpp b/tests/dump_load.cpp index befa65443..b6edbdd08 100644 --- a/tests/dump_load.cpp +++ b/tests/dump_load.cpp @@ -27,7 +27,8 @@ double one(const vec &) { return 1.0; } double targets(const vec &pt) { const double r = sqrt(pt.x() * pt.x() + pt.y() * pt.y()); double dr = r; - while (dr > 1) dr -= 1; + while (dr > 1) + dr -= 1; if (dr > 0.7001) return 12.0; return 1.0; } @@ -41,12 +42,10 @@ static const double tol = 1e-9, thresh = 1e-15; int compare(double a, double b, const char *n) { if (fabs(a - b) > fabs(b) * tol && fabs(b) > thresh) { master_printf("%s differs by\t%g out of\t%g\n", n, a - b, b); - master_printf("This gives a fractional error of %g\n", - fabs(a - b) / fabs(b)); + master_printf("This gives a fractional error of %g\n", fabs(a - b) / fabs(b)); return 0; - } else { - return 1; } + else { return 1; } } int compare_point(fields &f1, fields &f2, const vec &p) { @@ -58,12 +57,11 @@ int compare_point(fields &f1, fields &f2, const vec &p) { if (f1.gv.has_field(c)) { complex v1 = m_test.get_component(c), v2 = m1.get_component(c); if (abs(v1 - v2) > tol * abs(v2) && abs(v2) > thresh) { - master_printf("%s differs: %g %g out of %g %g\n", component_name(c), - real(v2 - v1), imag(v2 - v1), real(v2), imag(v2)); - master_printf("This comes out to a fractional error of %g\n", - abs(v1 - v2) / abs(v2)); - master_printf("Right now I'm looking at %g %g %g, time %g\n", p.x(), - p.y(), p.z(), f1.time()); + master_printf("%s differs: %g %g out of %g %g\n", component_name(c), real(v2 - v1), + imag(v2 - v1), real(v2), imag(v2)); + master_printf("This comes out to a fractional error of %g\n", abs(v1 - v2) / abs(v2)); + master_printf("Right now I'm looking at %g %g %g, time %g\n", p.x(), p.y(), p.z(), + f1.time()); return 0; } } @@ -80,12 +78,11 @@ int approx_point(fields &f1, fields &f2, const vec &p) { if (f1.gv.has_field(c)) { complex v1 = m_test.get_component(c), v2 = m1.get_component(c); if (abs(v1 - v2) > tol * abs(v2) && abs(v2) > thresh) { - master_printf("%s differs: %g %g out of %g %g\n", component_name(c), - real(v2 - v1), imag(v2 - v1), real(v2), imag(v2)); - master_printf("This comes out to a fractional error of %g\n", - abs(v1 - v2) / abs(v2)); - master_printf("Right now I'm looking at %g %g %g, time %g\n", p.x(), - p.y(), p.z(), f1.time()); + master_printf("%s differs: %g %g out of %g %g\n", component_name(c), real(v2 - v1), + imag(v2 - v1), real(v2), imag(v2)); + master_printf("This comes out to a fractional error of %g\n", abs(v1 - v2) / abs(v2)); + master_printf("Right now I'm looking at %g %g %g, time %g\n", p.x(), p.y(), p.z(), + f1.time()); return 0; } } @@ -126,40 +123,34 @@ int test_metal(double eps(const vec &), int splitting, const char *tmpdir) { grid_volume gv = vol3d(1.5, 0.5, 1.0, a); structure s(gv, eps, no_pml(), identity(), splitting); - std::string filename_prefix = - std::string(tmpdir) + "/test_metal_" + std::to_string(splitting); - std::string structure_filename = - structure_dump(&s, filename_prefix, "original"); + std::string filename_prefix = std::string(tmpdir) + "/test_metal_" + std::to_string(splitting); + std::string structure_filename = structure_dump(&s, filename_prefix, "original"); master_printf("Metal test using %d chunks...\n", splitting); fields f(&s); f.add_point_source(Ez, 0.8, 0.6, 0.0, 4.0, vec(1.299, 0.299, 0.401), 1.0); - while (f.time() < ttot) f.step(); + while (f.time() < ttot) + f.step(); - std::string fields_filename = - fields_dump(&f, filename_prefix, "original"); + std::string fields_filename = fields_dump(&f, filename_prefix, "original"); structure s_load(gv, eps, no_pml(), identity(), splitting); structure_load(&s_load, structure_filename); fields f_load(&s_load); - f_load.add_point_source(Ez, 0.8, 0.6, 0.0, 4.0, vec(1.299, 0.299, 0.401), - 1.0); + f_load.add_point_source(Ez, 0.8, 0.6, 0.0, 4.0, vec(1.299, 0.299, 0.401), 1.0); fields_load(&f_load, fields_filename); if (!compare_point(f, f_load, vec(0.5, 0.5, 0.01))) return 0; if (!compare_point(f, f_load, vec(0.46, 0.33, 0.33))) return 0; if (!compare_point(f, f_load, vec(1.301, 0.301, 0.399))) return 0; - if (!compare(f.field_energy(), f_load.field_energy(), " total energy")) - return 0; + if (!compare(f.field_energy(), f_load.field_energy(), " total energy")) return 0; if (!compare(f.electric_energy_in_box(gv.surroundings()), - f_load.electric_energy_in_box(gv.surroundings()), - "electric energy")) + f_load.electric_energy_in_box(gv.surroundings()), "electric energy")) return 0; if (!compare(f.magnetic_energy_in_box(gv.surroundings()), - f_load.magnetic_energy_in_box(gv.surroundings()), - "magnetic energy")) + f_load.magnetic_energy_in_box(gv.surroundings()), "magnetic energy")) return 0; return 1; } @@ -171,20 +162,18 @@ int test_periodic(double eps(const vec &), int splitting, const char *tmpdir) { grid_volume gv = vol3d(1.5, 0.5, 1.0, a); structure s(gv, eps, no_pml(), identity(), splitting); - std::string filename_prefix = - std::string(tmpdir) + "/test_periodic_" + std::to_string(splitting); - std::string structure_filename = - structure_dump(&s, filename_prefix, "original"); + std::string filename_prefix = std::string(tmpdir) + "/test_periodic_" + std::to_string(splitting); + std::string structure_filename = structure_dump(&s, filename_prefix, "original"); master_printf("Periodic test using %d chunks...\n", splitting); fields f(&s); f.use_bloch(vec(0.1, 0.7, 0.3)); f.add_point_source(Ez, 0.7, 2.5, 0.0, 4.0, vec(0.3, 0.25, 0.5), 1.0); - while (f.time() < ttot) f.step(); + while (f.time() < ttot) + f.step(); - std::string fields_filename = - fields_dump(&f, filename_prefix, "original"); + std::string fields_filename = fields_dump(&f, filename_prefix, "original"); structure s_load(gv, eps, no_pml(), identity(), splitting); structure_load(&s_load, structure_filename); @@ -197,15 +186,12 @@ int test_periodic(double eps(const vec &), int splitting, const char *tmpdir) { if (!compare_point(f, f_load, vec(0.5, 0.01, 0.5))) return 0; if (!compare_point(f, f_load, vec(0.46, 0.33, 0.2))) return 0; if (!compare_point(f, f_load, vec(1.0, 0.25, 0.301))) return 0; - if (!compare(f.field_energy(), f_load.field_energy(), " total energy")) - return 0; + if (!compare(f.field_energy(), f_load.field_energy(), " total energy")) return 0; if (!compare(f.electric_energy_in_box(gv.surroundings()), - f_load.electric_energy_in_box(gv.surroundings()), - "electric energy")) + f_load.electric_energy_in_box(gv.surroundings()), "electric energy")) return 0; if (!compare(f.magnetic_energy_in_box(gv.surroundings()), - f_load.magnetic_energy_in_box(gv.surroundings()), - "magnetic energy")) + f_load.magnetic_energy_in_box(gv.surroundings()), "magnetic energy")) return 0; return 1; @@ -219,12 +205,10 @@ int main(int argc, char **argv) { master_printf("Testing 3D dump/load: temp_dir = %s...\n", temp_dir.get()); for (int s = 2; s < 7; s++) - if (!test_periodic(targets, s, temp_dir.get())) - abort("error in test_periodic targets\n"); + if (!test_periodic(targets, s, temp_dir.get())) abort("error in test_periodic targets\n"); for (int s = 2; s < 8; s++) - if (!test_metal(one, s, temp_dir.get())) - abort("error in test_metal vacuum\n"); + if (!test_metal(one, s, temp_dir.get())) abort("error in test_metal vacuum\n"); delete_directory(temp_dir.get()); return 0; diff --git a/tests/h5test.cpp b/tests/h5test.cpp index 17e9ff2be..84640fd63 100644 --- a/tests/h5test.cpp +++ b/tests/h5test.cpp @@ -121,11 +121,13 @@ bool check_2d(double eps(const vec &), double a, int splitting, symfunc Sf, doub snprintf(dataname, 256, "%s%s", component_name(file_c), reim ? ".i" : (real_fields ? "" : ".r")); - realnum *h5data = (realnum *)file->read(dataname, &rank, dims, 2, sizeof(realnum) == sizeof(float)); + realnum *h5data = + (realnum *)file->read(dataname, &rank, dims, 2, sizeof(realnum) == sizeof(float)); file->prevent_deadlock(); // hackery if (!h5data) meep::abort("failed to read dataset %s:%s\n", name, dataname); if (rank != expected_rank) - meep::abort("incorrect rank (%d instead of %d) in %s:%s\n", rank, expected_rank, name, dataname); + meep::abort("incorrect rank (%d instead of %d) in %s:%s\n", rank, expected_rank, name, + dataname); if (expected_rank == 1 && file_gv.in_direction_min(X) == file_gv.in_direction_max(X)) { dims[1] = dims[0]; dims[0] = 1; @@ -234,11 +236,13 @@ bool check_3d(double eps(const vec &), double a, int splitting, symfunc Sf, comp snprintf(dataname, 256, "%s%s", component_name(file_c), reim ? ".i" : (real_fields ? "" : ".r")); - realnum *h5data = (realnum *)file->read(dataname, &rank, dims, 3, sizeof(realnum) == sizeof(float)); + realnum *h5data = + (realnum *)file->read(dataname, &rank, dims, 3, sizeof(realnum) == sizeof(float)); file->prevent_deadlock(); // hackery if (!h5data) meep::abort("failed to read dataset %s:%s\n", name, dataname); if (rank != expected_rank) - meep::abort("incorrect rank (%d instead of %d) in %s:%s\n", rank, expected_rank, name, dataname); + meep::abort("incorrect rank (%d instead of %d) in %s:%s\n", rank, expected_rank, name, + dataname); vec loc(loc0.dim); for (size_t i0 = 0; i0 < dims[0]; ++i0) { for (size_t i1 = 0; i1 < dims[1]; ++i1) { @@ -341,7 +345,8 @@ bool check_2d_monitor(double eps(const vec &), double a, int splitting, symfunc snprintf(dataname, 256, "%s%s", component_name(file_c), reim ? ".i" : (real_fields ? "" : ".r")); - realnum *h5data = (realnum *)file->read(dataname, &rank, dims, 2, sizeof(realnum) == sizeof(float)); + realnum *h5data = + (realnum *)file->read(dataname, &rank, dims, 2, sizeof(realnum) == sizeof(float)); file->prevent_deadlock(); // hackery if (!h5data) meep::abort("failed to read dataset %s:%s\n", file->file_name(), dataname); if (rank != 1) meep::abort("monitor-point data is not one-dimensional"); diff --git a/tests/harmonics.cpp b/tests/harmonics.cpp index 9deb62035..ac176d26a 100644 --- a/tests/harmonics.cpp +++ b/tests/harmonics.cpp @@ -45,12 +45,12 @@ void harmonics(double freq, double chi2, double chi3, double J, double &A2, doub f.add_point_source(Ex, src, vec(-0.5 * sz + dpml), J); vec fpt(0.5 * sz - dpml - 0.5); - dft_flux d1 = f.add_dft_flux(Z, volume(fpt), freq, freq, 1, true, true, - 1 /* decimation_factor */); - dft_flux d2 = f.add_dft_flux(Z, volume(fpt), 2 * freq, 2 * freq, 1, true, true, - 1 /* decimation_factor */); - dft_flux d3 = f.add_dft_flux(Z, volume(fpt), 3 * freq, 3 * freq, 1, true, true, - 1 /* decimation_factor */); + dft_flux d1 = + f.add_dft_flux(Z, volume(fpt), freq, freq, 1, true, true, 1 /* decimation_factor */); + dft_flux d2 = + f.add_dft_flux(Z, volume(fpt), 2 * freq, 2 * freq, 1, true, true, 1 /* decimation_factor */); + dft_flux d3 = + f.add_dft_flux(Z, volume(fpt), 3 * freq, 3 * freq, 1, true, true, 1 /* decimation_factor */); double emax = 0; @@ -106,7 +106,8 @@ int main(int argc, char **argv) { if (different(a2, 9.80330e-07, thresh, "2nd harmonic mismatches known val")) return 1; if (sizeof(realnum) == sizeof(float)) { if (different(a3, 9.99349e-07, thresh, "3rd harmonic mismatches known val")) return 1; - } else { + } + else { if (different(a3, 9.97747e-07, thresh, "3rd harmonic mismatches known val")) return 1; } @@ -130,7 +131,8 @@ int main(int argc, char **argv) { harmonics(freq, 0.0, 1e-4, 1.0, a2_2, a3_2); if (sizeof(realnum) == sizeof(float)) { if (different(a3, a3_2, 0.0017, "chi2 has too big effect on 3rd harmonic")) return 1; - } else { + } + else { if (different(a3, a3_2, 0.001, "chi2 has too big effect on 3rd harmonic")) return 1; } diff --git a/tests/integrate.cpp b/tests/integrate.cpp index def80d451..cbf92cc18 100644 --- a/tests/integrate.cpp +++ b/tests/integrate.cpp @@ -271,7 +271,7 @@ void check_loop_vol(const grid_volume &gv, component c) { meep::abort("FAILED: LOOP_OVER_VOL has %zd iterations instead of ntot=%zd\n", count, gv.ntot()); if (count_owned != gv.nowned(c)) meep::abort("FAILED: LOOP_OVER_VOL has %zd owned points instead of nowned=%zd\n", count_owned, - gv.nowned(c)); + gv.nowned(c)); if (min_i != 0) meep::abort("FAILED: LOOP_OVER_VOL has minimum index %td instead of 0\n", min_i); if (size_t(max_i) != gv.ntot() - 1) meep::abort("FAILED: LOOP_OVER_VOL has max index %td instead of ntot-1\n", max_i); @@ -284,12 +284,15 @@ void check_loop_vol(const grid_volume &gv, component c) { vec here0(gv[ihere0]); if (ihere0 != ihere) meep::abort("FAILED: wrong LOOP_OVER_VOL_OWNED iloc at i=%td\n", i); if (abs(here0 - here) > 1e-13) - meep::abort("FAILED: wrong LOOP_OVER_VOL_OWNED loc (err = %g) at i=%td\n", abs(here0 - here), i); - if (!gv.owns(ihere)) meep::abort("FAILED: LOOP_OVER_VOL_OWNED includes non-owned at i=%td\n", i); + meep::abort("FAILED: wrong LOOP_OVER_VOL_OWNED loc (err = %g) at i=%td\n", abs(here0 - here), + i); + if (!gv.owns(ihere)) + meep::abort("FAILED: LOOP_OVER_VOL_OWNED includes non-owned at i=%td\n", i); ++count; } if (count != count_owned) - meep::abort("FAILED: LOOP_OVER_VOL_OWNED has %zd iterations instead of %zd\n", count, count_owned); + meep::abort("FAILED: LOOP_OVER_VOL_OWNED has %zd iterations instead of %zd\n", count, + count_owned); count = 0; LOOP_OVER_VOL_NOTOWNED(gv, c, i) { @@ -299,7 +302,8 @@ void check_loop_vol(const grid_volume &gv, component c) { vec here0(gv[ihere0]); if (ihere0 != ihere) meep::abort("FAILED: wrong LOOP_OVER_VOL_NOTOWNED iloc at i=%td\n", i); if (abs(here0 - here) > 1e-13) - meep::abort("FAILED: wrong LOOP_OVER_VOL_NOTOWNED loc (err = %g) at i=%td\n", abs(here0 - here), i); + meep::abort("FAILED: wrong LOOP_OVER_VOL_NOTOWNED loc (err = %g) at i=%td\n", + abs(here0 - here), i); if (gv.owns(ihere)) meep::abort("FAILED: LOOP_OVER_VOL_NOTOWNED includes owned at i=%td\n", i); if (ihere < vmin || ihere > vmax) meep::abort("FAILED: LOOP_OVER_VOL_NOTOWNED outside V at i=%td\n", i); @@ -307,7 +311,7 @@ void check_loop_vol(const grid_volume &gv, component c) { } if (count != gv.ntot() - count_owned) meep::abort("FAILED: LOOP_OVER_VOL_NOTOWNED has %zd iterations instead of %zd\n", count, - gv.ntot() - count_owned); + gv.ntot() - count_owned); master_printf("...PASSED.\n"); } @@ -323,12 +327,11 @@ int main(int argc, char **argv) { const grid_volume v1d = vol1d(sz[0], a); const grid_volume vcyl = volcyl(sz[0], sz[1], a); - srand(0); // use fixed random sequence - check_splitsym(v3d, 0, identity(), "identity"); - check_splitsym(v3d, 0, mirror(X, v3d), "mirrorx"); - return 0; + check_splitsym(v3d, 0, identity(), "identity"); + check_splitsym(v3d, 0, mirror(X, v3d), "mirrorx"); + return 0; for (int splitting = 0; splitting < 5; ++splitting) { check_splitsym(v3d, splitting, identity(), "identity"); diff --git a/tests/known_results.cpp b/tests/known_results.cpp index 773e0346a..c8a3b77ba 100644 --- a/tests/known_results.cpp +++ b/tests/known_results.cpp @@ -45,9 +45,7 @@ void compare(double b, double a, const char *n) { if (fabs(a - b) > fabs(b) * thresh || b != b) { meep::abort("Failed %s (%g instead of %g, relerr %0.2g)\n", n, a, b, fabs(a - b) / fabs(b)); } - else { - master_printf("Passed %s\n", n); - } + else { master_printf("Passed %s\n", n); } } static double dpml = 1.0; diff --git a/tests/near2far.cpp b/tests/near2far.cpp index 164a8e15e..b1a2367af 100644 --- a/tests/near2far.cpp +++ b/tests/near2far.cpp @@ -252,7 +252,7 @@ int main(int argc, char **argv) { const double a2d = argc > 1 ? atof(argv[1]) : 20, a3d = argc > 1 ? a2d : 10; - if ((sizeof(realnum) == sizeof(double)) && !check_cyl(5.0, 10.0, 20.0)) return 1; + if ((sizeof(realnum) == sizeof(double)) && !check_cyl(5.0, 10.0, 20.0)) return 1; // NOTE: see hack above -- we require sources to be odd in Z and even in X or vice-versa if (!check_2d_3d(D3, 4, a3d, Ez, Hx, false)) return 1; diff --git a/tests/one_dimensional.cpp b/tests/one_dimensional.cpp index 14558e63d..844b39c53 100644 --- a/tests/one_dimensional.cpp +++ b/tests/one_dimensional.cpp @@ -37,9 +37,7 @@ int compare(double a, double b, const char *n) { master_printf("This gives a fractional error of %g\n", fabs(a - b) / fabs(b)); return 0; } - else { - return 1; - } + else { return 1; } } int compare_point(fields &f1, fields &f2, const vec &p) { diff --git a/tests/physical.cpp b/tests/physical.cpp index 938c088a3..5a2c9835b 100644 --- a/tests/physical.cpp +++ b/tests/physical.cpp @@ -54,8 +54,9 @@ int radiating_2D(const double xmax) { master_printf("Ratio is %g from (%g %g) and (%g %g)\n", ratio, real(amp1), imag(amp1), real(amp2), imag(amp2)); if (ratio > 2.12 || ratio < 1.88) - meep::abort("Failed: amp1 = (%g, %g), amp2 = (%g, %g)\n abs(amp1/amp2)^2 = %g, too far from 2.0\n", - real(amp1), imag(amp1), real(amp2), imag(amp2), ratio); + meep::abort( + "Failed: amp1 = (%g, %g), amp2 = (%g, %g)\n abs(amp1/amp2)^2 = %g, too far from 2.0\n", + real(amp1), imag(amp1), real(amp2), imag(amp2), ratio); return 1; } @@ -90,8 +91,9 @@ int radiating_3D(const double xmax) { master_printf("Ratio is %g from (%g %g) and (%g %g)\n", ratio, real(amp1), imag(amp1), real(amp2), imag(amp2)); if (ratio > 2.12 || ratio < 1.88) - meep::abort("Failed: amp1 = (%g, %g), amp2 = (%g, %g)\n abs(amp1/amp2) = %g, too far from 2.0\n", - real(amp1), imag(amp1), real(amp2), imag(amp2), ratio); + meep::abort( + "Failed: amp1 = (%g, %g), amp2 = (%g, %g)\n abs(amp1/amp2) = %g, too far from 2.0\n", + real(amp1), imag(amp1), real(amp2), imag(amp2), ratio); return 1; } diff --git a/tests/pml.cpp b/tests/pml.cpp index 6c3e1a8b4..7906d7d35 100644 --- a/tests/pml.cpp +++ b/tests/pml.cpp @@ -335,9 +335,12 @@ int main(int argc, char **argv) { if (sizeof(realnum) == sizeof(double)) { if (pml1d_scaling(one)) meep::abort("pml doesn't scale properly with length."); } - if (pmlcyl_scaling(one, 0)) meep::abort("m=0 cylindrical pml doesn't scale properly with length."); - if (pmlcyl_scaling(one, 1)) meep::abort("m=1 cylindrical pml doesn't scale properly with length."); - if (pmlcyl_scaling(one, 2)) meep::abort("m=2 cylindrical pml doesn't scale properly with length."); + if (pmlcyl_scaling(one, 0)) + meep::abort("m=0 cylindrical pml doesn't scale properly with length."); + if (pmlcyl_scaling(one, 1)) + meep::abort("m=1 cylindrical pml doesn't scale properly with length."); + if (pmlcyl_scaling(one, 2)) + meep::abort("m=2 cylindrical pml doesn't scale properly with length."); return 0; } diff --git a/tests/ring-ll.cpp b/tests/ring-ll.cpp index a478d6728..06f70b1ec 100644 --- a/tests/ring-ll.cpp +++ b/tests/ring-ll.cpp @@ -73,11 +73,9 @@ int main(int argc, char *argv[]) { // (radius (+ r w)) (material (make dielectric (index n)))) // (make cylinder (center 0 0) (height infinity) // (radius r) (material air)))) - auto material_deleter = [](meep_geom::material_data *m) { - meep_geom::material_free(m); - }; + auto material_deleter = [](meep_geom::material_data *m) { meep_geom::material_free(m); }; std::unique_ptr dielectric( - meep_geom::make_dielectric(n*n), material_deleter); + meep_geom::make_dielectric(n * n), material_deleter); geometric_object objects[2]; vector3 v3zero = {0.0, 0.0, 0.0}; vector3 zaxis = {0.0, 0.0, 1.0}; @@ -107,7 +105,7 @@ int main(int argc, char *argv[]) { double T = 300.0; double stop_time = f.round_time() + T; - std::vector> fieldData; + std::vector > fieldData; vec eval_pt(r + 0.1, 0.0); while (f.round_time() < stop_time) { f.step(); @@ -136,15 +134,15 @@ int main(int argc, char *argv[]) { int ref_bands = 4; double ref_freq_re[4] = {1.1807e-01, 1.4470e-01, 1.4715e-01, 1.7525e-01}; double ref_freq_im[4] = {-7.5657e-04, -8.9843e-04, -2.2172e-04, -5.0267e-05}; - std::complex ref_amp[4] = {std::complex(-6.40e-03,-2.81e-03), - std::complex(-1.42e-04,+6.78e-04), - std::complex(+3.99e-02,+4.09e-02), - std::complex(-1.98e-03,-1.43e-02)}; + std::complex ref_amp[4] = { + std::complex(-6.40e-03, -2.81e-03), std::complex(-1.42e-04, +6.78e-04), + std::complex(+3.99e-02, +4.09e-02), std::complex(-1.98e-03, -1.43e-02)}; if (bands != ref_bands) meep::abort("harminv found only %i/%i bands\n", bands, ref_bands); for (int nb = 0; nb < bands; nb++) if ((fabs(freq_re[nb] - ref_freq_re[nb]) > 1.0e-2 * fabs(ref_freq_re[nb]) || fabs(freq_im[nb] - ref_freq_im[nb]) > 1.0e-2 * fabs(ref_freq_im[nb]) || - abs(amp[nb] - ref_amp[nb]) > 1.0e-2 * abs(ref_amp[nb])) && (err[nb] < err_tol)) + abs(amp[nb] - ref_amp[nb]) > 1.0e-2 * abs(ref_amp[nb])) && + (err[nb] < err_tol)) meep::abort("harminv band %i disagrees with ref: {re f, im f, re A, im A}={%e,%e,%e,%e}!= " "{%e,%e,%e,%e}\n", nb, freq_re[nb], freq_im[nb], real(amp[nb]), imag(amp[nb]), ref_freq_re[nb], diff --git a/tests/symmetry.cpp b/tests/symmetry.cpp index 4997c38ba..4e8f6a6dd 100644 --- a/tests/symmetry.cpp +++ b/tests/symmetry.cpp @@ -56,9 +56,7 @@ int compare(double a, double b, const char *n) { master_printf("This gives a fractional error of %g\n", fabs(a - b) / fabs(b)); return 0; } - else { - return 1; - } + else { return 1; } } int compare_point(fields &f1, fields &f2, const vec &p) { @@ -978,7 +976,8 @@ int main(int argc, char **argv) { if (!nonlinear_ex(vol1d(1.0, 30.0), one)) meep::abort("error in 1D nonlinear vacuum\n"); if (sizeof(realnum) == sizeof(double)) { - if (!nonlinear_ex(vol3d(1.0, 1.2, 0.8, 10.0), one)) meep::abort("error in 3D nonlinear vacuum\n"); + if (!nonlinear_ex(vol3d(1.0, 1.2, 0.8, 10.0), one)) + meep::abort("error in 3D nonlinear vacuum\n"); } // disable for parallel runs due to a bug in splitting cylindrical cell @@ -986,7 +985,8 @@ int main(int argc, char **argv) { if ((count_processors() == 1) && (!test_cyl_metal_mirror_nonlinear(one))) meep::abort("error in test_cyl_metal_mirror nonlinear vacuum\n"); - if (!exact_metal_rot4z_nonlinear(one)) meep::abort("error in exact_metal_rot4z nonlinear vacuum\n"); + if (!exact_metal_rot4z_nonlinear(one)) + meep::abort("error in exact_metal_rot4z nonlinear vacuum\n"); if (!exact_metal_rot4z_nonlinear(rods_2d)) meep::abort("error in exact_metal_rot4z nonlinear rods_2d\n"); diff --git a/tests/three_d.cpp b/tests/three_d.cpp index 428635ab6..3155ac028 100644 --- a/tests/three_d.cpp +++ b/tests/three_d.cpp @@ -45,9 +45,7 @@ int compare(double a, double b, const char *n) { master_printf("This gives a fractional error of %g\n", fabs(a - b) / fabs(b)); return 0; } - else { - return 1; - } + else { return 1; } } int compare_point(fields &f1, fields &f2, const vec &p) { diff --git a/tests/two_dimensional.cpp b/tests/two_dimensional.cpp index f6f62c0aa..cab79303a 100644 --- a/tests/two_dimensional.cpp +++ b/tests/two_dimensional.cpp @@ -45,9 +45,7 @@ int compare(double a, double b, const char *n) { master_printf("This gives a fractional error of %g\n", fabs(a - b) / fabs(b)); return 0; } - else { - return 1; - } + else { return 1; } } int compare_point(fields &f1, fields &f2, const vec &p) { @@ -221,9 +219,7 @@ int test_pml(double eps(const vec &), int splitting) { new_energy / last_energy); return 0; } - else { - master_printf("Got newE/oldE of %g\n", new_energy / last_energy); - } + else { master_printf("Got newE/oldE of %g\n", new_energy / last_energy); } field_energy_check_time += deltaT; } } @@ -266,9 +262,7 @@ int test_pml_tm(double eps(const vec &), int splitting) { new_energy / last_energy); return 0; } - else { - master_printf("Got newE/oldE of %g\n", new_energy / last_energy); - } + else { master_printf("Got newE/oldE of %g\n", new_energy / last_energy); } field_energy_check_time += deltaT; } } @@ -313,9 +307,7 @@ int test_pml_te(double eps(const vec &), int splitting) { new_energy / last_energy); return 0; } - else { - master_printf("Got newE/oldE of %g\n", new_energy / last_energy); - } + else { master_printf("Got newE/oldE of %g\n", new_energy / last_energy); } field_energy_check_time += deltaT; } } diff --git a/tests/user-defined-material.cpp b/tests/user-defined-material.cpp index 681357e43..0080ad2da 100644 --- a/tests/user-defined-material.cpp +++ b/tests/user-defined-material.cpp @@ -54,13 +54,15 @@ bool compare_hdf5_datasets(const char *file1, const char *name1, const char *fil h5file f1(file1, h5file::READONLY, false); int rank1; size_t *dims1 = new size_t[expected_rank]; - realnum *data1 = (realnum *)f1.read(name1, &rank1, dims1, expected_rank, sizeof(realnum) == sizeof(float)); + realnum *data1 = + (realnum *)f1.read(name1, &rank1, dims1, expected_rank, sizeof(realnum) == sizeof(float)); if (!data1) return false; h5file f2(file2, h5file::READONLY, false); int rank2; size_t *dims2 = new size_t[expected_rank]; - realnum *data2 = (realnum *)f2.read(name2, &rank2, dims2, expected_rank, sizeof(realnum) == sizeof(float)); + realnum *data2 = + (realnum *)f2.read(name2, &rank2, dims2, expected_rank, sizeof(realnum) == sizeof(float)); if (!data2) return false; if (rank1 != expected_rank || rank2 != expected_rank) return false;