Meep contains a density-based adjoint solver for efficiently computing the gradient of an objective function with respect to on a discrete spatial grid in a subregion of the cell (i.e., a
MaterialGrid class object). Regardless of the number of degrees of freedom for the grid points, just two separate timestepping runs are required. The first run is the "forward" calculation to compute the objective function. The second run is the "adjoint" calculation which involves a special type of source distribution and postprocessing applied to the results. This module is implemented entirely in Python using autograd and does not involve modifications to the C++
libmeep core library. At a higher level, the module implements functionality for wrapping a numerical optimizer around the gradient computation to enable automated design optimization.
Six Jupyter notebooks that demonstrate usage of the adjoint solver are available:
More documentation will be available soon.