Fabrication-Aware Inverse Design
The October 9, 2025 seminar walks through a complete dual-layer grating coupler workflow: start from a uniform baseline, pull a strong seed design with Bayesian optimization, switch to adjoint gradients for per-tooth control, study fabrication sensitivities, and close the loop with measurement-driven calibration. Everything runs inside Tidy3D, so you can rerun the exact same jobs or adapt the utilities to your own device stack.
Archived seminar material. These saved outputs were produced with Tidy3D 2.9.1
Notebook Lineup
Setup Guide: Building the Simulation
Builds the nominal SiN stack, launches the reference simulation, and visualizes the initial geometry so the later notebooks can reuse the cached job ID.
Bayesian Optimization: Finding a Strong Baseline
Uses a five-parameter Bayesian search to quickly find a good uniform grating. This provides a practical baseline before investing in gradients.
Adjoint Optimization: High-Dimensional Refinement
Expands to per-tooth parameters and applies Adam with adjoint sensitivities to apodize the grating and boost efficiency.
Fabrication Sensitivity Analysis: Is Our Design Robust?
Sweeps ±20 nm etch bias, runs Monte Carlo samples, and logs adjoint-derived sensitivity units (Δ objective / Δ parameter) so readers understand what the gradients mean physically.
Robust Adjoint Optimization for Manufacturability
Penalizes variance across nominal/over/under corners, illustrating a fabrication-aware adjoint loop that matches what we demoed live.
Monte Carlo View: Nominal vs Robust Grating
Reruns the Monte Carlo campaign for both nominal and robust devices to quantify yield improvements.
Measurement Calibration: Bridging Simulation and Fabrication
Demonstrates gradient-based calibration of tooth widths against (synthetic) spectra, using adjoint sensitivities to recover the as-fabricated geometry from optical measurements.
Getting the Code
Use the .ipynb download button on each notebook page. You will also need the helper scripts setup.py and optim.py plus the result checkpoints linked below.
How to Run the Series
- Install
tidy3dandbayesian-optimization(pip install tidy3d bayesian-optimization) and configure your API key. - Execute the notebooks in order; each step writes results into
results/and later notebooks assume those JSON files exist.
Supporting Assets
- setup.py — shared simulation builders, fabrication constraints, and helper functions.
- optim.py — a lightweight, autograd-friendly Adam implementation with parameter clipping.
results/— Bayesian seed, adjoint design, and robust design checkpoints consumed by subsequent notebooks.
