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.

Directional coupler benchmark

Benchmarks Luminescent against Tidy3D and Lumerical FDTD using the directional coupler from Liu & Poon, arXiv:2506.16665, Sec. 3.1. The device is GDSFactory’s generic coupler: two 500 nm × 220 nm Si arms, a 236 nm gap, and a 20 µm coupling length, with 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: 42 × 6.5 × 2.22 µm³ (the paper uses 42 × 7 × 4 µm³). TE0 enters o1 (lower left) at 1550 nm with a λ/12 source bandwidth (the paper uses 20 nm). The energy shutoff is 1e-4 (1e-3 for nres ≤ 10; the paper uses 1e-5). We report the cross-port (o3) transmission, the excess loss, the solve time, and the peak memory against resolution.

Paper values (Tidy3D 2.7.7 on cloud A100 GPUs, Lumerical 2025 R1 on a 24-core CPU):

nresTidy3D cross TLumerical cross TTidy3D timeLumerical timeLumerical memory
669.7 %49.3 %17 s148 s0.35 GB
10––35 s336 s0.92 GB
1544.8 %41.1 %66 s1293 s2.42 GB

Setup

lumi backend: ~/Luminescent/bin/lumi

Simulate

<Figure size 800x600 with 1 Axes>
<Figure size 640x480 with 2 Axes>
using simulation folder runs/dc_nres6
========================================
backend using simulation folder runs/dc_nres6
========================================
setting up simulation...
processing geometry bodies...
generating voxels...
voxelation: 10.947417 seconds (509.27 M allocations: 20.249 GiB, 27.56% gc time, 128.57% compilation time)
Yee mode λ=0.9935: neff 2.4904
Yee mode λ=1.0: neff 2.4779
Yee mode λ=1.0065: neff 2.4654
making sources o1 ...
making monitors o1 o2 o3 o4 ...
========================================
run: runs/dc_nres6
processor: GPU
cpu threads: 48

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

sources
   o1: -11, -1.63, 0 

monitors
   o1: -10, -1.63, 0 
   o2: -10, 2.37, 0 
   o3: 30, 2.37, 0 
   o4: 30, -1.63, 0 

original size: (566, 94, 26)
padded size: (617, 118, 44)
cell count: 3,203,464

step size: 43.0 steps/period
source duration: 3.93 periods

max time: 1,000 periods
max steps: 43,000
max load: 137,748,952,000 cell-steps
energy decay threshold: 0.001

========================================
running simulation...
accumulating dft field...
period 10, decay: 0.96, 1.49 seconds/period, 92.22 Mcells/s
period 20, decay: 0.95, 0.014 seconds/period, 9784.0 Mcells/s
period 30, decay: 0.94, 0.014 seconds/period, 9827.27 Mcells/s
period 40, decay: 0.94, 0.013 seconds/period, 10651.21 Mcells/s
period 50, decay: 0.94, 0.013 seconds/period, 10855.54 Mcells/s
period 60, decay: 0.94, 0.014 seconds/period, 9930.49 Mcells/s
period 70, decay: 0.94, 0.013 seconds/period, 10796.22 Mcells/s
period 80, decay: 0.94, 0.013 seconds/period, 10771.31 Mcells/s
period 90, decay: 0.93, 0.013 seconds/period, 10729.2 Mcells/s
period 100, decay: 0.92, 0.015 seconds/period, 9247.08 Mcells/s
period 110, decay: 0.9, 0.013 seconds/period, 10775.44 Mcells/s
period 120, decay: 0.72, 0.013 seconds/period, 10750.96 Mcells/s
period 130, decay: 0.183, 0.015 seconds/period, 9428.14 Mcells/s
period 140, decay: 0.025, 0.013 seconds/period, 10914.89 Mcells/s
period 150, decay: 0.01, 0.012 seconds/period, 11171.22 Mcells/s
period 160, decay: 0.007, 0.015 seconds/period, 9448.71 Mcells/s
period 170, decay: 0.006, 0.012 seconds/period, 11117.84 Mcells/s
period 180, decay: 0.006, 0.015 seconds/period, 9397.01 Mcells/s
period 190, decay: 0.005, 0.013 seconds/period, 10790.21 Mcells/s
period 200, decay: 0.005, 0.013 seconds/period, 10776.03 Mcells/s
period 210, decay: 0.004, 0.014 seconds/period, 9903.24 Mcells/s
period 220, decay: 0.004, 0.013 seconds/period, 10792.92 Mcells/s
period 230, decay: 0.003, 0.012 seconds/period, 11076.01 Mcells/s
period 240, decay: 0.002, 0.013 seconds/period, 10668.04 Mcells/s
period 244.09 stop on energy decay
10389.65 Mcells/s
simulation completed.
{'runtime': 137.52924180030823, 'gpu_GB': 1.3603515625, 'host_GB': 2.5383262634277344}
<Figure size 800x600 with 1 Axes>
<Figure size 640x480 with 2 Axes>
using simulation folder runs/dc_nres10
========================================
backend using simulation folder runs/dc_nres10
========================================
setting up simulation...
processing geometry bodies...
generating voxels...
voxelation: 27.278463 seconds (1.40 G allocations: 53.044 GiB, 35.67% gc time, 54.05% compilation time)
Yee mode λ=0.9935: neff 2.4662
Yee mode λ=1.0: neff 2.4544
Yee mode λ=1.0065: neff 2.4427
making sources o1 ...
making monitors o1 o2 o3 o4 ...
========================================
run: runs/dc_nres10
processor: GPU
cpu threads: 48

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

sources
   o1: -11, -1.63, 0 

monitors
   o1: -10, -1.63, 0 
   o2: -10, 2.37, 0 
   o3: 30, 2.37, 0 
   o4: 30, -1.63, 0 

original size: (944, 151, 41)
padded size: (1027, 189, 68)
cell count: 13,199,004

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

max time: 1,000 periods
max steps: 68,000
max load: 897,532,272,000 cell-steps
energy decay threshold: 0.001

========================================
running simulation...
accumulating dft field...
period 10, decay: 0.97, 1.57 seconds/period, 571.02 Mcells/s
period 20, decay: 0.97, 0.107 seconds/period, 8423.7 Mcells/s
period 30, decay: 0.96, 0.104 seconds/period, 8612.45 Mcells/s
period 40, decay: 0.96, 0.101 seconds/period, 8888.18 Mcells/s
period 50, decay: 0.96, 0.099 seconds/period, 9084.59 Mcells/s
period 60, decay: 0.96, 0.099 seconds/period, 9096.54 Mcells/s
period 70, decay: 0.96, 0.098 seconds/period, 9132.22 Mcells/s
period 80, decay: 0.96, 0.098 seconds/period, 9164.78 Mcells/s
period 90, decay: 0.96, 0.098 seconds/period, 9170.14 Mcells/s
period 100, decay: 0.95, 0.098 seconds/period, 9173.61 Mcells/s
period 110, decay: 0.92, 0.101 seconds/period, 8927.29 Mcells/s
period 120, decay: 0.52, 0.098 seconds/period, 9175.69 Mcells/s
period 130, decay: 0.002, 0.098 seconds/period, 9179.19 Mcells/s
period 135.53 stop on energy decay
8930.73 Mcells/s
simulation completed.
{'runtime': 157.68253374099731, 'gpu_GB': 3.6103515625, 'host_GB': 3.8725433349609375}
<Figure size 800x600 with 1 Axes>
<Figure size 640x480 with 2 Axes>
using simulation folder runs/dc_nres15
========================================
backend using simulation folder runs/dc_nres15
========================================
setting up simulation...
processing geometry bodies...
generating voxels...
voxelation: 39.680508 seconds (3.35 G allocations: 124.395 GiB, 33.61% gc time, 62.37% compilation time)
Yee mode λ=0.9935: neff 2.4597
Yee mode λ=1.0: neff 2.4483
Yee mode λ=1.0065: neff 2.4368
making sources o1 ...
making monitors o1 o2 o3 o4 ...
========================================
run: runs/dc_nres15
processor: GPU
cpu threads: 48

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

sources
   o1: -11, -1.63, 0 

monitors
   o1: -10, -1.63, 0 
   o2: -10, 2.37, 0 
   o3: 30, 2.37, 0 
   o4: 30, -1.63, 0 

original size: (1414, 217, 59)
padded size: (1539, 271, 96)
cell count: 40,038,624

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

max time: 1,000 periods
max steps: 101,000
max load: 4,043,901,024,000 cell-steps
energy decay threshold: 0.0001

========================================
running simulation...
accumulating dft field...
period 10, decay: 0.97, 1.96 seconds/period, 2065.48 Mcells/s
period 20, decay: 0.96, 0.56 seconds/period, 7196.84 Mcells/s
period 30, decay: 0.96, 0.56 seconds/period, 7267.09 Mcells/s
period 40, decay: 0.96, 0.55 seconds/period, 7388.42 Mcells/s
period 50, decay: 0.96, 0.53 seconds/period, 7686.33 Mcells/s
period 60, decay: 0.96, 0.53 seconds/period, 7686.16 Mcells/s
period 70, decay: 0.96, 0.53 seconds/period, 7686.1 Mcells/s
period 80, decay: 0.96, 0.53 seconds/period, 7657.71 Mcells/s
period 90, decay: 0.95, 0.53 seconds/period, 7658.56 Mcells/s
period 100, decay: 0.95, 0.53 seconds/period, 7660.89 Mcells/s
period 110, decay: 0.92, 0.53 seconds/period, 7686.09 Mcells/s
period 120, decay: 0.127, 0.53 seconds/period, 7685.75 Mcells/s
period 130, decay: 0.002, 0.53 seconds/period, 7686.39 Mcells/s
period 140, decay: 0.001, 0.53 seconds/period, 7686.17 Mcells/s
period 150, decay: 0.001, 0.53 seconds/period, 7654.03 Mcells/s
period 160, decay: 0.001, 0.54 seconds/period, 7553.68 Mcells/s
period 170, decay: 0.001, 0.53 seconds/period, 7686.14 Mcells/s
period 180, decay: 0.001, 0.53 seconds/period, 7653.88 Mcells/s
period 190, decay: 0.001, 0.53 seconds/period, 7687.95 Mcells/s
period 200, decay: 0.001, 0.53 seconds/period, 7686.03 Mcells/s
period 210, decay: 0.001, 0.53 seconds/period, 7686.28 Mcells/s
period 220, decay: 0.001, 0.53 seconds/period, 7658.04 Mcells/s
period 230, decay: 0.0, 0.53 seconds/period, 7659.09 Mcells/s
period 231.92 stop on energy decay
7614.26 Mcells/s
simulation completed.
{'runtime': 287.3348059654236, 'gpu_GB': 11.5478515625, 'host_GB': 5.112232208251953}

Results

loading solution from runs/dc_nres6
may take a minute if simulation folder is remotely mounted
loading solution from runs/dc_nres10
may take a minute if simulation folder is remotely mounted
loading solution from runs/dc_nres15
may take a minute if simulation folder is remotely mounted
nres  cross T  through T  excess loss  runtime  GPU mem  host mem
   6    43.6 %     51.4 %     0.223 dB    138 s   1.36 GB   2.54 GB
  10    41.3 %     57.8 %     0.040 dB    158 s   3.61 GB   3.87 GB
  15    43.3 %     55.8 %     0.038 dB    287 s  11.55 GB   5.11 GB
<Figure size 1000x400 with 2 Axes>

Fig. 4a comparison

<Figure size 500x350 with 1 Axes>

Movie