# photonoxide roadmap
## Vision
The validated, fabrication-ready photonics toolkit for Rust: simulation, inverse design and layout in one library, with a studio to watch every run live.
### Success criteria for 1.0
- **Validated:** every solver passes analytic tests, reproduces published results within a stated tolerance, and agrees with an established code on shared cases. A public validation report is regenerated by CI for every release.
- **Converged:** every number comes with its convergence: grid resolution, absorbing boundary and run time. Unconverged results are flagged, never quietly reported.
- **Fabricable:** every device photonoxide designs exports to GDSII and OASIS, passes the design rules of an open PDK (SiEPIC EBeam, Cornerstone), and reports its performance across process variation, not just at nominal.
- **Fabricated:** at least one photonoxide-designed device made on an open multi-project wafer run (SiEPIC openEBL), with its measured spectrum compared against the prediction and both published.
- **Visible:** every solver and every optimization can be watched live in the studio, and every run replays from its record. Headless runs give identical results.
- **Fast:** at least as fast per core as the reference open-source codes (Meep, MPB, S4) on our benchmark suite, measured as time to a converged answer at equal accuracy, with every result published, losses included.
- **Reproducible:** the same input gives bit-for-bit the same result on any number of threads.
- **Documented:** every method has a theory page with its derivation and references, and 100% of the public API is documented.
## Design principles
1. **Validation before features.** A solver is merged with three things:
- an analytic test;
- a reproduction of a published result;
- a convergence test showing the expected order.
A feature without validation isn't done, however useful it looks.
2. **Every number knows its error.**
- Results carry the discretization they came from, and convergence studies are built in.
- A 2D result is labelled 2D, and "verified in 3D" is a separate status.
3. **Implemented from the papers.**
- Every method cites its source in the docs.
- GPL codes (Meep, MPB, KLayout, SPINS-B) are run as external programs for comparison and never read for porting. photonoxide is MIT OR Apache-2.0.
4. **Fabrication is a constraint, not a post-process.**
- The PDK's design rules enter the optimization (length scales, eroded and dilated designs).
- Designs are layout from the start: polygons on layers, with ports.
5. **One run, two views.**
- The CLI and the studio run the same job description.
- The run directory records its events, so any run can be watched live or replayed later.
- The window starts the job by itself, exits when it's done, and honours a hard timeout.
6. **Pure Rust.**
- No C, Fortran or Python dependencies, and no Python bindings.
- Linear algebra is faer, parallelism is rayon, and the GPU is wgpu.
7. **Units are types.** Lengths, wavelengths and frequencies can't be mixed up silently. The time convention is e^(−iωt) everywhere and is documented once.
8. **Material data has provenance.**
- Every material model carries its source, validity range and temperature.
- Extrapolating outside the range is an error by default.
- Only openly licensed data is shipped; the refractiveindex.info database is CC0.
9. **Determinism is a guarantee.** Reductions are ordered, seeds are explicit, and nothing depends on thread scheduling.
10. **Optimization lives in genoxide.**
- photonoxide supplies the physics: the objective, its adjoint gradient, and the parametrization (filters, projections, fabrication constraints).
- [genoxide](https://github.com/tachsin/genoxide), our optimization library, supplies every method that searches: gradient methods, constrained methods, evolutionary and global search.
- When photonoxide needs a method genoxide lacks, it is added to genoxide as a general method with its own tests and benchmarks, never as photonics-specific code.
### Pitfalls ruled out by design
These mistakes were each seen and measured while designing a 1310/1550 nm silicon demultiplexer by adjoint topology optimization, in 2D FDFD and 3D FDTD. photonoxide is written from scratch to this roadmap, and rules each one out by design, with a test for each:
| Pitfall (measured) | photonoxide rule |
|---|---|
| The harmonic mean of ε at half points for the TE-like (Hz) operator: TM modes were 4·10⁻⁴ off, with first-order convergence | Interface averaging derived per operator in the docs; a convergence-order test for every discretization |
| A port mode solved on a window cut between two waveguides saw asymmetric Yee-grid boundaries: a 1.2% uneven split from a symmetric device | Ports solve the isolated waveguide's mode; symmetric devices must split symmetrically to 10⁻⁶ |
| The 3D adjoint treated the output mode as real (it is 4% imaginary): a 10% gradient error | Every adjoint gradient is checked against finite differences to 1% in CI, in 2D and 3D |
| 2D effective-index designs at 97% measured 46–70% in 3D | 2D results are labelled as such, and the inverse-design pipeline ends in 3D |
| A sign error in the DFT phase gave a negative effective index | One documented time convention, and tests of phase direction |
| Resetting Adam's state between projection stages destroyed designs at high β | Optimizer state persists across continuation stages, and that is tested |
| 125 nm pixels capped the design at 0.85 however it was binarized | The design's resolution is set separately from the simulation grid; designs are re-checked on a finer grid |
| A result quoted on one grid changed by 0.07 on the next | Grid convergence gates every reported number |
| The system allocator limited 18 threads to 13 solves/s (30/s with mimalloc) | No allocation in time-stepping and solve loops; throughput is benchmarked by thread count |
| JSON floats didn't round-trip, so a replayed run differed in the 17th digit | Exact float round-trip in every record format |
| A narrow source pulse multiplied FDTD run times | The source bandwidth is set from the requested spectrum, with a floor, and is documented |
## Architecture
- **`units`:** typed lengths, wavelengths and frequencies, and the time convention.
- **`material`:** dispersion models (Sellmeier, Cauchy, Drude, Lorentz, tabulated data with Kramers–Kronig checks), each with its provenance.
- **`geometry`:** shapes, polygons, extrusion, layer stacks (for example 220 nm SOI), and rasterization to grids with subpixel smoothing.
- **`mode`:** slab and 2D cross-section mode solvers, the effective index method, bend modes, dispersion and overlaps.
- **`fdfd`:** frequency-domain finite differences in 2D and 3D, ports, S-parameters, and adjoints.
- **`fdtd`:** the Yee scheme in 2D and 3D, CPML, sources, monitors, dispersive and nonlinear media, and a GPU backend.
- **`semi`:** the transfer matrix method, RCWA, eigenmode expansion (EME) and the beam propagation method.
- **`circuit`:** S-parameter netlists, and compact models fitted from solver results.
- **`inverse`:** adjoint gradients, density and level-set parametrizations, length-scale and foundry-rule constraints, and robust formulations, posed as problems for genoxide's optimizers.
- **`layout`:** polygons and booleans, GDSII and OASIS I/O, parametric cells with ports, and waveguide routing.
- **`pdk`:** layer stacks, layer maps, design rules, cross-sections, process corners, and DRC.
- **`tapeout`:** submission packages for a foundry run: floorplan, test structures, checks and the design record.
- **`fab`:** process-variation models, lithography and etch proxies, and Monte Carlo and corner analysis.
- **`validation`:** analytic solutions and published reference data, with their sources.
- **`run`:** job descriptions (TOML), run directories, event streams and replay.
- **`studio`** (feature): the egui + wgpu GUI.
- **The `photonoxide` binary:** `run`, `view`, `validate`, `drc`, `tapeout` and `bench`.
- **Errors:** one typed error enum, and no panics in library code.
## Milestones
### 0.0: Project setup ✅
- [x] README, roadmap, licenses and crate skeleton
### 0.1: Foundations ✅
- [x] **Units and conventions:** typed quantities; the e^(−iωt) convention documented and tested.
- [x] **Materials:**
- Sellmeier, Cauchy, Drude and Lorentz models;
- Si (Li 1980), SiO₂ (Malitson 1965) and Si₃N₄ (Luke 2015);
- import from the refractiveindex.info database (CC0) with provenance;
- validity ranges enforced.
- [x] **Geometry and layer stacks:** polygons, extrusion, standard SOI and SiN stacks.
- [x] **Runs:** job TOML, run directories, `events.jsonl`, replay, hard timeouts.
- [x] **Studio skeleton:** open a run, show its geometry and ε cross-sections, replay events; it starts and exits by itself.
- [x] **Project:**
- CI on Linux, macOS and Windows: clippy, fmt and rustdoc with `-D warnings`, plus a single-thread job.
- The validation harness and its report generator from day one.
- AGENTS.md.
### 0.2: Mode solvers
- [x] **Slab:** an exact transfer-matrix dispersion relation, and finite differences. *(Three-layer slab, exact; any multilayer stack by transfer matrices (Chilwell & Hodgkinson 1984), bound modes and leaky waves; any planar profile by 1D finite differences, second order, with a PML.)*
- [x] **2D cross-section:** a full-vector finite-difference solver (Fallahkhair 2008), with PML for leaky modes. *(The solver, shift-and-invert Arnoldi (Saad 2011), mirror walls, and the PML by complex coordinate stretching (Chew 1994, 1997): leaky losses within 0.1 % of the exact transfer-matrix ones, at second order, and Chilwell & Hodgkinson's leaky waves reproduced. Second order at interfaces, about first order at convex corners and 1.4–1.8 at concave ones, measured on Hadley's four corner problems.)*
- [ ] **Dielectric corners:** high-accuracy finite-difference equations at interfaces and corners (Hadley 2002, parts I and II).
- [x] **Effective index method,** with its error against 3D stated. *(Hocker & Burns 1977, as Chrostowski & Hochberg describe it: the book's 2.489 reproduced; against the full-vector solver, 220 nm strips 400–600 nm wide: n_eff +3.9 to +1.0 %, n_g −6.7 to −2.2 %.)*
- [x] **Bends:** conformal transformation; bend loss. *(Heiblum & Harris's map in the full-vector solver, with a PML; an exact bent slab (radial shooting to the outgoing Hankel function) as the reference: exact and second order for E normal to the bend plane, 1.3e-3 at R = 1 µm for E in it; Marcuse's formula reached as 1/R.)*
- [x] **Derived quantities:** n_eff, n_g, dispersion, loss and overlaps; modes tracked across wavelength. *(n_g and D (Chrostowski & Hochberg Eqs. 3.5–3.6), loss, mode tracking by field overlap; all six field components, power, and the power coupled between two waveguides' modes, checked against exact slab fields.)*
- [x] **Studio:** the mode viewer (fields, and sweeps over width and wavelength). *(A `"modes"` job: each mode's |E|² with its effective index and TE fraction, and sweeps over the wavelength or a width plotted live, with group indices for a wavelength sweep.)*
- [x] **Validation:**
- slab modes against the analytic solution;
- Marcatili's approximation (1969) in its regime of validity;
- the published 500 × 220 nm strip;
- the convergence order.
*(All four, plus Hadley's corner problems, Chilwell & Hodgkinson's multilayer and Bienstman et al.'s leaky-wire benchmark: see docs/validation.md.)*
### 0.3: Frequency-domain finite differences (FDFD)
- [ ] **2D and 3D,** with stretched-coordinate PML.
- [ ] **Ports:** mode sources and forward/backward separation by mode projection; S-parameters and flux.
- [ ] **Solvers:** sparse direct (faer) with cached symbolic factorization; iterative for 3D.
- [ ] **Adjoint gradients,** checked against finite differences.
- [ ] **Validation:** reciprocity, energy conservation, analytic cases, agreement with FDTD.
### 0.4: Finite-difference time-domain (FDTD)
- [ ] **Core:**
- the Yee scheme in 2D and 3D (Yee 1966);
- CPML (Roden 2000; the PML of Berenger 1994);
- subpixel smoothing (Farjadpour 2006; Kottke 2008; anisotropic: Oskooi 2009).
- [ ] **Sources:** total-field/scattered-field, mode sources, Gaussian beams and dipoles.
- [ ] **Monitors:** DFT on planes and volumes, flux, mode overlaps; resonances by harmonic inversion (Mandelshtam 1997).
- [ ] **Media:** Bloch-periodic boundaries, and dispersive media by auxiliary differential equations (Drude, Lorentz).
- [ ] **Performance:** a GPU backend (wgpu compute, single precision), with the CPU results as its reference.
- [ ] **Adjoint gradients** in 3D, the imaginary part of the mode included.
- [ ] **Studio:** live field propagation in planes and slices, with monitors.
- [ ] **Validation:**
- Mie scattering (Mie 1908);
- PML reflection;
- the Yee scheme's numerical dispersion against theory;
- Meep on its published cases (Oskooi 2010).
### 0.5: Semi-analytic methods
- [ ] **Transfer matrix method:** thin films and Bragg stacks.
- [ ] **RCWA:** the stable formulation (Moharam 1995) with Li's factorization rules (Li 1996); compared against S4 (Liu 2012).
- [ ] **Eigenmode expansion,** with PML (Bienstman 2001).
- [ ] **Beam propagation method:** wide-angle, Padé (Hadley 1992).
- [ ] **Validation:** Bragg mirrors analytically, gratings against published results, and EME against FDTD on tapers.
### 0.6: Inverse design
- [ ] **Adjoint gradients** for every solver (Lalau-Keraly 2013; nonlinear: Hughes 2018); forward-mode where it pays (Hughes 2019).
- [ ] **Density topology optimization:**
- filtering and projection with continuation (Wang 2011; Jensen 2011; Christiansen 2021);
- robust eroded, nominal and dilated designs.
- [ ] **Fabrication constraints:**
- minimum length scales (Zhou 2015; Hammond 2021);
- strict foundry rules (Schubert 2022);
- level sets (Vercruysse 2019).
- [ ] **Shape and parametric optimization.**
- [ ] **Optimizers from genoxide:**
- with supplied gradients: Adam and L-BFGS-B;
- constraints: the augmented Lagrangian;
- global, discrete and hyperparameter searches: CMA-ES and genetic algorithms;
- added to genoxide as general methods where it lacks them: the method of moving asymptotes, the standard for topology optimization (MMA: Svanberg 1987; globally convergent: Svanberg 2002), and continuation schedules that keep the optimizer's state across stages;
- large designs (10⁴ to 10⁶ variables) need genoxide's gradient methods to cost O(n) per step.
- [ ] **Pipeline:** explore in 2D, then optimize and verify in 3D.
- [ ] **Studio:** the live optimization dashboard (design, fields, figure of merit, constraints).
- [ ] **Validation,** each in 3D and within stated tolerances:
- the wavelength demultiplexer (Piggott 2015);
- the polarization beamsplitter (Shen 2015);
- the mode multiplexer (Frellsen 2016);
- the grating coupler (Su 2018);
- foundry-ready designs (Piggott 2020).
### 0.7: Layout and PDK
- [ ] **Layout:** polygons and booleans, cell hierarchy and references.
- [ ] **GDSII and OASIS,** read and write (our own implementation). OASIS keeps curved, inverse-designed layouts small.
- [ ] **Clean geometry:** curves turned into polygons within a stated tolerance, snapped to the database grid, split under the format's vertex limit, and merged.
- [ ] **Parametric cells** with ports; waveguide routing with bends and tapers.
- [ ] **PDK format:** layer stack, layer map, design rules, cross-sections and process corners.
- [ ] **DRC:** width, space, enclosure, minimum area, acute angles and curvature.
- [ ] **Open PDKs:** SiEPIC EBeam (MIT; 220 nm SOI, electron-beam lithography; Hammood 2025) and Cornerstone (220/340/500 nm SOI and SiN).
- [ ] **Studio:** the layout viewer, with DRC markers.
- [ ] **Validation:**
- byte-for-byte GDSII and OASIS round trips;
- our DRC results match KLayout's on the PDKs' own rule decks (KLayout run as an external program).
### 0.8: Tape-out
How a design reaches a foundry. Fabrication is almost always a multi-project wafer (MPW) run: many designs share one wafer, on a fixed schedule with a submission deadline.
- [ ] **Submission package:**
- the layout in GDSII or OASIS, on the run's layer map;
- the PDK's black-box cells placed but never edited, so the foundry can replace them with its own layout after submission;
- everything inside the run's design area.
- [ ] **Floorplan and test structures:**
- inputs and outputs a fibre array can reach;
- loopback structures that take the coupling loss out of measurements;
- labels for automated measurement where the run uses them.
- [ ] **Checks before submission:**
- our DRC;
- sign-off with the foundry's own rule deck (KLayout, run as an external program);
- connectivity: every port connected and no open waveguide ends.
- [ ] **Design record** next to the layout, for us rather than the foundry: simulated spectra, process corners, the grid each number came from, and what to measure.
- [x] **Runs:**
- **SiEPIC openEBL** (fabricated by Applied Nanotools; 220 nm SOI, one full etch, electron-beam lithography, oxide cladding): GDSII or OASIS submitted as a GitHub pull request, with automated DRC and functional checks, and remote testing (Hammood 2025). The first target.
- **Cornerstone** (220/340/500 nm SOI, SiN): GDSII.
- **Runs under NDA** (for example AMF, imec, GlobalFoundries, IHP, CEA-Leti and LioniX, through Europractice): the user loads the foundry's PDK locally in our PDK format. Their rules and cells are never in this repository.
- [ ] **Measurements back:** import measured spectra and compare them with the prediction. The comparison becomes part of the validation report.
- [ ] **Studio:** the tape-out view (floorplan, DRC markers, submission checklist).
- [ ] **Validation:**
- a submission accepted by openEBL's automated checks;
- a fabricated device measured and compared with its prediction.
### 0.9: Fabrication realism
- [ ] **Process variation:** width bias, film thickness and sidewall angle; corners and Monte Carlo; yield.
- [ ] **Lithography and etch proxies** (blur and threshold), calibrated against published measurements where they exist. Machine-learned fabrication predictors (Gostimirovic 2022) are for comparison only.
- [ ] **Robust design** across corners.
- [ ] **Fabrication report** per design: nominal, corners and spread, and the design rules it was checked against.
### 0.10: Circuits and devices
- [ ] **Circuit simulation:** S-parameter netlists in the frequency domain (compare Simphony: Ploeg 2021).
- [ ] **Compact models,** fitted from solver results with their error.
- [ ] **Device library,** each device with its source paper and validation:
- strip and rib waveguides;
- bends and tapers;
- Y-branch (Zhang 2013);
- MMI (Soldano 1995);
- directional couplers;
- rings (Bogaerts 2012);
- MZIs;
- grating couplers (Vermeulen 2010; Su 2018);
- AWGs;
- demultiplexers.
- [ ] **Active devices:** thermo-optic heaters; plasma-dispersion modulators (Soref 1987).
- [ ] **Studio:** the circuit view and spectra.
### 0.11: Periodic structures and nanophotonics
- [ ] **Photonic band structures:** plane-wave expansion, block-iterative (Johnson 2001).
- [ ] **Photonic-crystal waveguides and cavities** (Q factors by harmonic inversion).
- [ ] **Metasurfaces:** RCWA, and the locally periodic approximation.
- [ ] **Plasmonics** with dispersive FDTD.
- [ ] **Mie and T-matrix** scattering.
### 0.12: Nonlinear and fiber optics
- [ ] **χ(2) and χ(3)** in FDTD: second-harmonic generation, Kerr, four-wave mixing.
- [ ] **Coupled-mode theory.**
- [ ] **Fiber modes,** exact for step index; the nonlinear Schrödinger equation by split-step; supercontinuum.
### 0.13: Beyond
- [ ] **Multiphysics:** heat conduction for heaters and thermo-optic tuning; carriers for electro-optics.
- [ ] **Quantum photonics:** linear optical circuits and their statistics.
- [ ] **Ray optics.**
- [ ] **Further domains:** oxiphoton's 63 modules are the long-term map of the field. Each domain enters only with its validation.
### Throughout
- **Studio:** every new solver gets its live view the same release.
- **Performance:** criterion benchmarks, with regression gating in CI.
- **Docs:** a theory page per method.
### 1.0: Stable
- **Stability:** API review, semver guarantees, MSRV policy.
- **Validation report:** published (see below).
- **Book:** a guide per device type, from a first simulation to a submitted and measured chip.
## Validation
Every solver is checked on three tiers. The results are collected in a report that CI regenerates:
1. **Analytic:**
- Fresnel coefficients;
- slab waveguide modes;
- Bragg stacks;
- Mie scattering;
- PML reflection theory;
- the Yee scheme's numerical dispersion;
- step-index fibre modes;
- MMI self-imaging lengths;
- ring free spectral range from n_g;
- Kramers–Kronig consistency of the material models.
2. **Cross-code:** the same structure at the same resolution in Meep, MPB, S4, Ceviche and oxiphoton. GPL codes run only as external programs, in a separate harness.
3. **Published devices:**
- the inverse-designed devices above (Piggott 2015, Shen 2015, Frellsen 2016, Su 2018, Piggott 2020);
- classic devices (Y-branch, MMI, rings, grating couplers);
- measured data: our own devices fabricated on openEBL, and published measurements where they exist (Hammood 2025).
Each entry states its tolerance, grid, run time, and the source it is compared with.
## Benchmarks
- **Codes:** Meep, MPB, S4, Ceviche, EMEpy and oxiphoton. Commercial and cloud solvers aren't benchmarked, because we can't run them under the same conditions.
- **Problems:** the validation cases above, from a strip-waveguide mode to a 3D device optimization.
- **Metrics:**
- time to a converged answer at equal accuracy;
- throughput (cell-updates per second for FDTD, solves per second for FDFD);
- scaling with threads;
- peak memory;
- for the GPU, speedup over the CPU at equal results.
## Not planned
- **Python bindings:** photonoxide is Rust only.
- **A hosted or cloud service.**
- **Code ported from GPL projects:** they serve only as external references.
- **Foundry PDKs under NDA in the repository:** users load their own through the PDK format.
- **Results without validation,** in the docs or anywhere else.
## References
Every reference below was checked against its DOI.
**FDTD and boundaries**
- K. Yee, IEEE Trans. Antennas Propag. 14, 302 (1966). [10.1109/TAP.1966.1138693](https://doi.org/10.1109/TAP.1966.1138693)
- J.-P. Berenger, J. Comput. Phys. 114, 185 (1994). [10.1006/jcph.1994.1159](https://doi.org/10.1006/jcph.1994.1159)
- J. A. Roden, S. D. Gedney, Microw. Opt. Technol. Lett. 27, 334 (2000). [10.1002/1098-2760(20001205)27:5<334::AID-MOP14>3.0.CO;2-A](https://doi.org/10.1002/1098-2760(20001205)27:5%3C334::AID-MOP14%3E3.0.CO;2-A)
- A. Farjadpour et al., Opt. Lett. 31, 2972 (2006). [10.1364/OL.31.002972](https://doi.org/10.1364/OL.31.002972)
- C. Kottke, A. Farjadpour, S. G. Johnson, Phys. Rev. E 77, 036611 (2008). [10.1103/PhysRevE.77.036611](https://doi.org/10.1103/PhysRevE.77.036611)
- A. Oskooi, C. Kottke, S. G. Johnson, Opt. Lett. 34, 2778 (2009). [10.1364/OL.34.002778](https://doi.org/10.1364/OL.34.002778)
- A. Oskooi et al., Comput. Phys. Commun. 181, 687 (2010), Meep. [10.1016/j.cpc.2009.11.008](https://doi.org/10.1016/j.cpc.2009.11.008)
- V. A. Mandelshtam, H. S. Taylor, J. Chem. Phys. 107, 6756 (1997). [10.1063/1.475324](https://doi.org/10.1063/1.475324)
**Modes, periodic structures and semi-analytic methods**
- E. A. J. Marcatili, Bell Syst. Tech. J. 48, 2071 (1969). [10.1002/j.1538-7305.1969.tb01166.x](https://doi.org/10.1002/j.1538-7305.1969.tb01166.x)
- A. B. Fallahkhair, K. S. Li, T. E. Murphy, J. Lightwave Technol. 26, 1423 (2008). [10.1109/JLT.2008.923643](https://doi.org/10.1109/JLT.2008.923643)
- G. R. Hadley, J. Lightwave Technol. 20, 1210 (2002), part I. [10.1109/JLT.2002.800361](https://doi.org/10.1109/JLT.2002.800361)
- G. R. Hadley, J. Lightwave Technol. 20, 1219 (2002), part II: dielectric corners. [10.1109/JLT.2002.800371](https://doi.org/10.1109/JLT.2002.800371)
- Y. Saad, *Numerical Methods for Large Eigenvalue Problems*, 2nd ed., SIAM (2011). [10.1137/1.9781611970739](https://doi.org/10.1137/1.9781611970739)
- S. G. Johnson, J. D. Joannopoulos, Opt. Express 8, 173 (2001), MPB. [10.1364/OE.8.000173](https://doi.org/10.1364/OE.8.000173)
- M. G. Moharam et al., J. Opt. Soc. Am. A 12, 1068 (1995). [10.1364/JOSAA.12.001068](https://doi.org/10.1364/JOSAA.12.001068)
- L. Li, J. Opt. Soc. Am. A 13, 1870 (1996). [10.1364/JOSAA.13.001870](https://doi.org/10.1364/JOSAA.13.001870)
- V. Liu, S. Fan, Comput. Phys. Commun. 183, 2233 (2012), S4. [10.1016/j.cpc.2012.04.026](https://doi.org/10.1016/j.cpc.2012.04.026)
- P. Bienstman, R. Baets, Opt. Quantum Electron. 33, 327 (2001). [10.1023/A:1010882531238](https://doi.org/10.1023/A:1010882531238)
- G. R. Hadley, Opt. Lett. 17, 1426 (1992). [10.1364/OL.17.001426](https://doi.org/10.1364/OL.17.001426)
- G. Mie, Ann. Phys. 330, 377 (1908). [10.1002/andp.19083300302](https://doi.org/10.1002/andp.19083300302)
**Materials and silicon photonics**
- H. H. Li, J. Phys. Chem. Ref. Data 9, 561 (1980). [10.1063/1.555624](https://doi.org/10.1063/1.555624)
- I. H. Malitson, J. Opt. Soc. Am. 55, 1205 (1965). [10.1364/JOSA.55.001205](https://doi.org/10.1364/JOSA.55.001205)
- K. Luke et al., Opt. Lett. 40, 4823 (2015). [10.1364/OL.40.004823](https://doi.org/10.1364/OL.40.004823)
- M. N. Polyanskiy, Sci. Data 11, 94 (2024), the refractiveindex.info database. [10.1038/s41597-023-02898-2](https://doi.org/10.1038/s41597-023-02898-2)
- R. Soref, B. Bennett, IEEE J. Quantum Electron. 23, 123 (1987). [10.1109/JQE.1987.1073206](https://doi.org/10.1109/JQE.1987.1073206)
- L. Chrostowski, M. Hochberg, *Silicon Photonics Design*, Cambridge University Press (2015). [10.1017/CBO9781316084168](https://doi.org/10.1017/CBO9781316084168)
- W. Bogaerts et al., Laser Photonics Rev. 6, 47 (2012). [10.1002/lpor.201100017](https://doi.org/10.1002/lpor.201100017)
- W. Bogaerts, L. Chrostowski, Laser Photonics Rev. 12, 1700237 (2018). [10.1002/lpor.201700237](https://doi.org/10.1002/lpor.201700237)
- L. B. Soldano, E. C. M. Pennings, J. Lightwave Technol. 13, 615 (1995). [10.1109/50.372474](https://doi.org/10.1109/50.372474)
- Y. Zhang et al., Opt. Express 21, 1310 (2013). [10.1364/OE.21.001310](https://doi.org/10.1364/OE.21.001310)
- D. Vermeulen et al., Opt. Express 18, 18278 (2010). [10.1364/OE.18.018278](https://doi.org/10.1364/OE.18.018278)
- S. Ploeg et al., Comput. Sci. Eng. 23, 65 (2021), Simphony. [10.1109/MCSE.2020.3012099](https://doi.org/10.1109/MCSE.2020.3012099)
- M. Hammood et al., Proc. SPIE (ETOP 2025), SiEPIC openEBL. [10.1117/12.3076810](https://doi.org/10.1117/12.3076810)
**Inverse design and fabrication constraints**
- J. Lu, J. Vučković, Opt. Express 21, 13351 (2013). [10.1364/OE.21.013351](https://doi.org/10.1364/OE.21.013351)
- C. M. Lalau-Keraly et al., Opt. Express 21, 21693 (2013). [10.1364/OE.21.021693](https://doi.org/10.1364/OE.21.021693)
- J. S. Jensen, O. Sigmund, Laser Photonics Rev. 5, 308 (2011). [10.1002/lpor.201000014](https://doi.org/10.1002/lpor.201000014)
- F. Wang, B. S. Lazarov, O. Sigmund, Struct. Multidiscip. Optim. 43, 767 (2011). [10.1007/s00158-010-0602-y](https://doi.org/10.1007/s00158-010-0602-y)
- M. Zhou et al., Comput. Methods Appl. Mech. Eng. 293, 266 (2015). [10.1016/j.cma.2015.05.003](https://doi.org/10.1016/j.cma.2015.05.003)
- A. Y. Piggott et al., Nat. Photonics 9, 374 (2015). [10.1038/nphoton.2015.69](https://doi.org/10.1038/nphoton.2015.69)
- B. Shen et al., Nat. Photonics 9, 378 (2015). [10.1038/nphoton.2015.80](https://doi.org/10.1038/nphoton.2015.80)
- L. F. Frellsen et al., Opt. Express 24, 16866 (2016). [10.1364/OE.24.016866](https://doi.org/10.1364/OE.24.016866)
- L. Su et al., Opt. Express 26, 4023 (2018). [10.1364/OE.26.004023](https://doi.org/10.1364/OE.26.004023)
- S. Molesky et al., Nat. Photonics 12, 659 (2018). [10.1038/s41566-018-0246-9](https://doi.org/10.1038/s41566-018-0246-9)
- T. W. Hughes et al., ACS Photonics 5, 4781 (2018). [10.1021/acsphotonics.8b01522](https://doi.org/10.1021/acsphotonics.8b01522)
- T. W. Hughes et al., ACS Photonics 6, 3010 (2019). [10.1021/acsphotonics.9b01238](https://doi.org/10.1021/acsphotonics.9b01238)
- N. V. Vercruysse et al., Sci. Rep. 9, 8999 (2019). [10.1038/s41598-019-45026-0](https://doi.org/10.1038/s41598-019-45026-0)
- L. Su et al., Appl. Phys. Rev. 7, 011407 (2020), SPINS. [10.1063/1.5131263](https://doi.org/10.1063/1.5131263)
- A. Y. Piggott et al., ACS Photonics 7, 569 (2020). [10.1021/acsphotonics.9b01540](https://doi.org/10.1021/acsphotonics.9b01540)
- K. Svanberg, Int. J. Numer. Methods Eng. 24, 359 (1987). [10.1002/nme.1620240207](https://doi.org/10.1002/nme.1620240207)
- K. Svanberg, SIAM J. Optim. 12, 555 (2002). [10.1137/S1052623499362822](https://doi.org/10.1137/S1052623499362822)
- R. E. Christiansen, O. Sigmund, J. Opt. Soc. Am. B 38, 496 (2021). [10.1364/JOSAB.406048](https://doi.org/10.1364/JOSAB.406048)
- A. M. Hammond et al., Opt. Express 29, 23916 (2021). [10.1364/OE.431188](https://doi.org/10.1364/OE.431188)
- M. F. Schubert et al., ACS Photonics 9, 2327 (2022). [10.1021/acsphotonics.2c00313](https://doi.org/10.1021/acsphotonics.2c00313)
- D. Gostimirovic et al., ACS Photonics 9, 2623 (2022). [10.1021/acsphotonics.1c01973](https://doi.org/10.1021/acsphotonics.1c01973)