Closed oskooi closed 4 years ago
Just because you don't specify a parity doesn't mean that modes have no polarization — on the contrary, NO_PARITY
means to compute modes with both possible polarizations. The two polarizations can certainly have different mode coefficients.
"z parity", however, is a meaningless way to talk about polarization in this case because kz
breaks the z=0 symmetry: the solutions aren't going to be even/odd in z.
(As usual, however, there is the problem that if you have degeneracies between the two polarizations, then MPB will give two random superpositions.)
eig_parity=mp.NO_PARITY
was used in the script because kz is non-zero. The modes obviously do not have any symmetry in z. Then the question is: what else could explain why 2 modes with the same dominant wavevector produce different values for the mode coefficient?
what else could explain why 2 modes with the same dominant wavevector produce different values for the mode coefficient?
The grating structure breaks the rotational symmetry, so it is correct that it couples differently into two polarizations for the same k.
the sum of the reflectance and transmittance values for all these modes does not equal the Poynting flux values:
I think what is happening here is that, for degenerate modes, MPB is computing a pair of modes that is not power-orthogonal. (It computes modes that are orthogonal in the sense that ∫H₁⋅H₂ = 0, not orthogonal in the Poynting-vector sense.) So, there is a cross term that we are not including when we sum up the mode coefficients squared.
(Note that this only affects the mode calculation in a uniform medium, where there are degeneracies. For something like a waveguide, the modes are non-degenerate and there should be no problem.)
For a 2d cell in x and y with a non-zero kz,
get_eigenmode
seems to be computing an incorrect set of modes. This is demonstrated by the following script.The output shows that the dominant wavevectors of the six modes are not unique and instead come in pairs.
Even though each pair of modes has the same dominant wavevector, they are in fact different modes. This is demonstrated by the following binary-grating example involving
get_eigenmode_coefficients
.The output from this script indicates that each of the duplicated modes produces a different value for the mode coefficients. For example, here are the reflectance values for the first six modes as well as their dominant wavevectors:
Note that the kz value for each mode's dominant wavevector is constant and equivalent to that of the
k_point
(following the bug fix in #602).Since each pair of modes has the same dominant wavevector but produces different values for the mode coefficients, this likely suggests that the parity of each of the two modes is different (i.e.,
EVEN_Z
andODD_Z
). This would be a bug sinceeig_parity=mp.NO_PARITY
in this example. Unfortunately, the parity of the mode cannot be displayed as part of the output inget_eigenmode
when theverbose
flag is set toTrue
.As a result of the incorrect modes computed by
get_eigenmode
, the sum of the reflectance and transmittance values for all these modes does not equal the Poynting flux values: