Skip to content

Directional Coupler with GDSFactory FDTD

Simulate power transfer between two coupled silicon waveguides and compare the through and cross ports.

Requirements: GDSFactory+ cloud simulation access.

You will: build the component, configure the solver, preview the 3D setup, run one cached cloud simulation, and inspect its wavelength response.

1. Build the component

import gdsfactory as gf

from gsim import fdtd

gf.gpdk.PDK.activate()
component = gf.components.coupler(gap=0.236, length=20.0)
component
pyvirtualdisplay not available; continuing without Xvfb

png

2. Configure the simulation

simulation = fdtd.Simulation()
simulation.materials(background="SiO2", overrides={"si": 3.4757})
simulation.geometry(component)
simulation.source(
    port="o1",
    wavelength_um=1.55,
    wavelength_span_um=0.1,
    num_wavelengths=101,
)
simulation.domain(padding_um=1)
simulation.solver(cell_size_nm=60, energy_decay_fraction=1e-5)
Solver(cell_size_nm=60.0, max_timesteps=None, energy_decay_fraction=1e-05, max_wall_seconds=3600.0)

Preview the resolved layer stack, ports, and simulation domain before submitting the job.

simulation.plot_3d()

3. Run and inspect the result

result = simulation.run(check_cache=True)
  fdtd-4e330a56  [####################] 100%  complete  elapsed 8m 04s


Extracting results.tar.gz...
Downloaded 2 files to sim-data-fdtd-4e330a56
result.s_parameters.plot_plotly()

The o3 and o4 traces show wavelength-dependent through and cross coupling. Their powers should remain close to energy conserving for this lossless model.

Try it

Change the coupling length and observe how the power exchange shifts.

# longer_coupler = gf.components.coupler(gap=0.236, length=25.0)
# simulation.geometry(longer_coupler)