Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

get_eigenmode_coefficients omits half of all necessary modes for asymmetric grating and normally-incident planewave #544

Closed
oskooi opened this issue Oct 4, 2018 · 4 comments

Comments

@oskooi
Copy link
Collaborator

oskooi commented Oct 4, 2018

As a variation of the binary grating tutorial example in the documentation, it turns out that an asymmetric grating with a normally-incident planewave source has an eig_parity parameter for get_eigenmode_coefficients which unwantedly removes half of all the necessary mode coefficients.

This is demonstrated for an example grating shown below. get_eigenmode_coefficients is used for the two mode monitors to compute the reflectance and transmittance of all diffracted orders. An Ez-polarized planewave source at normal incidence has eig_parity=mp.ODD_Z+mp.EVEN_Y. This is necessary to remove the degeneracy in the y-direction by forcing MPB to compute only the +ky + -ky (cosine) mode. However, this particular eig_parity condition also results in MPB computing only those modes where the sign of its ky is a constant (either positive or negative, but not both; in tests, the y-component of the dominant wavevector is always negative). This effectively causes get_eigenmode_coefficients to omit half of all the necessary mode coefficients.

slanted_grating

@oskooi
Copy link
Collaborator Author

oskooi commented Oct 4, 2018

Actually, since the source and the structure do not have symmetry in the y-direction, neither can the eig_parity. Using just eig_parity=mp.ODD_Z resolves the issue.

@oskooi oskooi closed this as completed Oct 4, 2018
@soamaven
Copy link
Contributor

soamaven commented Oct 4, 2018

Not sure if this requires a separate issue. What should one do when using the eigen_mode_monitor in 3D? Usually, I would inject a planewave along mp.Z (It's just the natural way I think of things.) One can specify similar parities in Y, but there should be some X parity, no? I just retreated to always injecting along the x-axis.

@oskooi
Copy link
Collaborator Author

oskooi commented Oct 4, 2018

As it turns out, we are currently working on adding support for X parity in MPB (see NanoComp/mpb#74).

@stevengj
Copy link
Collaborator

stevengj commented Oct 9, 2018

Note that this structure couples even input to both even and odd output modes. If you don't want to get these two mixed together, the best thing to do would be to add two mode monitors, one for EVEN_Y and the other for ODD_Y.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants