Skip to main content

A PyTorch based package for designing and analyzing optical devices, utilzing the Rigorous Diffraction Interface Theory (R-DIT).

Project description

TorchRDIT

PyPI - Version PyPI - Python Version PyPI - License CI

TorchRDIT is an advanced software package designed for the inverse design of meta-optics devices, utilizing an eigendecomposition-free implementation of Rigorous Diffraction Interface Theory (R-DIT). It provides a GPU-accelerated and fully differentiable framework powered by PyTorch, enabling the efficient optimization of photonic structures.

This framework achieves up to 16.2× speedup compared to traditional inverse design methods based on Rigorous Coupled-Wave Analysis (RCWA). By integrating differentiable R-DIT with topology optimization techniques and neural networks (e.g., SIREN), TorchRDIT facilitates the design of complex meta-optics devices, including:

  • Parameter-constrained and free-form meta-atoms.
  • Reconfigurable photonic structures using optical phase-change materials.
  • High-performance meta-lenses and beam deflectors.

With its focus on computational efficiency and flexibility, TorchRDIT lays the foundation for next-generation metasurface design workflows, offering capabilities for the creation of intricate and multifunctional photonic devices.

TorchRDIT is used for the papers:


Features

The EM algorithms used in this package are Rigorous Diffraction Interface Theory (R-DIT) and Rigorous Coupled Wave Analysis (RCWA) . The solver is developed on an automatic differentiable framework (PyTorch) and is fully differentiable for more advanced applications.

Key Capabilities

  • Eigendecomposition-free R-DIT: Up to 16.2× speedup over traditional RCWA
  • Full differentiability: Seamless integration with gradient-based optimization
  • GPU acceleration: CUDA and MPS backend support
  • GDS Export/Import: Industry-standard format for fabrication workflows
    • Export photonic masks to GDS format
    • Import masks from GDS vertex data
    • Support for complex geometries with holes
    • Batch processing for multiple designs
  • Material handling: Dispersive materials with automatic fitting
  • Flexible geometry: Arbitrary unit cells and lattice systems

Fast Fourier Factorization

TorchRDIT’s FFF implementation follows the tangent-field techniques popularized by fmmax and S4, but is written entirely in PyTorch (torchrdit/src/torchrdit/vector.py). When is_use_FFF=True, the solver automatically instantiates the tangent generator, yet you can also invoke it explicitly via compute_tangent_field:

from torchrdit.vector import compute_tangent_field

tx, ty = compute_tangent_field(
    mask.float(),
    XO=solver.XO,
    YO=solver.YO,
    lattice_t1=solver.lattice_t1,
    lattice_t2=solver.lattice_t2,
    harmonics=tuple(int(k) for k in solver.harmonics),
    scheme="POL",  # POL, NORMAL, JONES, or JONES_DIRECT
)

Choose between the four built-in schemes—POL, NORMAL, JONES, JONES_DIRECT—to match the field representation expected by your Fourier factorization workflow while keeping gradients intact.

For background on the algorithmic formulation see:

  • M. F. Schubert and A. M. Hammond, "Fourier modal method for inverse design of metasurface-enhanced micro-LEDs," Opt. Express 31, 42945 (2023).
  • V. Liu and S. Fan, "S4 : A free electromagnetic solver for layered periodic structures," Computer Physics Communications 183, 2233–2244 (2012).

Installation

You can install the package directly from PyPI:

pip install torchrdit

Dependencies

  • torch>=2.5.1
  • numpy>=2.2.0
  • scipy>=1.15.3
  • scikit-image>=0.25.2
  • matplotlib>=3.10.3
  • tqdm>=4.67.1
  • pyyaml>=6.0.2
  • ruff>=0.12.2
  • gdstk>=0.9.60

Note: The gdstk library may require additional system dependencies:

  • zlib - compression library
  • qhull - computational geometry library

These are typically available through your system's package manager (e.g., apt-get install libz-dev libqhull-dev on Ubuntu).


Usage

TorchRDIT includes several example files to demonstrate its capabilities:

R-DIT Algorithm Examples

  • example_gmrf_rdit.py: GMRF with hexagonal unit cells using R-DIT algorithm

Dispersive Materials Examples

  • example_gmrf_dispersive.py: GMRF with dispersive materials and permittivity fitting

Design Optimization Examples

  • example_gmrf_variable_optimize.py: Demonstration of parameter optimization using automatic differentiation

GDS Export/Import Examples

  • example_gds_export.py: Comprehensive GDS functionality demonstration

Quick GDS Example

from torchrdit.shapes import ShapeGenerator
from torchrdit.gds import mask_to_gds, gds_to_mask

# Create shape and export to GDS
shape_gen = ShapeGenerator(X, Y, grids)
mask = shape_gen.generate_circle_mask(center=(0, 0), radius=0.5)
mask_to_gds(mask, shape_gen.get_layout(), "DEVICE", "output.gds")

# Import from GDS
reconstructed = gds_to_mask("output.json", shape_gen)

For more detailed documentation, please visit our Wiki.


Related Works


Citation

The package contains the work from multiple publicatinos. Please consider to cithe the following paper for the R-DIT solver:

Yi Huang, Ziwei Zhu, Yunxi Dong, Hong Tang, Bowen Zheng, Viktor A. Podolskiy, and Hualiang Zhang, "Eigendecomposition-free inverse design of meta-optics devices," Opt. Express 32, 13986-13997 (2024)
@article{Huang:24,
author = {Yi Huang and Ziwei Zhu and Yunxi Dong and Hong Tang and Bowen Zheng and Viktor A. Podolskiy and Hualiang Zhang},
journal = {Opt. Express},
keywords = {Diffraction theory; Finite-difference time-domain method; Inverse design; Machine learning; Neural networks; Refractive index},
number = {8},
pages = {13986--13997},
publisher = {Optica Publishing Group},
title = {Eigendecomposition-free inverse design of meta-optics devices},
volume = {32},
month = {Apr},
year = {2024},
url = {https://opg.optica.org/oe/abstract.cfm?URI=oe-32-8-13986},
doi = {10.1364/OE.514347},
abstract = {The inverse design of meta-optics has received much attention in recent years. In this paper, we propose a GPU-friendly inverse design framework based on improved eigendecomposition-free rigorous diffraction interface theory, which offers up to 16.2\&\#x2009;\&\#x00D7; speedup over the traditional inverse design based on rigorous coupled-wave analysis. We further improve the framework\&\#x2019;s flexibility by introducing a hybrid parameterization combining neural-implicit and traditional shape optimization. We demonstrate the effectiveness of our framework through intricate tasks, including the inverse design of reconfigurable free-form meta-atoms.},
}

License

This project is licensed under the GPL-3.0 License. See the LICENSE file for details.


Feedback and Support

If you have any questions, issues, or suggestions, please open an issue or email us at yi_huang at student dot uml dot edu.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

torchrdit-0.2.0.tar.gz (3.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

torchrdit-0.2.0-py3-none-any.whl (173.2 kB view details)

Uploaded Python 3

File details

Details for the file torchrdit-0.2.0.tar.gz.

File metadata

  • Download URL: torchrdit-0.2.0.tar.gz
  • Upload date:
  • Size: 3.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for torchrdit-0.2.0.tar.gz
Algorithm Hash digest
SHA256 f04ad2d91006a0713dfc2a004110319e5fc7a5317457de84c71ae2b91f69efb0
MD5 c0b62534c357705c09be84d29ca658cf
BLAKE2b-256 7c0706d74c115d66027982f7805db69b5a0cab6d5a35667c000151c47d2114b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for torchrdit-0.2.0.tar.gz:

Publisher: ci.yml on yi-huang-1/torchrdit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file torchrdit-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: torchrdit-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 173.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for torchrdit-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3d8220f3b1edf3117e4851828c463ada7fef3d27731d418dcff2771d866c6cc5
MD5 a81b31c6bc376731c50fab32e35264fe
BLAKE2b-256 7b53cccf6cb37b0977ff565ba13ec1d571245f837234dd06d841377203b39921

See more details on using hashes here.

Provenance

The following attestation bundles were made for torchrdit-0.2.0-py3-none-any.whl:

Publisher: ci.yml on yi-huang-1/torchrdit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page