gds_fdtd

EDA- and solver-agnostic 3D FDTD simulation framework for photonic layouts: GDS in, S-parameters, fields, and compact models out - tidy3d, Lumerical, or beamz behind one API.

gds_fdtd takes one component, one technology file, and one SimulationSpec, and runs the identical job on any engine: tidy3d (cloud), Ansys Lumerical (local), or beamz (free, JAX), behind a single get_solver(name) contract. The three engines agree within 0.052 dB on an identical job (tidy3d and Lumerical within 0.0033 dB).

from gds_fdtd.technology import Technology
from gds_fdtd.layout.gdsfactory import from_gdsfactory
from gds_fdtd.solvers import get_solver
from gds_fdtd.spec import SimulationSpec
import gdsfactory as gf

tech = Technology.from_yaml("tech.yaml")
gf.gpdk.PDK.activate()
component = from_gdsfactory(gf.components.mmi1x2(), tech)   # any frontend

solver = get_solver("beamz")(component, tech, SimulationSpec())  # any engine
smatrix = solver.run()          # the only call that spends money / a license / GPU
smatrix.to_touchstone("mmi.s3p")
_images/three_engine_agreement.png

The same y-branch, three engines: all land within a few hundredths of a dB of each other and the −3 dB ideal. Reproduced in 07 · Choosing an engine — three solvers, one job.

Start here

Examples gallery

Twelve executed notebooks, from a ten-line quickstart to polarization splitters. Every plot is real solver output.

Examples
API reference

Every public module, class, and function, grouped by topic.

API Reference
Setting up simulations

GDS to S-parameters in four steps, on any engine.

Setting Up Simulations
Technology and materials

The layer stack and the three optical-constant sources (engine model, refractiveindex.info, or a constant).

Technology and Materials
Layout frontends

gdsfactory, SiEPIC/KLayout, raw GDS, PreFab, and how to add your own.

Layout Frontends
Bring your own engine

Any FDTD engine becomes a gds_fdtd solver in four methods.

Adding your own solver

What you can do with it