Documentation
PIC Waveguide Mode Solver
Operating reference for the waveguide mode solver: every geometry and material input, both engines and their accuracy limits, every tab, and the full text of every caveat.
Overview
The tool solves the guided modes of a dielectric waveguide cross-section and derives the quantities a photonic-circuit designer needs from them: effective and group index, confinement, dispersion, bend loss, directional-coupler splitting and fiber-to-chip coupling efficiency.
It has two engines with an honest boundary between them. The free engine is the Effective Index Method (EIM), which runs entirely in the browser and updates as you type. The Pro engine is a full-vectorial finite-difference eigensolver (FDE), which runs on the server as a job. Where EIM is quantitatively unreliable, the tool says so in the interface rather than quietly reporting a number — the caveat set below is the same one you will see in the app.
The free engine computes in the browser with no queue. The Results tab is open to anyone; the Parameter Sweep and Edge Coupler tabs are free but need a signed-in account, and so does CSV export. Anyone can choose the full-vectorial engine; running it needs a signed-in account and FDE Pro or its free trial.
EIM and FDE engines
What EIM does
The Effective Index Method separates the 2-D cross-section into two 1-D slab problems: it first solves the vertical slab to get an effective index for the core region, then feeds that index into a lateral slab problem. It is fast, deterministic and analytic, and it is a genuine approximation — the separable ansatz cannot represent the hybrid field of a high-contrast wire.
Slab n_eff is the effective index of the vertical slab through the core: the first of the Effective index method's two steps, which the second step uses as the core's index. It is not the background (cladding) index a mode must exceed to be guided.
Accuracy summary: n_eff runs +0.05 % (air-clad SiN) to +1.9 % (oxide-clad SOI) on the fundamental TE mode. Derived quantities are worse, and dispersion is worse still. Measured against our own full-vectorial FDE at 1550 nm:
| Geometry (TE₀, 1550 nm) | Quantity | EIM | FDE | EIM error |
|---|---|---|---|---|
| SOI 500 × 220, oxide top | n_eff | 2.4932 | 2.4469 | +1.9 % |
| n_g | 4.031 | 4.194 | −3.9 % | |
| β₂ (ps²/m) | +1.293 | −0.614 | wrong sign | |
| D (ps/(nm·km)) | −1014 | +482 | wrong sign | |
| SOI 500 × 220, air top (default preset) | n_eff | 2.4223 | 2.3859 | +1.5 % |
| n_g | 4.237 | 4.369 | −3.0 % | |
| β₂ | −1.176 | −2.843 | sign OK, −59 % | |
| D | +922 | +2229 | sign OK, −59 % | |
| SiN 1000 × 400, oxide top | n_eff | 1.6525 | 1.6379 | +0.9 % |
| n_g | 2.029 | 2.056 | −1.3 % | |
| β₂ | +1.063 | +0.999 | sign OK, +6.4 % | |
| D | −834 | −783 | sign OK, +6.4 % | |
| SiN 1000 × 400, air top | n_eff | 1.5705 | 1.5697 | +0.05 % |
| n_g | 2.157 | 2.136 | +1.0 % | |
| β₂ | +0.340 | +0.993 | sign OK, −66 % | |
| D | −266 | −778 | sign OK, −66 % |
SOI 500 × 220, oxide top, FDE n_eff: solved on a uniform 10 nm grid, the same step across the whole box. The tool's default solve of this waveguide grades the grid instead (10 nm at the core, coarser toward the edges) and returns 2.4468, lower by 3.2 × 10⁻⁵.
Why the sign fails on the measured oxide-clad strip, in one line: with the material indices frozen, the EIM’s waveguide-dispersion term for the oxide-clad 500 × 220 nm wire is +0.008 ps²/m, so what it reports (+1.293 ps²/m) is almost entirely bulk-silicon GVD; the full-vectorial total is −0.614 ps²/m, and the whole discrepancy sits in the waveguide term. With an air top the EIM’s waveguide term is large and negative, and the sign comes out right at about 40 % of the full-vectorial magnitude. Read EIM dispersion as a sign on air-top guides and not at all on oxide-clad silicon; use the FDE for a number.
The interface chooses the note by the waveguide's core and cladding, matched to the cross-sections measured: the sign warning on oxide-clad silicon, the magnitude note on the others measured, and a not-measured note on any other stack.
What FDE does
The Pro engine solves the transverse-E (Ex, Ey) finite-difference eigenproblem in β² on a staggered (Yee) grid, with span-preserving integer rasterization of the geometry, arithmetic permittivity averaging, a PEC box by default and a stretched-coordinate PML, an absorbing boundary, for bend and leaky modes. By default the grid is graded: it keeps your mesh step over the waveguide and a margin around it, and farther out sizes each cell to how fast the field varies there, with neighboring cells changing size in small steps out to the edges of the box. The grid stays uniform at your mesh step when you set the box yourself under "Advanced: solve box" (a straight solve or a wavelength sweep), when "Compute leakage loss" is on, and when the walls are sloped. A bend-loss sweep on vertical walls is graded whether or not you set the box. Bends use the exact exponential conformal map and take the loss from Im(n_eff). Dispersion comes from a fixed-grid wavelength sweep with resolver-fresh materials and polynomial fits.
It gives complex n_eff (with loss in dB/cm when Im ≠ 0), polarization identification with the TE power fraction, n_g, A_eff, Γ_core, box-artifact flagging, and — the reason it exists — the correct sign of β₂ where EIM fails.
Geometry inputs
Views. The waveguide is drawn three ways: 3D, Top and Cross-section. In 3D, drag to rotate, scroll to zoom and right-drag to pan; in Top and Cross-section, scroll to zoom and drag to pan. Reset view fits the drawing again; on Top and Cross-section, so does a double-click.
Three cross-section types. Changing the type resets the selected mode to the fundamental.
| Type | Inputs | Notes |
|---|---|---|
| Strip | Width (50–5000 nm), Height (50–2000 nm) | Rectangular core surrounded by cladding above and substrate below. |
| Rib | Width, Height, Slab height (10 nm … Height − 10 nm) | A ridge on a partially etched slab. If the slab is below TM cutoff the tool says so, and rib TM modes are equivalent to strip TM. |
| Slot | Rail width (50–2000 nm), Slot width (10–500 nm), Height | Two rails separated by a low-index gap. The mode table gains a Γ_slot column — the fraction of lateral power in the gap, which is the primary figure of merit for a slot waveguide. |
Wall angle (°) sets the angle between each etched wall and the substrate, from 45° to 90°; 90° is vertical and the default. The width you enter is measured at mid-height unless Width measured at sets the top or the base, and a smaller angle slopes each wall outward toward the base: on a rib only the ridge's walls slope, and on a slot waveguide each rail's walls do, so the slot narrows toward the base. A width too narrow to keep a top face at its angle is refused, with the smallest angle that keeps one. The wall angle is an input of the Full-vectorial engine; the Effective index engine draws vertical walls. A sloped wall on an anisotropic material, such as lithium niobate, is refused: use a 90° wall angle or isotropic materials.
Every dimension is entered in nanometers and echoed in micrometers beneath the field, because layout tools work in µm and mask data in nm.
Presets
| Preset | Type | Size (nm) | Core / Substrate / Cladding | λ (nm) |
|---|---|---|---|---|
| SOI Strip 220 | strip | 500 × 220 | Si / SiO₂ / Air | 1550 |
| Wide SOI Strip | strip | 800 × 220 | Si / SiO₂ / Air | 1550 |
| SOI Rib | rib | 500 × 220, slab 90 | Si / SiO₂ / Air | 1550 |
| SiN Strip 400 | strip | 1000 × 400 | Si₃N₄ / SiO₂ / Air | 1550 |
| Slot Waveguide | slot | rail 300, slot 100, h 220 | Si / SiO₂ / Air | 1550 |
| Thin SOI 1310 | strip | 450 × 150 | Si / SiO₂ / Air | 1310 |
| LNOI Rib (x-cut) | rib | 800 × 600, slab 250 | LiNbO₃ (x-cut, Y-propagating) / SiO₂ / SiO₂ | 1550 |
| InP Rib (Q1.25) | rib | 2000 × 500, slab 400 | InGaAsP (Q1.25) / InP / InP | 1550 |
InP Rib (Q1.25) is the shallow-etched passive waveguide of the generic InP foundry platform: a 500 nm Q1.25 quaternary waveguide layer etched 100 nm to leave a 400 nm slab, 2 µm wide, with epitaxial InP above and below. It reproduces the two mode-level numbers the platform publishes — n_eff “in the order of 3.25” (TU/e handbook; we give TE₀ = 3.2589) and a TE–TM birefringence “in the order of 6·10⁻³” (TU/e handbook; we give 6.54·10⁻³). The top cladding is InP rather than air on purpose: our rib model applies one cladding index above both the ridge and the etched slab, and in the real structure the mode sits under InP cladding. An air top cladding gives four modes and 4× the published birefringence.
LNOI Rib (x-cut) Cross-section from M. Zhang et al., Optica 4, 1536 (2017): a 600 nm x-cut lithium niobate film etched 350 nm (a 250 nm slab), silicon dioxide below and above. The paper uses 800 nm as a ring width; this preset takes its narrowest width so the guide is single-mode with vertical walls. The orientation, x-cut and Y-propagating, is ours, not the paper’s: its racetracks run in every in-plane direction. The paper measured at 1590 nm and reports no effective index, so nothing here can be checked against it. Real etched lithium niobate ribs have slanted walls, typically 40°–80° from the substrate plane (D. Zhu et al., Adv. Opt. Photon. 13, 242 (2021)). This preset uses vertical walls; by our own first-order estimate, slanted walls raise the effective index by about 0.008 to 0.044 depending on the angle. The deposited top oxide is modeled as the same silica as the buried oxide. The free engine cannot model lithium niobate. The crystal has two refractive indices, and which one a mode sees depends on the crystal cut and on the direction of the mode’s field; the free engine uses one index per layer, so any effective index it printed here would describe no real crystal. It shows no modes for this preset.
The InGaAsP (Q1.25) index model is cited only for the C-band: its validity window is 1500–1600 nm. Sweep windows are clamped to it (see Default sweep windows), and widening one past it raises the extrapolation caveat W10a. Below 1500 nm the quaternary approaches its 1.25 µm band edge, where absorption rises, so no refractive index we could quote there would be meaningful.
Material inputs
Core, substrate and top cladding are chosen independently. Built-in materials evaluate a Sellmeier or equivalent dispersion model at the wavelength in use; catalog materials interpolate tabulated data with a spline; Plus users can supply their own material.
This engine is lossless. The extinction coefficient k of a material is never consumed here — if a selected material carries k, a badge discloses that it is being ignored. Absorption and radiation loss are FDE territory.
| Material | Model | Cited range (nm) | Source |
|---|---|---|---|
| Si | Sellmeier | 1360–11000 | Salzberg & Villa 1957, fitted by Tatian 1984 (26 °C). Sweep clamp uses a verified working range of 1200–11000. |
| Si₃N₄ | Sellmeier | 310–5504 | Luke et al., Opt. Lett. 40, 4823 (2015) |
| SiO₂ | Sellmeier | 210–6700 | Malitson, J. Opt. Soc. Am. 55, 1205 (1965) |
| LiNbO₃ | Sellmeier | 400–5000 | Zelmon, Small & Jundt 1997, ordinary ray, congruent LN, 21 °C — anisotropy is not modeled |
| InP | Sellmeier | 950–10000 | Pettit & Turner, J. Appl. Phys. 36, 2081 (1965) |
| InGaAsP (Q1.25) | Polynomial (linear in λ) | 1500–1600 | Handbook of generic photonic IC design, TU/e 2024, Table B.1 |
| PMMA | Polynomial | 420–1620 | Beadie et al., Appl. Opt. 54, F139 (2015), 20.1 °C |
| H₂O | Sellmeier | 182–1129 | Daimon & Masumura, Appl. Opt. 46, 3811 (2007), 20.0 °C |
| Air | Constant n = 1 | any | — |
| SU-8 | Cauchy | 320–1700 | MicroChem SU-8 3000 data sheet (2011) — vendor specification, not a peer-reviewed measurement |
Every model above is a room-temperature fit at one specific temperature and is used as if it were temperature-independent. That is a real approximation across the whole material layer.
SU-8 is the one entry whose source is not a peer-reviewed measurement. The coefficients come from the supplier’s datasheet, which states no temperature, film thickness, cure state or uncertainty, and its 320–1700 nm window is inferred from the datasheet figure rather than stated in words. Its k is carried as zero: the datasheet does plot k, up to 6×10⁻³, and SU-8 absorbs strongly below about 350 nm — it recommends a 350 nm long-pass filter — but no citable k(λ) is published for this entry. Above 550 nm k is negligible for a lossless solver; near the 320 nm floor it is not.
Material-set versioning is worth knowing about when you compare to a paper: the shipped silicon model gives n_Si = 3.477724 at 1550 nm, while Li (1980) — used in several of our internal benchmarks for comparability — gives 3.4757. A higher core index confines more tightly and therefore reduces coupler Δn_eff, from 0.19 % at 1500 nm to 0.75 % at 1600 nm. That is data versioning, not a defect.
Simulation inputs
| Input | Range | What it does |
|---|---|---|
| Wavelength | 400–4000 nm | The single operating λ. Every material index is resolved here, and every single-λ tab reports at this wavelength. |
| Polarization | TE · TM · Both | Filters the mode table and every tab that follows a mode selector. Changing it resets the selection to the fundamental. |
| vs Wavelength sweep | — | λ min, λ max and point count for the open vs-Wavelength section. These appear only while a section is open; the single center wavelength above stays visible always. |
There is no Solve button. Every result recomputes as you type — that is the point of an analytic engine.
Results tab
The mode field of the selected mode as a heatmap, with optional horizontal and vertical slices through a clickable crosshair, above the Guided Modes table. On the full-vectorial engine the map is the transverse intensity |E_t|² = |E_x|² + |E_y|². The longitudinal component E_z is not in it; on a 500 × 220 nm oxide-clad silicon strip at 1550 nm E_z holds 24 % of the intensity, so |E_t|² is not the total |E|². The quick estimate's map is its scalar field squared, |ψ|².
| Column | Meaning |
|---|---|
| Mode | Label — TE₀, TM₀, TE₁ … Color-coded, and the color is reused as the trace color everywhere else in the tool. |
| neff | Effective index at the operating wavelength. |
| Γ (%) | Confinement factor: on the full-vectorial engine, the share of the mode's power (its Poynting flux) that flows inside the core; on the Effective index engine, the product of the lateral and vertical 1-D intensity fractions. The CSV export also carries the full-vectorial intensity fraction |E_t|², a different and smaller number on high-contrast strips. On a slot waveguide the column is Γ_rail, the share in both rails, and a Γ_slot column gives the low-index gap's share: of the power on the Full-vectorial (FDE) engine, of the lateral intensity |ψ_x|² on the Effective index (EIM) engine. |
| Status | Guided means the mode is bound. Cutoff means n_eff has fallen to or below max(n_clad, n_sub) — the higher of the top cladding and the substrate, which for the shipped SOI and SiN presets is the SiO₂ substrate, not the air top — so the mode leaks. |
The table carries n_eff, Γ and status only. Group index and dispersion are derivative quantities: they need a wavelength sweep to exist at all, so they live in the vs-Wavelength section rather than being implied at a single λ. The one exception is the n_g readout above the heatmap, which is a local ±1 nm finite difference for the selected mode.
Parameter Sweep tab
Sweeps a geometry dimension (width or height) and plots n_eff, n_g, confinement or birefringence for each mode, with legend toggling. Useful for finding a single-mode window or a birefringence-zero width. Free, but requires a signed-in account.
Bend Loss tab
Radiation loss of a bent waveguide against bend radius, on a log axis, with the minimum acceptable radius marked where the curve crosses a loss threshold you set.
| Input | Default | What it does |
|---|---|---|
| Radius range | derived from R_min | The swept range. It opens at [max(1, R_min/10), min(5000, 2·R_min)] so the mode’s own critical radius is on screen — a shallow-etched rib needs thousands of µm, where the old fixed 1–10 µm window showed nothing at all — and stops following R_min as soon as you edit either bound. The R max input accepts up to 5000 µm; that is a plot bound, not the search’s 10 cm runaway guard. |
| Points | 50 | Sweep resolution. |
| Loss threshold | 0.01 dB per 90° | Defines R_min: the smallest radius whose loss per 90° stays under the threshold. There is no fixed search ceiling — the search brackets geometrically upward from 0.5 µm until the loss first drops below the threshold, then bisects that bracket to a relative 1e-9. It reports nothing only when the mode is still above threshold at 10 cm, which is a physical statement rather than the end of a window: a 90° arc at that radius is 157 mm long, so at even 0.1 dB/cm of propagation loss it costs 1.6 dB, about 160× the bend-loss budget being solved for. |
| Mode | fundamental | Which guided mode is bent. Polarization matters: the lateral solve uses the crossed convention. |
Just above the radius where the tunnelling barrier opens, loss per 90° rises before it falls: the πR/2 path-length factor beats the still-negligible WKB exponent. At the InP Rib (Q1.25) preset the barrier opens at R = 279.5 µm, and the loss runs 33.4 dB at 280 µm up to a local maximum of about 35.5 dB near 330 µm before falling monotonically to the 0.01 dB/90° threshold at R_min ≈ 2300 µm. That is real physics, not a plotting artifact. It happens where the loss is tens of decibels, far above any threshold this tab accepts, so the R_min search still returns the smallest crossing.
R_min is displayed to two significant figures, with a ~ prefix for a rib. Two figures is what the physics supports even in the best case: a ×3 change in the loss prefactor moves R_min by up to 12 % on the rib presets it was measured on (SOI Rib and InP Rib; the lithium niobate rib has no Effective index R_min to measure). The CSV export and the R_min vs λ series keep full precision; the rounding is a display rule, not a change to the data.
For a rib the lateral cladding is the etched slab’s own effective index, not the bulk cladding, so the lateral index step is small and R_min comes out large — read it as an order of magnitude (caveat W12).
The y-axis shows at most 12 decades below the highest plotted value. Radiation loss is exponential in radius: about 3.1 decades per extra µm of radius for a 500 × 220 nm silicon strip at 1550 nm, so a 1 to 100 µm window would ask for some 300 decades. That is at the edge of what double-precision arithmetic can represent, and the engine reads exactly zero from about 94 µm. On such an axis one decade is under a pixel, and the few decades that carry the design decision are invisible. The slope over each preset's default window varies more than 200-fold across the presets where it is defined. The cap is a display bound, not a physics floor: it is stated in decades of plot, it makes no claim about any quantity, no value is clipped or clamped, and the hover readout and the CSV export still carry the exact number at every point. Every preset's default view spans 5 to 9 decades, so the cap only takes effect on a radius window you widen yourself, and a note appears under the plot when it does. On SiN Strip 400, LNOI Rib (x-cut) and InP Rib (Q1.25), the window's low end sits below the radius where the barrier opens, so the curve begins there and no slope over the full window is quoted for them; InP Rib (Q1.25)'s loss stays above zero out to the 10 cm search limit. The same rule governs the log panels of the vs Wavelength section, where a hand-typed evaluation radius can put the loss just as far below anything measurable.
Method and accuracy are summarized under Bend-loss model below. In one sentence: trust the critical radius, not the decibels. Free, but requires a signed-in account.
Directional couplers
Directional couplers have their own tool, the PIC Directional Coupler Simulator: straight couplers, S-bends and ring-bus arcs, with the same Effective index engine as this solver and a Full-vectorial engine. This solver does not compute a coupled pair; it gives one waveguide’s modes, and the coupler takes the pair from there.
The coupler’s method, its accuracy and how κ² is checked are in its manual, PIC Directional Coupler Simulator. The same coupler physics is behind the MZI calculator’s κ²(λ) splitter model.
Edge Coupler tab
Fiber-to-chip coupling efficiency of an inverse-taper edge coupler, as the overlap integral of the waveguide mode at the taper tip against a Gaussian fiber mode. Free, but requires a signed-in account.
| Input | Default | What it does |
|---|---|---|
| Tip width | 180 nm | Taper tip width. Narrowing it expands the mode laterally and improves η_x. |
| Fiber preset | Lensed fiber (MFD 5.0 µm) | SMF-28 10.4 µm at 1550 nm · Lensed fiber 5.0 µm (nominal) · UHNA-3 3.3 µm at 1310 nm · UHNA-7 3.2 µm at 1550 nm, or a custom MFD. Each figure is the maker's, at the wavelength shown; the tool applies it at any wavelength (see W7). |
| Output | Meaning |
|---|---|
| η (dB) | Total coupling efficiency, η_x·η_y. |
| ηx, ηy (dB) | Lateral and vertical overlap separately. η_y is fixed by the core thickness and dominates the total. |
| MFDx, MFDy (µm) | Mode field diameters as second moments, MFD = 4√⟨x²⟩ (= 2w₀ for a Gaussian). |
| Ltaper (µm) | Love–Henry adiabaticity lower bound for a linear taper, evaluated on EIM slab modes. |
On the default air-clad strip, a tip that carries a mode couples −22.0 to −23.4 dB into SMF-28 and −15.7 to −17.1 dB into a 5 µm lensed fiber; a real edge coupler adds a spot-size converter to close most of this gap. That gap is the entire point of the caveat below: what is modeled is a bare waveguide mode, and every real design adds an overlay this engine does not represent.
With an air cladding, a silicon tip narrower than about 263 nm (at 220 nm thickness and 1550 nm) has no guided mode: its effective index falls below the oxide substrate’s, so the light leaks into the substrate instead of spreading into a larger spot. The tab then prints no coupling efficiency and says why. A tip that narrow guides only when the material above it matches the substrate, so model an inverse-taper tip with an oxide cladding.
Full-vectorial FDE (Pro)
The full-vectorial engine runs a server-side job and returns exact hybrid modes rather than the EIM approximation. It adds a dispersion sweep with a normal/anomalous headline card, a bend-loss sweep from first principles, and complex materials (n + k).
- Mesh: a free entry in nm, default 20 nm, with presets Coarse (20 nm), n_eff within 9e-3; Standard (10 nm), n_eff within 3e-3; Fine (5 nm), n_eff within 6e-4 (1e-3 on a slot). Each figure is the worst guided mode across the shipped strip and rib cross-sections; a slot, whose light sits in the narrow gap, converges more slowly and has its own figure where it differs.
- By default the engine sizes the solve box from the modes' own decay and only ever widens it; "Advanced: solve box" sets it by hand. Either way the result reports the box it was solved in. On vertical walls every material interface lies on a grid line, so the dimensions you enter are the dimensions solved at every mesh.
- Each job runs under the server's 20-minute wall-clock cap. The line above Run gives the server's projection for the run you have set, as a range. A single solve whose whole range is over the cap is refused before it starts, and one whose range crosses the cap starts and stops itself with a message if it gets too close. A sweep is refused only when its first point alone would be; otherwise it starts, solves its points in the order requested, up to the cap, and returns those that finish.
- On the SOI Strip 220 preset (TE), from R = 1 to 2 µm the absolute bend loss agrees within ×1.1 across the window and mesh settings compared; elsewhere it was not compared (surfaced in the panel).
- Leakage loss. The default straight solve uses perfectly reflecting box walls, which is exact for a confined mode and meaningless for one that is not: a mode whose effective index sits below the index of the material beside it (a rib's TM mode below the etched slab's TE index, for example) leaks sideways, and a reflecting box turns that leak into a standing wave with a real effective index and no loss. "Compute leakage loss" re-solves such states with absorbing boundaries and reports the imaginary part of the effective index as a loss in dB/cm. When the loss is so large that the power falls to 1/e within a few micrometers, the state is too short-lived to call a mode and no loss is printed for it; when the loss changes with the size of the solve box by more than 2 %, the row says so instead of printing a loss. Confined modes are never re-solved.
- Loss channels are material absorption and radiation/leakage only. Sidewall-roughness scattering — typically the dominant measured straight-waveguide loss in SOI, e.g. 3.6 dB/cm TE in Vlasov & McNab (2004) — is not modeled by any mode solver, ours included.
Solve box
By default the engine sizes the box from the modes it finds. A box of your own is sent with every run, including every point of a sweep, so a sweep is solved in one box. For a wavelength sweep the box is sized at the longest wavelength the sweep solves, two steps past the end of the band (the slopes at the band's end read those points), where the modes reach farthest. Modes that stop being guided inside the band do not size it; their notes give the error instead.
vs Wavelength sections
Results, Bend Loss and Edge Coupler each carry a collapsible vs Wavelength section beneath their main content. Naming is deliberate: the section is “vs Wavelength”, and the word dispersion is reserved for the β₂ / D quantity specifically.
How the plots behave
- Stacked panels. One plot to start; “Add plot” below the last plot adds another, up to four. Each panel has its own y-quantity dropdown, changing one panel never affects another, and two panels may legitimately show the same quantity.
- Shared x-axis and linked zoom. Zooming or panning any panel moves all of them; the wavelength axis is labeled on the bottom panel only.
- Multi-mode overlay. The mode chips select which modes are plotted, and every panel overlays all of them with a legend. Until you pick explicitly, the section follows the tab’s own mode selector. The last selected mode cannot be turned off.
- Gaps are honest. If a mode is not guided at some wavelength, its trace breaks. It is never drawn at zero, and it is never silently swapped for the nearest surviving mode. A gap can also mean the mode exists but the plotted quantity has no finite value there — an empty panel says which of the two it is.
- Every point re-solves. Materials are re-resolved at each wavelength and the engine is re-run. Freezing the indices at λ₀ would silently delete material dispersion; for the default preset that alone moves n_g from 4.237 to 4.094 and β₂ from −1.176 to −2.383 ps²/m.
Results → n_eff, n_g, β₂, D
| Symbol | Name | Unit | Derivation |
|---|---|---|---|
| neff | Effective index | — | Direct EIM solve at each λ. |
| ng | Group index | — | n_g = n_eff − λ·dn_eff/dλ, with dn_eff/dλ by 3-point central difference on the sweep grid itself. |
| β₂ | GVD parameter | ps²/m | β₂ = −D·λ²/(2πc). Derived from D, so the two curves are always exactly consistent. |
| D | Dispersion parameter | ps/(nm·km) | D = −(λ/c)·d²n_eff/dλ², second derivative by 3-point central difference on the sweep grid. |
Sign convention, matching the FDE engine: β₂ > 0 normal, D < 0 normal; β₂ < 0 anomalous, D > 0 anomalous. And n_g > n_eff in every normal-dispersion case.
Bend Loss → L₉₀, R_min, α, δ
This section adds one control: R_eval, the radius the loss is evaluated at. It defaults to the tab’s own computed R_min and follows it until you type a radius, then stays put; 5 µm is used only when the mode has no computable R_min. It is clamped into the tab’s own radius range.
The default was a fixed 5 µm (a standard SOI ring radius) until 2026-07-31. R_min is the one radius guaranteed to be representable — the loss there equals your threshold by construction — while a strip-sized radius can sit below the radiation caustic, where the tunnelling barrier has closed and the honest answer for every loss quantity is infinite. That is a statement about the quantity, not about the mode: n_eff, R_min and δ are all still finite there. On the InP Rib preset the caustic closes below about 280 µm, so at 5 µm the whole L₉₀ panel was empty.
| Symbol | Name | Unit | Derivation |
|---|---|---|---|
| L₉₀ | Loss per 90° at R_eval | dB | Log y-axis, mandatory: at R = 5 µm this spans about 25 decades over 1200–1700 nm and is unreadable on a linear axis. |
| R_min | Minimum bend radius | µm | The radius at which loss per 90° meets the tab’s threshold. A gap when the mode does not meet it at any radius up to 10 cm, the search’s physical runaway guard. This series carries full precision — the two-significant-figure rule applies only to the readout. |
| α | Bend propagation loss at R_eval | dB/cm | The same information as L₉₀ rescaled by a λ-independent constant at fixed R — offered because designers think in dB/cm. |
| δ | Lateral penetration depth 1/γₓ | nm | The mechanistic driver: it is what explains the slope of L₉₀. |
Coupled pairs across wavelength are the PIC Directional Coupler Simulator’s Wavelength sweep, documented in its manual, PIC Directional Coupler Simulator.
Edge Coupler → η, η_x, η_y, MFD_x, MFD_y, L_taper
Same six quantities as the tab itself, swept in wavelength. This section has no mode axis — the trace is the taper tip — so it carries no mode multi-select.
Sweep defaults
| Section | Default λ range | Points | y-axis |
|---|---|---|---|
| Results | λ₀ − 50 … λ₀ + 50 nm | 101 | linear |
| Bend Loss | λ₀ − 100 … λ₀ + 100 nm | 51 | log, autoscaled, on the loss quantities |
| Edge Coupler | λ₀ − 150 … λ₀ + 150 nm | 51 | linear (dB) |
λ₀ is the tool’s current operating wavelength, not a hard-coded 1550, so a 1310 nm preset behaves. The Results sweep's default window is λ₀ ± 50 nm: 101 points on the Effective index engine, a 1 nm step, and 11 on the Full-vectorial engine, a 10 nm step. The O-band, C-band and L-band buttons beside it set the window to that band's ITU-T edges, and λ₀ ± 50 nm returns to the default. The three add-on sections use narrow windows because their quantities either span far too many decades (bend loss at R = 5 µm: about 25 decades over 1200–1700 nm) or are only readable over a fraction of a period (κ²). Point count is clamped to 3–500.
Default sweep windows are clamped to the materials
Since 2026-07-31 a default sweep window is prevented from leaving a material’s validity range rather than warned about afterwards. The window you get is the intersection of these:
- the section default in the table above;
- the tool’s own 400–4000 nm input bounds;
- the validity range of all three layers, not just the core: in the InP Rib preset's mode 40 % of the power sits outside the core, in the InP around it, so an extrapolated cladding corrupts n_eff just as thoroughly;
- the 1160 nm silicon pole floor, which applies whenever any layer is silicon;
- for a tabulated catalog material, on a section that plots a derivative (n_g, β₂, D), two sweep steps inside each end of its table, because a derivative at the band edge reads points just beyond it, and outside a table the interpolation returns a constant.
On the InP Rib (Q1.25) preset that turns all four sections into 1500–1600 nm, the only band where the quaternary’s cited model applies — previously every section opened outside it and showed an amber banner at rest. On the silicon presets nothing moves except Thin SOI 1310’s edge-coupler window, 1160–1460 → 1200–1460 nm. A footnote under the sweep inputs names the limiting material whenever the clamp has actually narrowed the band.
Silicon carries two windows. Its cited range is 1360–11000 nm (Salzberg & Villa, via Tatian’s fit), and that is the number every tooltip and validity string quotes. The clamp uses a slightly wider working range of 1200–11000 nm, because the model is verified against an independent cited source over that extension: against Franta et al. (2017) it agrees to within 1.5 × 10⁻³ in n at 1200 nm. This validates the index, not its curvature: β₂ read at the bottom of the band carries more model uncertainty than at 1550 nm, on top of everything W1 already says about its sign.
Two situations cannot be fixed by clamping, and the tool says so permanently instead of clamping to something useless: your operating wavelength itself outside a layer’s range (W10b), and two layers whose ranges do not overlap at all (W10c). λ₀ is never moved for you. Two guarantees hold in every other case: the window always contains λ₀ on the three λ₀-centered sections, and it is never narrower than 20 nm unless the material window itself is.
A window you type yourself is not re-clamped — that would silently rewrite a saved design — and it is what raises W10a. The 1160 nm silicon floor is the one exception: it is a singularity guard, not a validity window, and it binds manual entry too.
Reading the caveats: ⚠ and ⓘ
Every notice in the tool is one of two kinds. ⚠ means the result on screen may be wrong in a way you could publish: accuracy caveats and extrapolation. It shows a single summary line and opens to the full text on click, and every one of them is reproduced word for word in EIM caveats in full below. ⓘ means an informational note — how a method works, what is not modeled — and stays fully collapsed until you ask for it. Nothing is hidden that used to be shown; the long form simply moved one click away.
Padded grid: the edge rule for derivative quantities
Derivatives need neighbors, so the two outermost points at each end of a sweep cannot carry a central difference. Rather than shrinking the stencil at the edges, the Results section pads the compute grid:
- You ask for [λ_min, λ_max] with N points, giving a step Δλ = (λ_max − λ_min)/(N − 1).
- Internally the tool sweeps N + 4 points over [λ_min − 2Δλ, λ_max + 2Δλ].
- n_g, β₂ and D are computed with the uniform 3-point central stencil on that padded grid.
- Only the interior [λ_min, λ_max] is plotted and exported.
Every displayed point therefore comes from the same second-order stencil, and no one-sided difference is used anywhere. The cost is four extra solves. Without padding, a request for 1200–1700 nm at 101 points comes back spanning only 1210–1690 nm, and a coarse grid visibly eats the band you asked for.
The 3-point stencil is deliberate, not a shortcut: on the default preset the truncation error in β₂ is below 0.12 % at a 25 nm step and below 4.5 × 10⁻⁵ at 5 nm, and the second differences of n_eff keep shrinking as the step squared down to 0.01 nm, so the derivative is truncation-limited rather than noise-limited. A 5-point stencil buys nothing and costs edge range.
Two further masking behaviors are intentional. A point and its neighbor are masked when the change in n_eff between adjacent samples exceeds 3 % of their mean — that is what stops the derivatives blowing up as a mode approaches cutoff, and with padding it can bite inside the displayed range, which is correct. And a non-guided point gives NaN, which renders as a gap. Never as zero.
Padded points can legitimately sit below a material’s validity floor, two steps under the silicon floor for instance. They only feed the stencil at the band edges and are never displayed; if such a point falls below the silicon Sellmeier pole the solver returns NaN and the affected edge point shows as a gap, which is the honest rendering.
Bend-loss model
The free bend-loss chain, as corrected in July 2026:
- Linearized conformal map of the bend onto an equivalent straight guide with a tilted index profile.
- Radiation caustic located at x_rad = R·(n_eff/n_clad_eff − 1).
- WKB tunnelling integral through the barrier (composite Simpson, 1000 intervals).
- Symmetric-slab radiation prefactor:
γₓ = k₀√(n_eff² − n_clad_eff²), κₓ = k₀√(n_lat_core² − n_eff²)
That prefactor is the standard form of this prefactor family (Marcuse 1971; Snyder & Love §23); we have not re-verified its O(1) coefficient against the primary text.
n_lat_core is the EIM vertical-slab index for the mode’s own polarization. It cannot be recovered from the TE slab eigenvalue relation, because the lateral problem uses the crossed (TM) convention.
The lateral cladding index depends on the geometry. For a strip or a slot it is max(n_clad, n_sub). For a rib it is the vertical effective index of the etched slab region at the same polarization — that is the index the mode actually decays into, and the one the plotted lateral profile is built with. It falls back to max(n_clad, n_sub) when the etched slab guides no mode of that polarization, which is why the SOI Rib preset’s TM numbers are identical to a strip’s. Until July 2026 the bend model used the strip convention for every geometry, which described a different waveguide from the one the solver returned: it over-stated γₓ, inflated the radiation caustic and reported bend loss too low and R_min too small — the optimistic direction. Fixing it moved SOI Rib TE₀ R_min from 1.06 to ~4.5 µm, SOI Rib TE₁ from 2.92 to ~270 µm, and InP Rib TE₀ from 101 to ~2300 µm.
History worth knowing, because it changed published numbers. Until July 2026 this prefactor was dimensionally wrong (units of m⁻² where m⁻¹ is required), which inflated absolute loss by a factor of about 1.15 × 10⁷ and pushed the reported minimum bend radius about 2.7× too high. After the fix, for a 445 × 220 nm air-top silicon strip at 1500 nm, loss per 90° at R = 1 µm reads 5.76 × 10⁻² dB against 6.62 × 10⁵ dB before, and R_min at 0.01 dB/90° moves from 3.41 µm to 1.25 µm. The corrected model sits below the measured 0.086 ± 0.005 dB total (Vlasov & McNab).
The conformal map is deliberately left linearized rather than exponential. The two approximations currently offset each other, and the linearized form is the closer of the two to full-vectorial at R ≈ 1 µm; switching only the map would move the R = 1 µm result away from FDE. Do not “improve” both at once without re-benchmarking.
Not computable without new physics, and therefore not offered: straight-to-bend junction and mode-mismatch loss, the substrate leakage floor, TE↔TM conversion in the bend, and whispering-gallery resonances. All of these are FDE/EME territory.
EIM caveats in full
These are the caveats the interface shows, in full, with the conditions under which each appears. Amber items appear inline in the tool because a result can be actively misread without them; the neutral items sit behind the ⓘ next to the plots.
W1: β₂ / D sign on the measured oxide-clad silicon strip · Results vs λ · amber
Shown when β₂ or D is plotted on the cross-section SOI 500 × 220 nm, oxide-clad, at 1550 nm, the one measured with the sign wrong.
W1b: β₂ / D magnitude where the sign is right · Results vs λ · note
Shown when β₂ or D is plotted on one of the other three cross-sections measured: SOI 500 × 220 nm, air-clad, at 1550 nm; Si₃N₄ 1000 × 400 nm, oxide-clad, at 1550 nm; Si₃N₄ 1000 × 400 nm, air-clad, at 1550 nm.
On the cross-sections measured where EIM gets the sign of β₂ and D right, its magnitude is off by up to 66 % against full-vectorial FDE. SOI 500 × 220 nm, air-clad, at 1550 nm: −1.18 vs −2.84 ps²/m, 59 % low; Si₃N₄ 1000 × 400 nm, oxide-clad, at 1550 nm: +1.06 vs +1.00 ps²/m, 6 % high; Si₃N₄ 1000 × 400 nm, air-clad, at 1550 nm: +0.34 vs +0.99 ps²/m, 66 % low.
W1c: β₂ / D on a cross-section not measured · Results vs λ · note
Shown when β₂ or D is plotted on any other waveguide, size or wavelength.
EIM's β₂ and D were measured on four cross-sections: wrong in sign on SOI 500 × 220 nm, oxide-clad, at 1550 nm, and off by up to 66 % in magnitude on the other three. They were not measured on this geometry, so read the curve for shape only.
The tool names what differs from the four measured cross-sections: the material, the geometry, the wavelength, or two or three of them joined with "or". This example is a measured material at another size.
W2: group index accuracy · Results vs λ · note
EIM group index is within 4 % of full-vectorial FDE on the four cross-sections measured at 1550 nm (SOI 500 × 220 nm: 4.03 vs 4.19 oxide-clad, 4.24 vs 4.37 air-clad; Si₃N₄ 1000 × 400 nm: 2.03 vs 2.06 oxide-clad, 2.16 vs 2.14 air-clad). Fine for an FSR estimate, not for a group-delay budget.
W3 and W4 described the Directional Coupler tab’s wavelength sweep, which is now the PIC Directional Coupler Simulator’s.
W5: bend-loss method uncertainty · Bend Loss vs λ · amber, always
See the verbatim text under Bend-loss model.
W6: physical floor · Bend Loss vs λ · note
Radiation loss below 0.1 dB/cm, a threshold we set, is swamped: sidewall-roughness scattering measures a few dB/cm in SOI (3.6 ± 0.1 dB/cm TE in Vlasov and McNab 2004, Opt. Express 12, 1622) and no mode solver models it. Switch the y-quantity to α (dB/cm) to compare directly.
Stated in dB/cm on purpose: a floor expressed in dB per 90° is radius-dependent — it moves 4× between R = 5 and 20 µm — and is therefore not a physical constant.
W7: fiber MFD is wavelength-independent · Edge Coupler vs λ · amber, always
W8: bare-waveguide overlap · Edge Coupler · note, always
Overlap of the bare waveguide mode (EIM) with a Gaussian fiber mode. No SiN overlay, polymer or SWG spot-size converter is modeled, and the vertical mode is fixed by the core thickness: no lateral tapering improves η_y. Real edge couplers add a spot-size converter to close most of this gap.
W9: taper length is a bound · Edge Coupler vs λ · note
L_taper is the Love–Henry adiabaticity lower bound for a linear taper evaluated on EIM slab modes, not a design length; it says nothing about how much power a shorter taper actually loses.
W10a: you extended the window past a material’s range · all four vs-λ sections and the Dispersion tab · ⚠
This cannot appear at a default. Since 2026-07-31 every default sweep window is clamped into the intersection of all three layers’ validity ranges (see Default sweep windows above), so the banner is a consequence of something you typed. The silicon sentence that used to end this banner — the pole at 1135 nm — was removed from it because the hard 1160 nm floor makes that state unreachable; it survives as a neutral footnote under the sweep inputs and in the material section above.
W10b: the operating wavelength is outside a material’s range · whole tab · ⚠, permanent
Clamping the sweep would not help here — a band that excludes your own operating wavelength is worse than an extrapolated one — so the tool refuses to clamp and says so instead. A Si₃N₄ / SiO₂ / water stack at 1550 nm is the live case: our water model (Daimon & Masumura, 20.0 °C) stops at 1129 nm.
W10c: two materials with no overlapping range · whole tab · ⚠, permanent
Reachable today with a Q1.25 core (1500–1600 nm) under a water cladding (182–1129 nm). There is no wavelength at which the whole stack is inside its cited data, so there is nothing to clamp to.
W11: a layer carries no index curvature · Results vs λ and the Dispersion tab (β₂, D) · amber
The trigger is any of the three layers, not just the core: Q1.25 is selectable as substrate or cladding too, and in the InP Rib preset's mode 40 % of the power sits outside the core.
W12: a rib minimum bend radius is an order of magnitude · Bend Loss tab and Bend vs λ · amber
Above a rib R_min of about 100 µm the tool adds a second statement, computed for the case on screen: the 90° arc length is πR/2 from that mode’s own R_min, and the propagation-loss clause is keyed to the core material. A Q1.25 core quotes the generic InP platform’s ~2 dB/cm; a silicon core quotes the single cited 3.6 ± 0.1 dB/cm (TE, Vlasov and McNab 2004, one measured strip); any other core gets the arc length alone, because we have no cited number to quote. At the InP Rib preset that reads 3.7 mm and 0.73 dB, about 73× the 0.01 dB/90° budget; at SOI Rib TE₁ it reads 0.42 mm and 0.15 dB, 15.0×. At radii this large, bend loss is not the binding constraint; straight-waveguide propagation loss is. Arc and loss are shown to two significant figures like the R_min they are derived from, so π·R/2 on the displayed radius reproduces the displayed arc.
W13: a table of measured points is not a dispersion model · Results vs λ and the Dispersion tab (n_g, β₂, D) · ⚠
Every catalog material and every custom material of kind tabulated is affected; the built-in materials are all analytic and are not. There is a second, quieter failure with the same cause: outside its tabulated range the spline holds the index constant, so dn/dλ ≡ 0 and the material contributes no dispersion at all while the curve still looks perfectly smooth. Default sweep windows are clamped to the table span for exactly that reason, and a neutral footnote says so if you extend past it.
W14: near-cutoff modes · Results table · amber
Shown under the mode table when any row is marked.
Also not modeled, anywhere in the free tier
- Sidewall-roughness scattering — usually the dominant measured straight-waveguide loss.
- Wavelength-dependent coupler excess loss, asymmetric or broadband couplers, TE–TM crosstalk.
- SiN / polymer / SWG spot-size converters, 3-D taper mode evolution, back-reflection, alignment tolerance.
- Anisotropy, thermal effects, EME / varFDTD propagation (see the Waveguide Device Simulator for EME).
CSV columns
Export requires a free account.
| Export | Columns |
|---|---|
| Guided Modes table | Mode, n_eff, confinement and (for slot geometries) slot confinement, plus the geometry and material context. |
| vs Wavelength section | Wavelength (nm) then every y-quantity of that section, whether or not it is currently plotted. With more than one mode overlaid the columns are prefixed by mode label (TE0_n_eff, TM0_n_eff, …); with a single mode the bare quantity names are used. Non-guided points export as empty cells, not zeros. |
The vs-Wavelength export covers the displayed interior of the grid, so padded points never appear in the file.
How the library, auto-save and version history work: the User Center manual.
URL parameters
The Share button copies a link carrying the full cross-section state.
| Key | Meaning |
|---|---|
t | Geometry type (strip | rib | slot) |
w, h | Width, height (nm) |
hs | Slab height (rib only) |
rw, sw | Rail width, slot width (slot only) |
wall | Wall angle (°), when not 90 |
wr | Width measured at (mid, top or base), written with wall; a sloped link without it is read as top |
cm, sm, clm | Core, substrate, cladding material |
nc, ns, ncl | Resolved core, substrate and cladding indices — written whenever they are finite, built-in material or not |
lam | Operating wavelength (nm) |
pol | Polarization filter, when not Both |
m | Selected mode index, when not the fundamental |
vw | Which vs-Wavelength section is open |
vwy | Panel stack: a comma-separated y-quantity list, one entry per panel |
vwm | Mode overlay: a comma-separated mode list |
vwr | R_eval for the Bend Loss section, written only once you have typed one — otherwise the link reproduces the R_min-derived default |
Sources
- E. Dulkeith, F. Xia, L. Schares, W. M. J. Green, Y. A. Vlasov, “Group index and group velocity dispersion in silicon-on-insulator photonic wires”, Opt. Express 14, 3853 (2006).
- Yu. A. Vlasov and S. J. McNab, “Losses in single-mode silicon-on-insulator strip waveguides and bends”, Opt. Express 12, 1622 (2004).
- D. Marcuse, “Bending losses of the asymmetric slab waveguide”, Bell Syst. Tech. J. 50, 2551 (1971).
- A. W. Snyder and J. D. Love, Optical Waveguide Theory (Chapman & Hall, 1983), §23.
- M. Heiblum and J. H. Harris, “Analysis of curved optical waveguides by conformal transformation”, IEEE J. Quantum Electron. 11, 75 (1975).
- C. D. Salzberg and J. J. Villa, J. Opt. Soc. Am. 47, 244 (1957) — the shipped silicon index model, validity 1.36–11 µm.
- I. H. Malitson, J. Opt. Soc. Am. 55, 1205 (1965) — the shipped SiO₂ model.
- H. H. Li, J. Phys. Chem. Ref. Data 9, 561 (1980) — silicon index used in internal coupler benchmarks.
- Corning SMF-28e+ Product Information PI1463 (June 2014): 9.2 ± 0.4 µm at 1310 nm, 10.4 ± 0.5 µm at 1550 nm.
- L. Chrostowski and M. Hochberg, Silicon Photonics Design (Cambridge University Press, 2015), Ch. 4.
Every model on this page is derived in full before it is implemented and then held to acceptance gates that run on every release — including the full-vectorial cross-checks quoted throughout this page; the measurements and published results those gates are built on are the references listed above.