From c844fd80e86ea8fbcc161dfc87be7c5d8057dd28 Mon Sep 17 00:00:00 2001 From: Ardavan Oskooi Date: Thu, 6 Feb 2020 13:03:43 -0800 Subject: [PATCH] additional docs for planewave sources and finite gratings (#1116) * additional docs for planewave sources and finite gratings * update copyright year --- COPYRIGHT | 2 +- doc/docs/FAQ.md | 8 +++++--- .../Cylindrical_Coordinates.md | 10 +++++++--- .../Near_to_Far_Field_Spectra.md | 18 +++++++++--------- .../Cylindrical_Coordinates.md | 11 ++++++++--- .../Near_to_Far_Field_Spectra.md | 10 +++++----- doc/docs/images/zone_plate_schematic.png | Bin 21903 -> 21882 bytes python/examples/antenna-radiation.py | 16 ++++++++-------- python/examples/zone_plate.py | 4 +++- python/typemap_utils.cpp | 2 +- scheme/examples/antenna-radiation.ctl | 8 ++++---- scheme/examples/zone-plate.ctl | 3 ++- src/GDSIIgeom.cpp | 2 +- src/array_slice.cpp | 2 +- src/bands.cpp | 2 +- src/bicgstab.cpp | 2 +- src/bicgstab.hpp | 2 +- src/boundaries.cpp | 2 +- src/casimir.cpp | 2 +- src/control_c.cpp | 2 +- src/cw_fields.cpp | 2 +- src/dft.cpp | 2 +- src/dft_ldos.cpp | 2 +- src/energy_and_flux.cpp | 2 +- src/fields.cpp | 2 +- src/h5fields.cpp | 2 +- src/h5file.cpp | 2 +- src/initialize.cpp | 2 +- src/integrate.cpp | 2 +- src/integrate2.cpp | 2 +- src/loop_in_chunks.cpp | 2 +- src/material_data.hpp | 2 +- src/meep.hpp | 2 +- src/meep/mympi.hpp | 2 +- src/meep/vec.hpp | 2 +- src/meep_internals.hpp | 2 +- src/meepgeom.cpp | 2 +- src/meepgeom.hpp | 2 +- src/monitor.cpp | 2 +- src/mpb.cpp | 2 +- src/multilevel-atom.cpp | 2 +- src/mympi.cpp | 2 +- src/near2far.cpp | 2 +- src/output_directory.cpp | 2 +- src/random.cpp | 2 +- src/sources.cpp | 2 +- src/sphere-quad.cpp | 2 +- src/step.cpp | 2 +- src/step_db.cpp | 2 +- src/stress.cpp | 2 +- src/structure.cpp | 2 +- src/structure_dump.cpp | 2 +- src/susceptibility.cpp | 2 +- src/time.cpp | 2 +- src/update_eh.cpp | 2 +- src/update_pols.cpp | 2 +- src/vec.cpp | 2 +- tests/aniso_disp.cpp | 2 +- tests/bench.cpp | 2 +- tests/bragg_transmission.cpp | 2 +- tests/cylindrical.cpp | 2 +- tests/flux.cpp | 2 +- tests/harmonics.cpp | 2 +- tests/integrate.cpp | 2 +- tests/known_results.cpp | 2 +- tests/near2far.cpp | 2 +- tests/one_dimensional.cpp | 2 +- tests/physical.cpp | 2 +- tests/symmetry.cpp | 2 +- tests/three_d.cpp | 2 +- tests/two_dimensional.cpp | 2 +- 71 files changed, 112 insertions(+), 98 deletions(-) diff --git a/COPYRIGHT b/COPYRIGHT index 3f1f03253..44e280b5c 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2019 Massachusetts Institute of Technology. +/* Copyright (C) 2005-2020 Massachusetts Institute of Technology. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/doc/docs/FAQ.md b/doc/docs/FAQ.md index d5ebbb481..40eb76e05 100644 --- a/doc/docs/FAQ.md +++ b/doc/docs/FAQ.md @@ -130,11 +130,13 @@ Usage: Sources ### How do I create an oblique planewave source? -An arbitrary-angle planewave can be generated in two different ways: (1) by setting the amplitude function [`amp_func`](Python_User_Interface.md#source) of a 1d/line source for a 2d cell or 2d/planar source for a 3d cell, or (2) via the [EigenModeSource](Python_User_Interface.md#eigenmodesource). Bloch-periodic boundary condition via the `k_point` is necessary in order to create an infinitely-extended planewave. Note that for a pulsed source (unlike a continuous wave), each frequency component produces a planewave at a specific angle, with a different angle for each frequency component. +An arbitrary-angle planewave with wavevector $\vec{k}$ can be generated in two different ways: (1) by setting the amplitude function [`amp_func`](Python_User_Interface.md#source) to $exp(i\vec{k}\cdot\vec{r})$ for a $d-1$ dimensional source in a $d$ dimensional cell (i.e., line source in 2d, planar source in 3d), or (2) via the [eigenmode source](Python_User_Interface.md#eigenmodesource). These two approaches generate **identical** planewaves with the only difference being that the planewave produced by the eigenmode source is unidirectional. In both cases, generating an infinitely-extended planewave requires that: (1) the source span the *entire* length of the cell and (2) the Bloch-periodic boundary condition `k_point` be set to $\vec{k}$. -The first approach involving `amp_func` is based on the principle that just as you can create a directional antenna by a [phased array](https://en.wikipedia.org/wiki/Phased_array), you can create a directional source by setting the phase of the current appropriately. For a 1d example, see [Tutorial/Basics](Python_Tutorials/Basics.md#angular-reflectance-spectrum-of-a-planar-interface) ([Scheme version](Scheme_Tutorials/Basics.md#angular-reflectance-spectrum-of-a-planar-interface)). For 2d, see [Tutorial/Mode Decomposition](Python_Tutorials/Mode_Decomposition.md#reflectance-and-transmittance-spectra-for-planewave-at-oblique-incidence) ([Scheme version](Scheme_Tutorials/Mode_Decomposition.md#reflectance-and-transmittance-spectra-for-planewave-at-oblique-incidence)) as well as [examples/pw-source.py](https://github.com/NanoComp/meep/blob/master/python/examples/pw-source.py) ([Scheme version](https://github.com/NanoComp/meep/blob/master/scheme/examples/pw-source.ctl)). +The first approach involving the amplitude function is based on the principle that just as you can create a directional antenna by a [phased array](https://en.wikipedia.org/wiki/Phased_array), you can create a directional source by setting the phase of the current appropriately. Alternatively, by specifiying the wavevector of the fields in $d-1$ directions of a $d$-dimensional cell, the wavevector in the remaining direction is automatically defined by the frequency $\omega$ via the dispersion relation for a planewave in homogeneous medium with index $n$: $\omega = c|\vec{k}|/n$. Note that for a pulsed source (unlike a continuous wave), each frequency component produces a planewave at a *different* angle. Also, the fields do *not* have to be complex (which would double the storage requirements). -For an example of the second approach, see [Tutorial/Eigenmode Source](Python_Tutorials/Eigenmode_Source.md#planewaves-in-homogeneous-media) ([Scheme version](Scheme_Tutorials/Eigenmode_Source.md#planewaves-in-homogeneous-media)). +For an example of the first approach in 1d, see [Tutorial/Basics/Angular Reflectance of a Planar Interface](Python_Tutorials/Basics.md#angular-reflectance-spectrum-of-a-planar-interface) ([Scheme version](Scheme_Tutorials/Basics.md#angular-reflectance-spectrum-of-a-planar-interface)). For 2d, see [Tutorial/Mode Decomposition/Reflectance and Transmittance Spectra for Planewave at Oblique Incidence](Python_Tutorials/Mode_Decomposition.md#reflectance-and-transmittance-spectra-for-planewave-at-oblique-incidence) ([Scheme version](Scheme_Tutorials/Mode_Decomposition.md#reflectance-and-transmittance-spectra-for-planewave-at-oblique-incidence)) as well as [examples/pw-source.py](https://github.com/NanoComp/meep/blob/master/python/examples/pw-source.py) ([Scheme version](https://github.com/NanoComp/meep/blob/master/scheme/examples/pw-source.ctl)). + +For an example of the second approach, see [Tutorial/Eigenmode Source/Planewaves in Homogeneous Media](Python_Tutorials/Eigenmode_Source.md#planewaves-in-homogeneous-media) ([Scheme version](Scheme_Tutorials/Eigenmode_Source.md#planewaves-in-homogeneous-media)). ### How do I create a focused beam with a Gaussian envelope? diff --git a/doc/docs/Python_Tutorials/Cylindrical_Coordinates.md b/doc/docs/Python_Tutorials/Cylindrical_Coordinates.md index 81f87cd08..6f558196f 100644 --- a/doc/docs/Python_Tutorials/Cylindrical_Coordinates.md +++ b/doc/docs/Python_Tutorials/Cylindrical_Coordinates.md @@ -339,7 +339,9 @@ The calculation of the scattering cross section is described in [Tutorial/Basics $$ \hat{E}_x = \frac{1}{2} \left[e^{i\phi}(\hat{E}_\rho + i\hat{E}_\phi) + e^{-i\phi}(\hat{E}_\rho - i\hat{E}_\phi)\right] $$ -In practice, this involves performing two separate simulations for $m=\pm 1$. The scattered power from each simulation is then simply summed since the cross term in the total Poynting flux cancels for the different $m$ values when integrated over the $\phi$ direction. However, in the case of a material with isotropic permittivity, only one of the two simulations is necessary: the scattered power is the same for $m=\pm 1$ due to the mirror symmetry of the structure. A chiral material based on an anisotropic permittivity with principle axes not aligned with the coordinates axes breaks the mirror symmetry and thus would require two separate simulations. (Note that a linearly-polarized planewave is *not* $m=0$, which corresponds to a field pattern that is *invariant* under rotations similar to [TE01/TM01 modes](https://en.wikipedia.org/wiki/Transverse_mode). A linear polarization is the superposition of left and right circularly-polarized waves ($m=\pm 1$) and is *not* rotationally invariant; it flips sign if it is rotated by 180°.) +(Note: a $y$-polarized planewave involves subtracting rather than adding the two terms above.) + +In practice, this involves performing *two* separate simulations for $m=\pm 1$. The scattered power from each simulation is then simply summed since the cross term in the total Poynting flux cancels for the different $m$ values when integrated over the $\phi$ direction. However, in the case of a material with isotropic permittivity, only one of the two simulations is necessary: the scattered power is the same for $m=\pm 1$ due to the mirror symmetry of the structure. A chiral material based on an anisotropic permittivity with principle axes not aligned with the coordinates axes breaks the mirror symmetry and thus would require two separate simulations. (Note that a linearly-polarized planewave is *not* $m=0$, which corresponds to a field pattern that is *invariant* under rotations similar to [TE01/TM01 modes](https://en.wikipedia.org/wiki/Transverse_mode). A linear polarization is the superposition of left and right circularly-polarized waves ($m=\pm 1$) and is *not* rotationally invariant; it flips sign if it is rotated by 180°.) The simulation script is in [examples/cylinder_cross_section.py](https://github.com/NanoComp/meep/blob/master/python/examples/cylinder_cross_section.py). The notebook is [examples/cylinder_cross_section.ipynb](https://nbviewer.jupyter.org/github/NanoComp/meep/blob/master/python/examples/cylinder_cross_section.ipynb). @@ -465,7 +467,7 @@ Using [scalar theory](http://zoneplate.lbl.gov/theory), the radius of the $n$ -where $n$ is the zone index (1,2,3,...,$N$), $f$ is the focal length, and $\lambda$ is the operating wavelength. The main design variable is the number of zones $N$. The design specifications of the zone plate are similar to the binary-phase grating in [Tutorial/Mode Decomposition/Diffraction Spectrum of a Binary Grating](Mode_Decomposition.md#diffraction-spectrum-of-a-binary-grating) with refractive index of 1.5 (glass), $\lambda$ of 0.5 μm, and height of 0.5 μm. The focusing property of the zone plate is verified by the concentration of the electric-field energy density at the focal length of 0.2 mm (which lies *outside* the cell). The planewave is incident from within a glass substrate and spans the entire length of the cell in the radial direction. The cell is surrounded on all sides by PML. A schematic of the simulation geometry for a design with 25 zones and flat-surface termination is shown below. The near-field line monitor is positioned at the edge of the PML. +where $n$ is the zone index (1,2,3,...,$N$), $f$ is the focal length, and $\lambda$ is the operating wavelength. The main design variable is the number of zones $N$. The design specifications of the zone plate are similar to the binary-phase grating in [Tutorial/Mode Decomposition/Diffraction Spectrum of a Binary Grating](Mode_Decomposition.md#diffraction-spectrum-of-a-binary-grating) with refractive index of 1.5 (glass), $\lambda$ of 0.5 μm, and height of 0.5 μm. The focusing property of the zone plate is verified by the concentration of the electric-field energy density at the focal length of 0.2 mm (which lies *outside* the cell). The planewave is incident from within a glass substrate and spans the entire length of the cell in the radial direction. The cell is surrounded on all sides by PML. A schematic of the simulation geometry for a design with 25 zones and flat-surface termination is shown below. The near-field monitor is positioned at the edge of the PML and captures the scattered fields in *all* directions.
![](../images/zone_plate_schematic.png) @@ -534,7 +536,9 @@ sim = mp.Simulation(cell_size=cell_size, 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))) +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-0.5*(dsub+zh+dpad)),size=mp.Vector3(z=dsub+zh+dpad))) sim.run(until_after_sources=100) diff --git a/doc/docs/Python_Tutorials/Near_to_Far_Field_Spectra.md b/doc/docs/Python_Tutorials/Near_to_Far_Field_Spectra.md index c9b5c6fdc..c0ec78815 100644 --- a/doc/docs/Python_Tutorials/Near_to_Far_Field_Spectra.md +++ b/doc/docs/Python_Tutorials/Near_to_Far_Field_Spectra.md @@ -59,16 +59,16 @@ sim = mp.Simulation(cell_size=cell, 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)) + mp.Near2FarRegion(center=mp.Vector3(0,+0.5*sxy), size=mp.Vector3(sxy,0), weight=+1), + 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), weight=+1), + 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(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)) + mp.FluxRegion(center=mp.Vector3(0,+0.5*sxy), size=mp.Vector3(sxy,0), weight=+1), + 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), weight=+1), + mp.FluxRegion(center=mp.Vector3(-0.5*sxy,0), size=mp.Vector3(0,sxy), weight=-1)) sim.run(until_after_sources=mp.stop_when_fields_decayed(50, src_cmpt, mp.Vector3(), 1e-8)) ``` @@ -688,7 +688,7 @@ The scattered field amplitude profile (the top figure in each of the two sets of The sharpness of the peaks directly corresponds to how [collimated](https://en.wikipedia.org/wiki/Collimated_beam) the diffracted beams are, and in the limit of infinitely many periods the resulting delta-function peaks correspond to diffracted planewaves. (The squared amplitude of each peak is proportional to the power in the corresponding diffraction order.) One can also obtain the collimation of the beams more directly by using Meep's `near2far` feature to compute the far-field diffracted waves — this approach is more straightforward, but potentially much more expensive than looking at the Fourier transform of the near field, because one may need a large number of far-field points to resolve the full diffracted beams. In general, [there is a tradeoff in computational science](https://icerm.brown.edu/video_archive/?play=1626) between doing direct "numerical experiments" that are conceptually straightforward but often expensive, versus more indirect and tricky calculations that don't directly correspond to laboratory experiments but which can sometimes be vastly more efficient at extracting physical information. -In 3d, the procedure is very similar, but a little more effort is required to disentangle the two polarizations relative to the plane of incidence [the (z,**k**) plane for each Fourier component **k**]. For propagation in the $z$ direction, you would Fourier transform both $E_x$ and $E_y$ of the scattered field as a function of **k** $= (k_x, k_y)$. For each **k**, you decompose the corresponding **E** $= (E_x, E_y)$ into the amplitude parallel to **k** [which gives the *p* polarization amplitude if you multiply by sec(θ), where sin(θ)=|**k**|/(nω/c), n is the refractive index of the ambient medium, and ω is the angular frequency; θ is the outgoing angle, where θ=0 is normal] and perpendicular to **k** [which equals the *s* polarization amplitude]. Then square these amplitudes to get something proportional to power as above. (Note that this analysis is the same even if the incident wave is at an oblique angle, although the **k** locations of the diffraction peaks will change.) +In 3d, the procedure is very similar, but a little more effort is required to disentangle the two polarizations relative to the plane of incidence [the (z,**k**) plane for each Fourier component **k**]. For propagation in the $z$ direction, you would Fourier transform both $E_x$ and $E_y$ of the scattered field as a function of **k** $= (k_x, k_y)$. For each **k**, you decompose the corresponding **E** $= (E_x, E_y)$ into the amplitude parallel to **k** [which gives the *p* polarization amplitude if you multiply by sec(θ), where sin(θ)=|**k**|/(nω/c), n is the refractive index of the ambient medium, and ω is the angular frequency; θ is the outgoing angle, where θ=0 is normal] and perpendicular to **k** [which equals the *s* polarization amplitude]. Then square these amplitudes to get something proportional to power as above. (Note that this analysis is the same even if the incident wave is at an oblique angle, although the **k** locations of the diffraction peaks will change.) Simulating large finite gratings is usually unnecessary since the accuracy improvements are negligible. For example, a 3d simulation of a finite grating with e.g. 100 periods by 100 periods which is computationally expensive would only provide a tiny correction of ~1% (on par with fabrication errors) compared to the infinite structure involving a single unit cell. A finite grating with a small number of periods (e.g., 5 or 10) exhibits weak diffractive effects and is therefore not considered a diffractive grating. Far-Field Profile of a Cavity ----------------------------- diff --git a/doc/docs/Scheme_Tutorials/Cylindrical_Coordinates.md b/doc/docs/Scheme_Tutorials/Cylindrical_Coordinates.md index ccc23daf3..a15d15f1c 100644 --- a/doc/docs/Scheme_Tutorials/Cylindrical_Coordinates.md +++ b/doc/docs/Scheme_Tutorials/Cylindrical_Coordinates.md @@ -291,7 +291,9 @@ The calculation of the scattering cross section is described in [Tutorial/Basics $$ \hat{E}_x = \frac{1}{2} \left[e^{i\phi}(\hat{E}_\rho + i\hat{E}_\phi) + e^{-i\phi}(\hat{E}_\rho - i\hat{E}_\phi)\right] $$
-In practice, this involves performing two separate simulations for $m=\pm 1$. The scattered power from each simulation is then simply summed since the cross term in the total Poynting flux cancels for the different $m$ values when integrated over the $\phi$ direction. However, in the case of a material with isotropic permittivity, only one of the two simulations is necessary: the scattered power is the same for $m=\pm 1$ due to the mirror symmetry of the structure. A chiral material based on an anisotropic permittivity with principle axes not aligned with the coordinates axes breaks the mirror symmetry and thus would require two separate simulations. (Note that a linearly-polarized planewave is *not* $m=0$, which corresponds to a field pattern that is *invariant* under rotations similar to [TE01/TM01 modes](https://en.wikipedia.org/wiki/Transverse_mode). A linear polarization is the superposition of left and right circularly-polarized waves ($m=\pm 1$) and is *not* rotationally invariant; it flips sign if it is rotated by 180°.) +(Note: a $y$-polarized planewave involves subtracting rather than adding the two terms above.) + +In practice, this involves performing *two* separate simulations for $m=\pm 1$. The scattered power from each simulation is then simply summed since the cross term in the total Poynting flux cancels for the different $m$ values when integrated over the $\phi$ direction. However, in the case of a material with isotropic permittivity, only one of the two simulations is necessary: the scattered power is the same for $m=\pm 1$ due to the mirror symmetry of the structure. A chiral material based on an anisotropic permittivity with principle axes not aligned with the coordinates axes breaks the mirror symmetry and thus would require two separate simulations. (Note that a linearly-polarized planewave is *not* $m=0$, which corresponds to a field pattern that is *invariant* under rotations similar to [TE01/TM01 modes](https://en.wikipedia.org/wiki/Transverse_mode). A linear polarization is the superposition of left and right circularly-polarized waves ($m=\pm 1$) and is *not* rotationally invariant; it flips sign if it is rotated by 180°.) The simulation script is in [examples/cylinder-cross-section.ctl](https://github.com/NanoComp/meep/blob/master/scheme/examples/cylinder-cross-section.ctl). @@ -439,7 +441,7 @@ $$ r_n^2 = n\lambda (f+\frac{n\lambda}{4})$$ -where $n$ is the zone index (1,2,3,...,$N$), $f$ is the focal length, and $\lambda$ is the operating wavelength. The main design variable is the number of zones $N$. The design specifications of the zone plate are similar to the binary-phase grating in [Tutorial/Mode Decomposition/Diffraction Spectrum of a Binary Grating](Mode_Decomposition.md#diffraction-spectrum-of-a-binary-grating) with refractive index of 1.5 (glass), $\lambda$ of 0.5 μm, and height of 0.5 μm. The focusing property of the zone plate is verified by the concentration of the electric-field energy density at the focal length of 0.2 mm (which lies *outside* the cell). The planewave is incident from within a glass substrate and spans the entire length of the cell in the radial direction. The cell is surrounded on all sides by PML. A schematic of the simulation geometry for a design with 25 zones and flat-surface termination is shown below. The near-field line monitor is positioned at the edge of the PML. +where $n$ is the zone index (1,2,3,...,$N$), $f$ is the focal length, and $\lambda$ is the operating wavelength. The main design variable is the number of zones $N$. The design specifications of the zone plate are similar to the binary-phase grating in [Tutorial/Mode Decomposition/Diffraction Spectrum of a Binary Grating](Mode_Decomposition.md#diffraction-spectrum-of-a-binary-grating) with refractive index of 1.5 (glass), $\lambda$ of 0.5 μm, and height of 0.5 μm. The focusing property of the zone plate is verified by the concentration of the electric-field energy density at the focal length of 0.2 mm (which lies *outside* the cell). The planewave is incident from within a glass substrate and spans the entire length of the cell in the radial direction. The cell is surrounded on all sides by PML. A schematic of the simulation geometry for a design with 25 zones and flat-surface termination is shown below. The near-field monitor is positioned at the edge of the PML and captures the scattered fields in *all* directions.
![](../images/zone_plate_schematic.png) @@ -503,8 +505,11 @@ The simulation script is in [examples/zone-plate.ctl](https://github.com/NanoCom (center (* 0.5 (list-ref r n)) 0 (+ (* -0.5 sz) dpml dsub (* 0.5 zh))))) (reverse (arith-sequence 0 1 zN))))) + +;; near-field monitor (define n2f-obj (add-near2far frq-cen 0 1 - (make near2far-region (center (* 0.5 (- sr dpml)) 0 (- (* 0.5 sz) dpml)) (size (- sr dpml) 0 0)))) + (make near2far-region (center (* 0.5 (- sr dpml)) 0 (- (* 0.5 sz) dpml)) (size (- sr dpml) 0 0)) + (make near2far-region (center (- sr dpml) 0 (- (* 0.5 sz) (* 0.5 (+ dsub zh dpad)))) (size 0 0 (+ dsub zh dpad))))) (run-sources+ 100) diff --git a/doc/docs/Scheme_Tutorials/Near_to_Far_Field_Spectra.md b/doc/docs/Scheme_Tutorials/Near_to_Far_Field_Spectra.md index 670db65ef..74e25455b 100644 --- a/doc/docs/Scheme_Tutorials/Near_to_Far_Field_Spectra.md +++ b/doc/docs/Scheme_Tutorials/Near_to_Far_Field_Spectra.md @@ -50,16 +50,16 @@ The simulation script is in [examples/antenna-radiation.ctl](https://github.com/ (define nearfield-box (add-near2far fcen 0 1 - (make near2far-region (center 0 (* 0.5 sxy)) (size sxy 0)) + (make near2far-region (center 0 (* +0.5 sxy)) (size sxy 0) (weight +1)) (make near2far-region (center 0 (* -0.5 sxy)) (size sxy 0) (weight -1)) - (make near2far-region (center (* 0.5 sxy) 0) (size 0 sxy)) + (make near2far-region (center (* +0.5 sxy) 0) (size 0 sxy) (weight +1)) (make near2far-region (center (* -0.5 sxy) 0) (size 0 sxy) (weight -1)))) (define flux-box (add-flux fcen 0 1 - (make flux-region (center 0 (* 0.5 sxy)) (size sxy 0)) + (make flux-region (center 0 (* +0.5 sxy)) (size sxy 0) (weight +1)) (make flux-region (center 0 (* -0.5 sxy)) (size sxy 0) (weight -1)) - (make flux-region (center (* 0.5 sxy) 0) (size 0 sxy)) + (make flux-region (center (* +0.5 sxy) 0) (size 0 sxy) (weight +1)) (make flux-region (center (* -0.5 sxy) 0) (size 0 sxy) (weight -1)))) (run-sources+ (stop-when-fields-decayed 50 src-cmpt (vector3 0 0) 1e-8)) @@ -754,7 +754,7 @@ The scattered field amplitude profile (the top figure in each of the two sets of The sharpness of the peaks directly corresponds to how [collimated](https://en.wikipedia.org/wiki/Collimated_beam) the diffracted beams are, and in the limit of infinitely many periods the resulting delta-function peaks correspond to diffracted planewaves. (The squared amplitude of each peak is proportional to the power in the corresponding diffraction order.) One can also obtain the collimation of the beams more directly by using Meep's `near2far` feature to compute the far-field diffracted waves — this approach is more straightforward, but potentially much more expensive than looking at the Fourier transform of the near field, because one may need a large number of far-field points to resolve the full diffracted beams. In general, [there is a tradeoff in computational science](https://icerm.brown.edu/video_archive/?play=1626) between doing direct "numerical experiments" that are conceptually straightforward but often expensive, versus more indirect and tricky calculations that don't directly correspond to laboratory experiments but which can sometimes be vastly more efficient at extracting physical information. -In 3d, the procedure is very similar, but a little more effort is required to disentangle the two polarizations relative to the plane of incidence [the (z,**k**) plane for each Fourier component **k**]. For propagation in the $z$ direction, you would Fourier transform both $E_x$ and $E_y$ of the scattered field as a function of **k** $= (k_x, k_y)$. For each **k**, you decompose the corresponding **E** $= (E_x, E_y)$ into the amplitude parallel to **k** [which gives the *p* polarization amplitude if you multiply by csc(θ), where cos(θ)=|**k**|/(nω/c), n is the refractive index of the ambient medium, and ω is the angular frequency] and perpendicular to **k** [which equals the *s* polarization amplitude]. Then square these amplitudes to get something proportional to power as above. (Note that this analysis is the same even if the incident wave is at an oblique angle, although the **k** locations of the diffraction peaks will change.) +In 3d, the procedure is very similar, but a little more effort is required to disentangle the two polarizations relative to the plane of incidence [the (z,**k**) plane for each Fourier component **k**]. For propagation in the $z$ direction, you would Fourier transform both $E_x$ and $E_y$ of the scattered field as a function of **k** $= (k_x, k_y)$. For each **k**, you decompose the corresponding **E** $= (E_x, E_y)$ into the amplitude parallel to **k** [which gives the *p* polarization amplitude if you multiply by sec(θ), where sin(θ)=|**k**|/(nω/c), n is the refractive index of the ambient medium, and ω is the angular frequency; θ is the outgoing angle, where θ=0 is normal] and perpendicular to **k** [which equals the *s* polarization amplitude]. Then square these amplitudes to get something proportional to power as above. (Note that this analysis is the same even if the incident wave is at an oblique angle, although the **k** locations of the diffraction peaks will change.) Simulating large finite gratings is usually unnecessary since the accuracy improvements are negligible. For example, a 3d simulation of a finite grating with e.g. 100 periods by 100 periods which is computationally expensive would only provide a tiny correction of ~1% (on par with fabrication errors) compared to the infinite structure involving a single unit cell. A finite grating with a small number of periods (e.g., 5 or 10) exhibits weak diffractive effects and is therefore not considered a diffractive grating. Far-Field Profile of a Cavity ----------------------------- diff --git a/doc/docs/images/zone_plate_schematic.png b/doc/docs/images/zone_plate_schematic.png index d63d8abd42e875d515466b0db57440efc26df3a6..f71e85b83c344d8a4dc948a6bc34bba73885d1e9 100644 GIT binary patch literal 21882 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 X=09~uTRW~>uOj|3I*%$li@W