# Compact polarization splitter-rotator — TE/TM routing

<span class="validation-badge">validated · 2026-08-28</span>

<div class="case-meta"><span>forward</span><span>resolution 1</span><span>device</span><span>real_world</span><span>polarization</span><span>mode_conversion</span><span>directional_coupler</span><span>tidy3d_golden</span><span>official_notebook</span></div>

This case compares a local FDTDX result with pinned reference data generated by Tidy3D. The originating Tidy3D example is [`PolarizationSplitterRotator.ipynb`](https://github.com/flexcompute/tidy3d-notebooks/blob/c37c785d52e9258c9d048a781524b8e8d7c758ca/PolarizationSplitterRotator.ipynb), pinned at commit `c37c785d52e9`.

::::{grid} 1

:::{grid-item-card} Open the complete executed tutorial →
:link: ../notebooks/polarization_splitter_rotator
:link-type: doc
:class-card: device-ladder-card

Parameters → exact geometry → voxelized material → local FDTDX run → simulated field → quantitative analysis. Every code cell and retained output is visible, and the `.ipynb` source is downloadable.
:::

::::

This page is the compact benchmark record. The linked notebook is the primary scientific documentation and contains the actual simulation evidence.


## What is exercised

The official asymmetric silicon taper and directional coupler retain their 540/690/830/900 nm wide-guide widths, 405 nm narrow guide, 150 nm gap, silicon/nitride/oxide stack, full 44 um adiabatic section, and shifted narrow output. Separate TE0 and TM0 launches compare both desired output spectra and enforce that unwanted-port power is no worse than Tidy3D. A matched 30x40x30 nm mesh automatically refines the 150 nm transverse gap and 220 nm device layer while keeping the slowly varying propagation axis coarser.

This case runs at its declared full benchmark resolution (resolution factor 1.0).

## Reconstruction choices

The official device dimensions, material stack, excitations, and measured observable are retained where they determine the physics. The local scene uses **the documented device grid cells** and the common port/source normalization machinery. Geometry is rasterized as connected material before placement when touching polygons would otherwise introduce grid-snapping seams.

The field panel above is explicitly a schematic of the device and propagation path. The curves and scalar values in the result panel are executed benchmark outputs: solid circles are FDTDX; dashed crosses are the frozen Tidy3D reference.


## Recorded result

| Metric | Observed / error | Reference / limit | Error | Effective budget | Result |
|---|---:|---:|---:|---:|---:|
| `te_wide` | 0.00307749 | 0.08 | 0.00307749 | 0.08 | <span class="metric-pass">PASS</span> |
| `te_narrow` | 0 | — | 0 | — | <span class="metric-pass">PASS</span> |
| `tm_narrow_te` | 0.265436 | 0.3 | 0.265436 | 0.3 | <span class="metric-pass">PASS</span> |
| `tm_wide_tm` | 0 | — | 0 | — | <span class="metric-pass">PASS</span> |

The table is rendered from `progress.json`; it is not a hand-written success claim. For metrics that report an error directly, the “observed” column repeats that error and the reference column is the acceptance threshold.

## Reproduce

```bash
uv run fdtdx-bench run --case device_polarization_splitter_rotator
```

Implementation and provenance: `benchmarks/cases/device_polarization_splitter_rotator/case.yaml`, `benchmarks/cases/device_polarization_splitter_rotator/run.py`, `benchmarks/goldens/device_polarization_splitter_rotator.npz`.

[Return to the example atlas](../index.md)
