OpEnUV — Open Source Extreme Ultraviolet Lithography Simulator
From plasma source to CD metrology — full-stack EUV lithography simulation on your laptop.
| ⚛️ First-principles physics | CXRO atomic scattering → TMM reflectivity → RCWA mask diffraction → Hopkins imaging → Dill ABC resist |
| 🚀 GPU-native | PyTorch autograd throughout — differentiable from mask geometry to CD |
| 🧪 Validated | 455 unit tests, cross-checked against CXRO database, independent literature, and Grok verification |
| 📦 Zero commercial dependencies | Apache 2.0 — fork, modify, deploy freely |
What makes OpEnUV different?
OpEnUV is the only open-source tool that models the complete EUV lithography pipeline from photon to CD:
| Module | Method | OpEnUV | IMD | GD-Calc | OpenLithoHub |
|---|---|---|---|---|---|
| Material constants | CXRO/Henke f₁,f₂ | ✅ | ✅ | ❌ | ❌ |
| Multilayer mirror | Transfer-Matrix (S-matrix) | ✅ | ✅ | ❌ | ❌ |
| Mask diffraction | RCWA 1D/2D + S-matrix cascade | ✅ | ❌ | ✅ | ❌ |
| Aerial image | Hopkins/Abbe + pupil + source | ✅ | ❌ | ❌ | ❌ |
| High-NA optics | Anamorphic 4×/8×, Zernike | ✅ | ❌ | ❌ | ❌ |
| Resist chemistry | Dill ABC + PEB + development | ✅ | ❌ | ❌ | ❌ |
| Plasma source | LPP Sn-droplet spectral model | ✅ | ❌ | ❌ | ❌ |
| Stochastics | Shot noise, LER/LWR | ✅ | ❌ | ❌ | ✅ |
| CD metrology | Process window, Bossung | ✅ | ❌ | ❌ | ❌ |
| Optimization | Differentiable OPC/ILT bridge | ✅ | ❌ | ❌ | ✅ |
| Web API | REST + dashboard | ✅ | ❌ | ❌ | ❌ |
IMD is the gold standard for multilayer reflectivity. GD-Calc solves rigorous coupled-wave analysis. OpenLithoHub benchmarks OPC quality. OpEnUV is the only tool that connects all the physics — from plasma spectrum through mask diffraction to developed resist profile.
Validated test calculations
All results independently verified against the CXRO/Henke database and literature values.
Full details in testberechnungen.md.
| Test | Result | Method |
|---|---|---|
| Mo optical constants (91.84 eV) | n = 0.92335, k = 0.00647 | CXRO database interpolation |
| Si optical constants (91.84 eV) | n = 0.99900, k = 0.00183 | CXRO database interpolation |
| Mo/Si multilayer 50 BL @ 6° | R = 64.7% (ideal) / 60.6% (σ=0.5 nm) | S-matrix TMM + Névot-Croce |
| Wavelength: 13.5 nm | — | E = hc/λ = 91.84 eV |
| Illumination: NA 0.33 | Conventional, σ = 0.8 | Dipole / annular / quasar |
| Aerial image NILS | 4.36 @ 64 nm pitch, 32 nm CD | Hopkins formulation |
| Process window | CD vs. dose × focus | Bossung plot |
"The calculations are solid and physically sound." — Grok (independent review, 2026-07-09)
Quick start
pip install openuv # install from PyPI
pip install -e ".[dev]" # or from source (development)
# End-to-end simulation
euv simulate --period=64 --cd=32 --dose=20
# Process window (dose-focus Bossung plot)
euv process-window --period=64 --cd=32
# Web dashboard
euv serve
# → http://localhost:8000
# Query material database
euv materials Mo --energy=91.84
# Performance benchmark
euv bench
Or from Python:
from euv.pipeline import SimulationConfig, run_simulation
cfg = SimulationConfig(
period_nm=64, line_width_nm=32,
dose_mj_cm2=20, na=0.33, sigma=0.8,
resist_model="full_chem",
)
result = run_simulation(cfg)
print(f"CD = {result.cd_nm:.1f} nm")
print(f"NILS = {result.nils_value:.3f}")
Architecture
src/euv/
├── source/ LPP Sn-plasma emission model (spectrum + dose)
├── materials/ CXRO atomic scattering factors f₁,f₂ (Z = 1–92)
├── optics/ Multilayer TMM (S-matrix, Névot-Croce, grading)
├── mask3d/ RCWA 1D/2D Fourier Modal Method (stable S-matrix)
├── aerial/ Abbe/Hopkins imaging, pupil, source shapes
├── resist/ Dill ABC exposure, PEB, development, shot noise
├── io/ CLI, GDSII, rasterization
├── metro/ CD metrology, process window, SEM rendering
├── opc/ Differentiable OpenILT bridge
├── accel/ GPU acceleration + VRAM management
├── etch/ Etch bias model
├── calibrate/ Wafer calibration (scipy optimisation)
├── api/ FastAPI REST server + web dashboard
└── pipeline.py End-to-end simulation orchestration
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
│ SOURCE │ → │ MASK │ → │OPTICS │ → │ AERIAL │ → │ RESIST │ → │ METRO │
│ LPP Sn │ │ RCWA │ │ TMM │ │Hopkins│ │Dill ABC│ │ CD/PW │
└────────┘ └────────┘ └────────┘ └────────┘ └────────┘ └────────┘
CLI reference
| Command | Description |
|---|---|
euv simulate |
Full end-to-end simulation (CLI args or YAML/JSON config) |
euv process-window |
Dose-focus Bossung grid → DoF + EL |
euv make-mask |
Generate line/space test mask (GDSII) |
euv materials |
List elements / query n + ik at any photon energy |
euv serve |
Launch the REST API + web dashboard |
euv bench |
Performance benchmark |
euv info |
System + module overview |
Tutorials
| Notebook | Description |
|---|---|
basic_simulation.ipynb |
Run your first EUV simulation |
materials.ipynb |
Query CXRO optical constants |
process_window.ipynb |
Compute a Bossung plot |
Project status
| Milestone | Status |
|---|---|
| Project scaffold & CXRO materials | ✅ |
| Multilayer optics (S-matrix TMM) | ✅ |
| Mask 3D (RCWA 1D + 2D) | ✅ |
| Aerial image (Abbe/Hopkins) | ✅ |
| High-NA imaging (anamorphic) | ✅ |
| End-to-end pipeline | ✅ |
| LPP source model | ✅ |
| Resist chemistry (Dill ABC + PEB) | ✅ |
| Stochastic effects (shot noise, LER/LWR) | ✅ |
| CD metrology & process window | ✅ |
| Inverse lithography (OpenILT bridge) | ✅ |
| GPU acceleration | ✅ |
| REST API + web UI | ✅ |
| Tutorials & documentation | ✅ |
| Docker deployment | ✅ |
| CI/CD pipeline | ✅ |
| Test count | 455 / 455 passing |
| License | Apache 2.0 |
| PyPI | 🔜 |
| v1.0 release | 🔜 |
Benchmark: small system performance
| Config | Grid | Orders | Time (CPU) | Time (GPU) |
|---|---|---|---|---|
| Small | 256×256 | 21 | ~0.1 s | — |
| Medium | 512×512 | 31 | ~0.3 s | — |
| Standard | 1024×1024 | 51 | ~1.2 s | ~0.1 s |
Documentation
Full Sphinx documentation at docs/:
License
Apache 2.0 — see LICENSE.
How to contribute
We welcome contributions! See CONTRIBUTING.md for guidelines.
- 🐛 Open an issue for bugs
- 💡 Start a discussion for features
- 🔀 Submit pull requests on the
mainbranch - 📝 Improve documentation or add tutorials
- 🎓 If you use OpEnUV in research, cite it! (citation coming with v1.0)
Support
PayPal: gofter@web.de — send via PayPal Friends & Family
Development supported by GitHub Sponsors and PayPal donations. OpEnUV is open source — contributions welcome. ❤️
Metadata
Release files for openuv 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| openuv-1.0.1.tar.gz | 694.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| openuv-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.4 MB
Release files / openuv-1.0.1.tar.gz
| Download URL | openuv-1.0.1.tar.gz |
|---|---|
| Size | 694.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
48dee946c8870c986fbf8d2d2ab8efd6d126599d301bf4d4ff1925fb0af0f53b
|
|
BLAKE2b-256 checksum How to use checksums |
eb1bf5bf90d05a79fd6fbd5dfd8a3e30cc9dde03063a4c02abc1ffc8b70820d8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.13
|
Release files / openuv-1.0.1-py3-none-any.whl
| Download URL | openuv-1.0.1-py3-none-any.whl |
|---|---|
| Size | 721.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
df088ab00b16d7e090c1f9ac6e6ef79c81081ad2b328c3e91dafa9e85ee9644b
|
|
BLAKE2b-256 checksum How to use checksums |
71ba23bf2d532867967d177117e090bb3fff135349316f6a9cf05ac10cc38d2f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.13
|