Archived seminar material. These saved outputs were produced with Tidy3D 2.9.1
The robust adjoint design trades a sliver of peak efficiency for tighter fabrication yield. Building on the fabrication-aware optimizer from the previous notebook, we now quantify how much that robustness actually helps under process variation.
This notebook compares the nominal adjoint design against the robustness-optimized variant using a matched Monte Carlo experiment, highlighting the yield benefits of carrying fabrication awareness into the optimization loop.
import jsonfrom pathlib import Pathimport autograd.numpy as npimport matplotlib.pyplot as pltimport pandas as pdimport tidy3d as tdfrom setup import ( center_wavelength, default_spacer_thickness, get_mode_monitor_power, make_simulation,)from tidy3d import web
def linear_to_loss_db(values):"""Convert linear transmission to loss in dB (positive = loss).""" linear = np.clip(np.array(values, dtype=float), 1e-12, None)return-10.0* np.log10(linear)def summarize(center_samples):"""Compute summary statistics in linear and dB scales.""" linear = np.array(center_samples, dtype=float) stats = {"mean_linear": np.mean(linear),"std_linear": np.std(linear, ddof=0),"p10_linear": np.percentile(linear, 10),"p90_linear": np.percentile(linear, 90), } loss_db = linear_to_loss_db(linear) stats.update( {"mean_db": np.mean(loss_db),"p10_db": np.percentile(loss_db, 10),"p90_db": np.percentile(loss_db, 90), } )return stats
summary = {label: summarize(result["samples"]) for label, result in design_results.items()}summary_df = pd.DataFrame(summary).Tsummary_df
mean_linear
std_linear
p10_linear
p90_linear
mean_db
p10_db
p90_db
nominal
0.554774
0.027361
0.517067
0.587782
2.564235
2.307842
2.864534
robust
0.561130
0.028289
0.522749
0.598293
2.514948
2.230860
2.817066
Distribution of Center-Wavelength Loss
Both designs now face identical process draws. The plot below overlays the center wavelength loss distributions in dB. Dashed vertical lines mark the nominal (unperturbed) efficiency for each design.
fig, ax = plt.subplots(figsize=(6, 4))bins ="auto"colors = {"nominal": "tab:blue","robust": "tab:green",}for label, result in design_results.items(): losses_db = linear_to_loss_db(result["samples"]) ax.hist( losses_db, bins=bins, alpha=0.6, label=f"{label.capitalize()} design", color=colors.get(label, None), edgecolor="white", ) nominal_loss = linear_to_loss_db([result["nominal"]])[0] ax.axvline( nominal_loss, color=colors.get(label, None), linestyle="--", linewidth=2, )ax.set_xlabel("Center wavelength loss (dB)")ax.set_ylabel("Sample count")ax.set_title("Monte Carlo comparison at shared perturbations")ax.legend()ax.grid(alpha=0.25)plt.show()
What the numbers say
Both designs were tested under identical Monte Carlo perturbations (N = 100, σₒᵥₑᵣₗₐᵧ = 25 nm, σₛₚₐcₑᵣ = 20 nm, σ_wᵢdₜₕ = 10 nm) and evaluated at the center wavelength.
Results:
Average loss: Robust 2.51 dB vs nominal 2.56 dB (Δ = −0.05 dB). In linear scale, that’s 0.561 vs 0.555, or about +1.1 % higher mean transmission.
Variability: Standard deviation (linear) increases slightly (0.027 -> 0.028, +3 %), suggesting a comparable level of fluctuation between samples.
Tails: 90th-percentile loss improves (2.86 -> 2.82 dB, better worst-case). 10th-percentile loss worsens (2.31 -> 2.23 dB, slightly lower best-case).
In short: The robust design maintains essentially the same overall spread but shifts the entire distribution slightly toward lower loss. While variability remains comparable, the robust version delivers a modest boost in average transmission and improved worst-case performance, at the cost of a marginally weaker best-case - a balanced, realistic outcome consistent with fabrication-aware optimization.
At first glance, the numbers may not seem dramatic, but the difference is real and meaningful.
Even a few hundredths of a decibel can translate to higher wafer-level yield when scaled to thousands of devices.
It’s also worth remembering that the specific magnitude depends on many details of the experiment:
How and when robustness was introduced into the optimization (for example, from the start or as a final fine-tuning).
The starting point, optimizer settings, and number of iterations used.
The perturbation model and its assumed standard deviations or correlations.
The type of device. Grating couplers are quite resonant and inherently sensitive to fabrication noise, so they tend to show smaller relative gains.
This notebook is meant as a conceptual demonstration rather than an exhaustive benchmark.
There are many other ways to define and train for robustness, and exploring them is part of what makes photonic inverse design both challenging and exciting.
We use necessary cookies to run this website. With your permission, we
also use analytics cookies to understand site usage and marketing
cookies for advertising, retargeting, and HubSpot tracking.
Learn more about our cookie policy.
Privacy choices
Choose which optional cookies Flexcompute may use. Necessary cookies
are always on because they support core website behavior, security, and
saving your consent record.
Your browser is sending a Global Privacy Control signal, so marketing
cookies are disabled.
Subscribe
Thanks for subscribing
Publish Your Notebook
Thank you for publishingA confirmation email has been sent to your inbox. Your notebook will be available within the next 48 hours.
Community Library
TERMS & CONDITIONS
EFFECTIVE DATE: January 1, 2025
Terms and Conditions for User-Submitted Content
By submitting content to Flexcompute, you agree to the following terms:
1. Ownership and Copyright
All content, including but not limited to text, data, images, and other materials submitted by users,
remains the sole property of the original creator. Flexcompute does not claim ownership of the submitted
content or any intellectual property rights associated with it.
Users affirm that they own the copyright or have obtained all necessary permissions for the submitted
content and are fully responsible for ensuring that their submissions do not infringe on any third-party
rights.
2. Responsibility for Content
Users are solely responsible for the content they submit. Flexcompute does not endorse, guarantee,
or verify the accuracy, legality, or appropriateness of any submitted content. Users are responsible
for ensuring that their content complies with all applicable laws and regulations.
Users declare that they have obtained authorization from all co-authors and collaborators associated
with the submitted content, granting them the right to submit and sign on behalf of all contributors.
Users agree not to submit content that is illegal, defamatory, obscene, or violates the rights
of others, including privacy and intellectual property rights.
3. Modification and Presentation
Flexcompute reserves the right to review, edit, or modify submitted content to improve clarity,
formatting, and presentation while maintaining the original intent and message.
These modifications are made to enhance the overall quality and readability of the published material.
Users acknowledge that Flexcompute may format or present the content in a way
that aligns with our editorial and visual standards.
4. Liability Disclaimer
Flexcompute shall not be held liable for any disputes arising from user-submitted content, including
but not limited to copyright claims, inaccuracies, or damages resulting from the publication of user content.
Users agree to indemnify Flexcompute against any claims or legal actions resulting from their submitted content.
5. Content Use Rights
By submitting content, users grant Flexcompute a non-exclusive, royalty-free, worldwide license to publish, distribute,
and promote the content for the purposes of showcasing user contributions and marketing our services.
This license does not transfer ownership of the content or any copyright to Flexcompute.
Users retain the right to withdraw their submissions at any time.
Upon request, Flexcompute will remove the content from its platform.
6. Privacy and Confidentiality
Users acknowledge that submitted content may be publicly accessible and therefore waive any
rights to confidentiality or privacy regarding the published material.
Flexcompute will not share personal information of users without
their consent, in accordance with our privacy policy.
Community Library
How the process works:
You submit your notebook.
You will get a permanent URL to promote your work.
Cite the URL as a reference for others in your upcoming papers to enhance the impact.
When someone clicks your URL, your notebook will be displayed.
Enter your email address below to receive the presentation slides. In the future, we’ll share you very few emails when we have new tutorial release, development updates, valuable toolkits and technical guidance . You can unsubscribe at any time by clicking the link at the bottom of every email. We’ll never share your information.