Meep allows you to take advantage of mirror and rotational symmetries in your problem to reduce the amount of computation and storage required for simulation. The use of symmetry is designed to be transparent: once you specify the symmetry, Meep exploits it as an internal optimization, while everything else about the simulation appears the same as if you didn't specify the symmetry. That is, when you output the structure/geometry or currents/fields it still outputs the entire non-symmetrized cell; you can still call get_field_point
to obtain the fields at any point, etcetera — internally, Meep transforms everything as necessary according to the symmetries to get whatever data is needed.
An important point to understand is that, when you specify a symmetry, it must be obeyed by both the structure/geometry and by the current sources and thus the fields. In particular, the symmetry of the currents/fields will typically require you to specify phase factors associated with the symmetry operations — for example, a mirror plane can either be used for even sources/fields (phase +1) or for odd sources/fields (phase −1).
Meep does not check whether the symmetry is obeyed. If you specify a symmetry that does not preserve your structure/sources, then the results are undefined.
Assuming your structure is symmetric, you might still have discretization effects that slightly break the symmetry. For example, if the width of the computational cell in the direction of a mirror symmetry is not an integer number of pixels, Meep will round the cell width to the nearest pixel, which may slightly break the mirror symmetry. (In such cases, Meep prints: Warning: grid volume is not an integer number of pixels; cell size will be rounded to nearest pixel.) The results will still converge to the correct results as you increase resolution, but at finite resolutions you may observe discretization errors, such as even-symmetry sources coupling slightly to odd-symmetry modes.
For the Python syntax to specify a symmetry, see Python Interface. There are also examples in Tutorial/Basics. For a description of how symmetries are implemented, see Chunks and Symmetry.
[TOC]
Meep supports exploiting several kinds of symmetries:
- Mirror planes through the origin, and normal to the
$x$ /$y$/$z$ axes. - 180° rotational symmetry about the origin, around the
$x$ /$y$/$z$ axes. This is also known as a$C_2$ symmetry, in group theory. This is different from a mirror plane: e.g. as shown in the figure below, the letter "S" has$C_2$ but not mirror symmetry. - 90° (fourfold) rotational symmetry about the origin, around the
$x$ /$y$/$z$ axes. This is also known as a$C_4$ symmetry.
The first two kinds of symmetry each reduce the computational cell (internally) by a factor of two, and the third by a factor of four. If your structure has multiple symmetries, you can combine them arbitrarily. For example, your cell may have two orthogonal mirror planes (e.g. one even and one odd), or it may have four-fold rotational symmetry about the symmetries
of symmetry
objects.
There are also two other kinds of symmetry you can exploit.
When you have a two-dimensional simulation with a wavevector
To exploit
If your structure has cylindrical symmetry (also known as the
To do this, you must set dimensions = mp.CYLINDRICAL
in the Python script, and then the vectors are interpreted as
In a cylindrical simulation, fields can be written in the form of a function of
For examples, see Tutorial/Cylindrical Coordinates.
If the structure has discrete or continuous translational symmetry in some direction, then this is handled in Meep by specifying periodic boundary conditions in that direction. Here, the currents/fields take the form of
For example, to simulate the modes of a uniform waveguide (continuous translational symmetry) in the no-size
(Scheme) in the
In general, it is not sufficient to simply specify the symmetry operations that preserve the structure. When applied to the fields and sources, the symmetry operations in general transform the source/field into itself multiplied by some phase factor.
For example, if you have a mirror plane, then the phase factor is +1 for even fields and −1 for odd fields. For a 90° rotation, values of +1, −1, +i, and −i are typical (where the latter two correspond to "circularly polarized" fields).
As a specific example, suppose the structure is even in
The phase factors are ignored when applying the symmetry to the structure (e.g. to
Technically, the symmetry operations that preserve the structure form the symmetry group. In particular, this is a point group or, if you include translations, the space group of the structure. The phase factors specify the representation of the group that the fields/sources transform as. See also any book on group theory in physics, e.g. Group Theory and Its Applications in Physics by Inui, Tanabe, and Onodera.
One subtlety that arises in specifying the symmetry of the system is that you have to transform the fields appropriately according to their vector nature. In particular, the electric fields and currents transform as vectors, while the magnetic fields and currents transforms as pseudovectors. If you don't keep these things straight, you will be endlessly confused because otherwise it will seem that every field component has a different symmetry.
For example, suppose we have an even (phase=+1) mirror plane through
The magnetic field is less intuitive because pseudovectors are multiplied by an additional factor of −1 under mirror flips or any improper rotation. Thus, for our even