Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Mode converter benchmark

Benchmarks Luminescent against Tidy3D and Lumerical FDTD using the mode converter from Liu & Poon, arXiv:2506.16665, Sec. 3.4. The device is GDSFactory’s generic mode_converter(gap=0.15, length=20): TE0 in a 500 nm waveguide couples to TE1 in a 1 µm waveguide over a 20 µm section, with 25 µm tapers to 1.2 µm. The narrow-arm S-bend is two 45° Euler bends as in the paper’s GDSFactory 7.8 version. Every port waveguide runs into the PML (the paper’s 10 µm extensions end inside the domain at the narrow ports). 220 nm Si, SiO2 cladding above and below. Si uses a lossless Lorentzian fit to the paper’s Palik model (n = 3.4729 at 1550 nm); SiO2 is constant n = 1.4425. The domain is the device plus 1 µm margins (the paper uses 72 × 10.5 × 4 µm³). TE0 enters the narrow input o2 with a λ/12 source bandwidth (the paper uses 20 nm). We report TE1 transmission and TE0 crosstalk at the wide output o3 (the paper’s cross port), sampled every 0.5 nm. The energy shutoff is 1e-5.

Paper values (Tidy3D 2.7.7 on cloud GPUs, Lumerical 2025 R1 on a 24-core CPU; transmission and crosstalk digitized from Fig. 16):

nresTE1 Tidy3D / Lumericalcrosstalk Tidy3D / Lumerical [dB]Tidy3D timeLumerical timeLumerical memory
60.357 / 0.966−39.6 / −47.363 s760 s0.71 GB
100.261 / 0.512−34.2 / −38.6517 s3599 s2.15 GB
150.492 / 0.443−35.4 / −37.3415 s14417 s6.00 GB
200.479 / 0.482−35.3 / −38.1124 s40710 s12.90 GB
250.430 / 0.512−35.6 / −36.91997 s91484 s23.63 GB

Setup

lumi backend: ~/Luminescent/bin/lumi

Simulate

~/.local/lib/python3.14/site-packages/cachetools/_cached.py:185: UserWarning: bend_euler angle should be 90 or 180. Got 45. Use bend_euler_all_angle instead.
  v = func(*args, **kwargs)
<Figure size 800x600 with 1 Axes>
<Figure size 640x480 with 2 Axes>
<Figure size 640x480 with 2 Axes>
using simulation folder runs/mc_nres15
========================================
backend using simulation folder runs/mc_nres15
========================================
setting up simulation...
processing geometry bodies...
generating voxels...
voxelation: 56.549142 seconds (5.86 G allocations: 211.742 GiB, 42.24% gc time, 54.33% compilation time)
Yee mode λ=0.9935: neff 2.2378
Yee mode λ=1.0: neff 2.2246
Yee mode λ=1.0065: neff 2.2116
Yee mode λ=0.9935: neff 2.7322
Yee mode λ=0.9935: neff 2.3194
Yee mode λ=0.9935: neff 1.7757
Yee mode λ=1.0: neff 2.7246
Yee mode λ=1.0: neff 2.3057
Yee mode λ=1.0: neff 1.7673
Yee mode λ=1.0065: neff 2.717
Yee mode λ=1.0065: neff 2.292
Yee mode λ=1.0065: neff 1.7591
making sources o2 ...
making monitors o2 o3 o4 ...
========================================
run: runs/mc_nres15
processor: GPU
cpu threads: 48

nres: 15.0
courant: 0.9
subpixel_smoothing: 1
  
boundaries: [:PML :PML; :PML :PML; :PML :PML]

sources
   o2: -15.14, 6.76, 0 

monitors
   o2: -14.14, 6.76, 0 
   o3: 45, 0, 0 
   o4: 34.14, 6.76, 0 

original size: (2426, 310, 59)
padded size: (2550, 364, 96)
cell count: 89,107,200

step size: 77.0 steps/period
source duration: 3.94 periods

max time: 2,000 periods
max steps: 154,000
max load: 13,722,508,800,000 cell-steps
energy decay threshold: 1.0e-5

========================================
running simulation...
accumulating dft field...
period 10, decay: 0.93, 2.32 seconds/period, 2951.88 Mcells/s
period 20, decay: 0.92, 0.89 seconds/period, 7749.11 Mcells/s
period 30, decay: 0.89, 0.87 seconds/period, 7841.49 Mcells/s
period 40, decay: 0.455, 0.87 seconds/period, 7881.87 Mcells/s
period 50, decay: 0.455, 0.86 seconds/period, 7956.29 Mcells/s
period 60, decay: 0.454, 0.85 seconds/period, 8033.51 Mcells/s
period 70, decay: 0.454, 0.85 seconds/period, 8114.42 Mcells/s
period 80, decay: 0.454, 0.85 seconds/period, 8047.78 Mcells/s
period 90, decay: 0.453, 0.84 seconds/period, 8138.65 Mcells/s
period 100, decay: 0.453, 0.85 seconds/period, 8114.22 Mcells/s
period 110, decay: 0.452, 0.85 seconds/period, 8118.16 Mcells/s
period 120, decay: 0.451, 0.85 seconds/period, 8118.09 Mcells/s
period 130, decay: 0.451, 0.85 seconds/period, 8117.9 Mcells/s
period 140, decay: 0.449, 0.85 seconds/period, 8117.76 Mcells/s
period 150, decay: 0.446, 0.85 seconds/period, 8117.98 Mcells/s
period 160, decay: 0.438, 0.85 seconds/period, 8118.72 Mcells/s
period 170, decay: 0.415, 0.85 seconds/period, 8118.06 Mcells/s
period 180, decay: 0.054, 0.85 seconds/period, 8114.44 Mcells/s
period 190, decay: 0.001, 0.85 seconds/period, 8118.38 Mcells/s
period 200, decay: 0.001, 0.85 seconds/period, 8118.11 Mcells/s
period 210, decay: 0.001, 0.85 seconds/period, 8117.95 Mcells/s
period 220, decay: 0.001, 0.85 seconds/period, 8117.99 Mcells/s
period 230, decay: 0.001, 0.85 seconds/period, 8118.02 Mcells/s
period 240, decay: 0.001, 0.85 seconds/period, 8118.05 Mcells/s
period 250, decay: 0.001, 0.85 seconds/period, 8118.1 Mcells/s
period 260, decay: 0.001, 0.85 seconds/period, 8117.4 Mcells/s
period 270, decay: 0.001, 0.85 seconds/period, 8117.92 Mcells/s
period 280, decay: 0.001, 0.85 seconds/period, 8118.34 Mcells/s
period 290, decay: 0.001, 0.85 seconds/period, 8117.86 Mcells/s
period 300, decay: 0.001, 0.85 seconds/period, 8118.06 Mcells/s
period 310, decay: 0.001, 0.85 seconds/period, 8118.21 Mcells/s
period 320, decay: 0.0, 0.85 seconds/period, 8114.36 Mcells/s
period 330, decay: 0.0, 0.85 seconds/period, 8047.48 Mcells/s
period 340, decay: 0.0, 0.85 seconds/period, 8119.06 Mcells/s
period 350, decay: 0.0, 0.85 seconds/period, 8118.07 Mcells/s
period 360, decay: 0.0, 0.85 seconds/period, 8118.26 Mcells/s
period 370, decay: 0.0, 0.85 seconds/period, 8118.06 Mcells/s
period 380, decay: 0.0, 0.85 seconds/period, 8118.02 Mcells/s
period 380.68 stop on energy decay
8082.85 Mcells/s
simulation completed.
{'runtime': 532.9318134784698, 'gpu_GB': 25.8603515625, 'host_GB': 10.239059448242188}

Mode identification

mode 0: TE fraction 0.985, parity +1.00
mode 1: TE fraction 0.931, parity -1.00
mode 2: TE fraction 0.038, parity +1.00
TE0 = mode 0, TE1 = mode 1

Results

mode 0: TE fraction 0.990, parity +1.00
mode 1: TE fraction 0.955, parity -1.00
mode 2: TE fraction 0.038, parity +1.00
loading solution from runs/mc_nres6
may take a minute if simulation folder is remotely mounted
mode 0: TE fraction 0.999, parity +1.00
mode 1: TE fraction 0.995, parity -1.00
mode 2: TE fraction 0.975, parity +1.00
loading solution from runs/mc_nres10
may take a minute if simulation folder is remotely mounted
mode 0: TE fraction 0.985, parity +1.00
mode 1: TE fraction 0.931, parity -1.00
mode 2: TE fraction 0.038, parity +1.00
loading solution from runs/mc_nres15
may take a minute if simulation folder is remotely mounted
nres  TE1 cross  crosstalk  through  reflect  runtime  GPU mem  host mem
   6      0.502   -59.6 dB    0.407   0.0061    146 s  12.39 GB   2.60 GB
  10      0.510   -34.3 dB    0.431   0.0055    229 s  12.37 GB   4.56 GB
  15      0.456   -33.9 dB    0.495   0.0028    533 s  25.86 GB  10.24 GB
<Figure size 1000x380 with 2 Axes>

Fig. 16a, c comparison

<Figure size 1000x350 with 2 Axes>

Movie

Loading...