How do I create an adjoint parameterized level set optimization?

How do I create an adjoint parameterized level set optimization?#

Date

Category

2023-12-21 22:43:05

Inverse Design

To create an adjoint parameterized level set-based optimization setup, you should use the design parameters as the control knots of a level set surface. Then, create a tidy3d.plugins.adjoint.JaxCustomMedium and set the permittivity values based on the zero level isocontour obtained from the level set surface. After that, you need to include it in a tidy3d.plugins.adjoint.JaxStructure. Be sure of adding the adjoint structures in the .input_structures parameter of the tidy3d.plugins.adjoint.JaxSimulation object. In addition, you must specify an adjoint compatible monitor in .output_monitors, that defines the set of monitors and corresponding data that the objective function will depend on.​​​​Once the adjoint simulation is defined, you must use the tidy3d.plugins.adjoint.web.run method to send the simulation set up to our servers. After computing the forward and adjoint simulations, a tidy3d.plugins.adjoint.JaxSimulationData is returned, so you can compute the objective function value.

Lastly, use jax.value_and_grad to both compute the objective function and the gradient with respect to the design parameters. The objective function gradients can then feed a gradient-based optimization algorithm to drive the inverse design process.

We highly recommend watching the Inverse Design lectures if you are new to the adjoint method. You can also go through this tutorial for an example on adjoint level set optimization.