OpenLithoHub Ecosystem Capability Matrix
This document provides a unified view of what each repository in the OpenLithoHub
ecosystem provides, which physics solvers are available, how the cross-domain interfaces
work, and -- critically -- what is not provided.
Repositories
| Repository |
Role |
Language |
Maturity |
| OpenLithoHub |
Computational lithography benchmarking and workflow toolkit |
Python (PyTorch) |
Alpha (0.1.0a2) |
| DiffCFD |
Differentiable steady-state CFD for inverse design and RL |
Python + Rust (PyO3) |
Pre-release, no public push |
| DiffNano |
Differentiable nanophotonics inverse design |
Python (PyTorch) |
Pre-release, no public push |
| diff-surrogate |
Shared surrogate framework (MLP, CNN, ensemble) |
Python (PyTorch) |
Pre-release, no public push |
Physics Solvers
OpenLithoHub (built-in)
| Solver |
Module |
Physics |
Differentiable |
| Gaussian PSF forward model |
openlithohub._utils.forward_model |
Single-Gaussian convolution |
Yes (PyTorch autograd) |
| Hopkins SOCS forward model |
openlithohub._utils.hopkins |
Partial-coherent imaging via SVD-truncated SOCS |
Yes (PyTorch autograd) |
| CTR resist |
openlithohub._utils.resist_model |
Sigmoid threshold with optional Gaussian acid diffusion |
Yes |
| Calibre nmOPC adapter |
openlithohub.simulators.calibre |
Siemens EDA Calibre forward sim (requires toolchain + license; mock mode available) |
No |
| Tachyon adapter |
openlithohub.simulators.tachyon |
ASML Brion Tachyon forward sim (requires toolchain + license; mock mode available) |
No |
| LevelSet ILT |
openlithohub.models.levelset_ilt |
Gradient-descent mask optimization |
Yes |
| Neural-ILT (U-Net) |
openlithohub.models.neural_ilt |
Learned mask optimization |
Yes |
| OpenILT (MOSAIC) |
openlithohub.models.openilt |
L2 + PVB SGD |
Yes |
| Rule-based OPC |
openlithohub.models.rule_based_opc |
Bias-rule mask adjustment |
No |
| GAN-OPC |
openlithohub.models.gan_opc |
Generative adversarial mask synthesis |
Yes |
| Surrogate ILT |
openlithohub.models.surrogate_ilt |
CNN surrogate replacing Hopkins forward |
Yes |
| Solver |
Module |
Physics |
Differentiable |
| NavierStokes2D |
diffcfd.solvers.navier_stokes_2d |
2D incompressible NS, SIMPLE, steady-state |
Yes (implicit diff via GMRES) |
| HeatTransfer2D |
diffcfd.solvers.heat_transfer |
Conjugate heat transfer coupled with NS |
Yes |
| LithoSolver |
diffcfd.solvers.litho |
Dill exposure + Mack development |
Yes |
| MeyerhoferSolver |
diffcfd.solvers.spin_coating |
Meyerhofer spin-coating analytical model |
Yes |
| RadialThinFilmSolver |
diffcfd.solvers.spin_coating |
Radial PDE thin-film evolution |
Yes |
| Frozen eddy viscosity |
diffcfd.solvers.turbulence |
Frozen mu_t from external RANS |
Partial (mu_t not differentiable) |
| Solver |
Module |
Physics |
Differentiable |
| RCWASolver |
diffnano.solvers.rcwa |
Rigorous coupled-wave analysis for periodic structures |
Yes |
| FDTDSolver2D |
diffnano.solvers.fdtd2d |
2D FDTD with CPML, TM/TE |
Yes (gradient checkpointing) |
| FDTDSolver3D |
diffnano.solvers.fdtd3d |
3D FDTD with CPML |
Yes (gradient checkpointing) |
| FDFDSolver2D |
diffnano.solvers.fdfd2d |
2D frequency-domain, dense solve |
Yes |
| HopkinsLithoModel |
diffnano.solvers.litho |
Gaussian PSF + sigmoid resist |
Yes |
| DifferentiableResistModel |
diffnano.solvers.resist |
CAR acid diffusion + PEB + development |
Yes |
| LearnedFabModel |
diffnano.solvers.fab_model |
U-Net learned fabrication transfer |
Yes |
| NeuralSurrogate |
diffnano.solvers.surrogate |
CNN-accelerated RCWA |
Yes |
diff-surrogate (shared library)
| Component |
Module |
Purpose |
| MLPSurrogate |
diff_surrogate.mlp |
Scalar property prediction (T,P -> density, etc.) |
| CNNSurrogate |
diff_surrogate.cnn |
2D field prediction (mask -> velocity field) |
| EnsembleSurrogate |
diff_surrogate.ensemble |
K-member ensemble with uncertainty |
| CorrectionPolicy |
diff_surrogate.base |
When to call truth solver |
| AdaptiveCorrectionPolicy |
diff_surrogate.base |
Adaptive correction interval |
| ConvergenceMonitor |
diff_surrogate.convergence |
Hybrid z-score convergence detection |
| TrainingBudget |
diff_surrogate.budget |
Allocate solver calls across regions |
| optimize_multifidelity |
diff_surrogate.multifidelity |
Surrogate + truth alternating optimization |
| robust_design_step |
diff_surrogate.robust_design |
Mask + antithetic + multi-corner |
| geometry (bspline, SDF, projection) |
diff_surrogate.geometry |
Shared geometry operators used by DiffCFD and DiffNano |
Cross-Domain Interfaces
The only cross-domain interface between repos is the OpenLithoHub plugin system.
There are no direct imports between DiffCFD and DiffNano.
OpenLithoHub
|
+--[diffcfd]--> openlithohub.plugins.diffcfd_process
| |-> DiffCFDLithoSimulator (wraps diffcfd.solvers.litho.LithoSolver)
| |-> DiffCFDSpinCoatSimulator (wraps diffcfd.solvers.spin_coating)
|
+--[diffnano]--> openlithohub.plugins.diffnano_em
| |-> DiffNanoRCWA (wraps diffnano.solvers.rcwa.RCWASolver)
| |-> DiffNanoFDTD2D (wraps diffnano.solvers.fdtd2d.FDTDSolver2D)
| |-> DiffNanoFDFD2D (wraps diffnano.solvers.fdfd2d.FDFDSolver2D)
|
+--[diffnano]--> openlithohub.plugins.diffnano_resist
|-> DiffNanoResistAdapter (wraps diffnano.solvers.resist.DifferentiableResistModel)
diff-surrogate is a shared dependency, not a plugin:
DiffCFD, DiffNano, OpenLithoHub all import from diff_surrogate directly.
Key constraint: Plugin backends produce non-comparable metric values. The scored
leaderboard default remains built-in Hopkins + CTR (threshold 0.225) without diffusion.
Metrics (OpenLithoHub)
| Metric |
Function |
Description |
| EPE |
compute_epe() |
Edge Placement Error (mask-vs-mask or wafer-level via forward sim) |
| L2 wafer error |
compute_l2_error() |
Neural-ILT canonical pixel-area error |
| PV Band |
compute_pvband() |
Process variation band across dose/focus window |
| Shot Count |
estimate_shot_count() |
Mask write time proxy for MBMW/VSB writers |
| Stochastic robustness |
compute_stochastic_robustness() |
Monte Carlo photon noise bridge/break probability |
| Stochastic defect classes |
compute_stochastic_defect_classes() |
Per-class failure rates (microbridge, break, missing contact, merging) |
| Hotspot detection |
compute_hotspot_detection() |
Distance-tolerant point matching (recall / precision / F1) |
| MRC |
check_mrc() |
Minimum width/spacing rule check |
| Curvilinear MRC |
check_curvilinear_mrc() |
Min curvature radius + feature area |
| DRC |
check_drc() |
Area, notch, width, spacing |
What Is NOT Provided
General limitations
- No industrial validation. All four repos are early-stage personal research projects
with no external users and no third-party validation. Do not use for production
decisions.
- No foundry-confidential parameters. Per-node CTR/Dill/Mack/PEB parameters are
foundry-confidential and cannot ship in open-source repos. Users must self-calibrate.
- No commercial EDA tool integration in core. Calibre (
CalibreSimulator) and Tachyon
(TachyonSimulator) adapters exist as config-validated stubs with mock_mode for
testing. Real simulations require the respective vendor toolchain on PATH and a
license. OpenLithoHub does not ship these tools.
OpenLithoHub
- No 3D mask effects (only 2D Hopkins imaging with optional EUV 3D-mask shadow proxy)
- No compressible or turbulent flow simulation (that is DiffCFD's domain)
- No electromagnetic simulation beyond Hopkins/SOCS (RCWA/FDTD/FDFD are DiffNano plugin)
- No spin-coating simulation (DiffCFD plugin)
- No Dill/Mack exposure+development solver in core (DiffCFD plugin)
- Neural-ILT and GAN-OPC models are trained on synthetic 64x64 tiles; performance on
real industrial layouts is unvalidated
- Absolute wafer prediction requires user-calibrated, foundry-confidential parameters
DiffCFD
- 2D only; 3D out of scope for v0.x
- Incompressible flow only; compressible (shocks, transonic) not supported
- No unstructured meshes (structured Cartesian + Brinkman IB only)
- No turbulence model beyond frozen eddy viscosity (no RANS, no LES, no DNS)
- No multi-physics beyond NS + heat (no radiation, no combustion, no multiphase)
- Tuned for optimization loops at 32x32--64x64, not production-scale simulation
- Rust-accelerated forward only; backward (implicit diff) is pure PyTorch
DiffNano
- FDTD does not match MEEP or Tidy3D in feature completeness (PML variants, dispersive
materials, subpixel smoothing)
- RCWA eigendecomposition backward uses broadening-based stabilization (similar to
published TORCWA approach); not the primary differentiator
- 3D FDTD is CPU-only and slow; no multi-GPU support (FDTDX occupies that niche)
- Metalens workflow uses simplified PSF approximation, not full SOCS
- GDSII export is via gdstk; no direct interface to commercial mask writers
diff-surrogate
- Provides surrogate models and convergence utilities only; no physics solvers
- No GPU-specific optimizations beyond standard PyTorch CUDA
- Ensemble uncertainty is epistemic (model disagreement), not calibrated Bayesian