Photizon
All tools
Thin-Film Coating SimulatorRay-Optics DesignerIllumination AnalyzerPIC Waveguide Mode SolverGrating & Metasurface Simulator (RCWA)Diffraction Grating CalculatorGaussian Beam PropagatorPolarization CalculatorFabry-Perot CalculatorRing Resonator CalculatorMZI Modulator CalculatorOptical Link AnalyzerFresnel Reflection CalculatorPhotonics Unit ConverterOptical Materials Database
AcademyGuidesDocsBenchmark

Tools

All toolsThin-Film Coating SimulatorRay-Optics DesignerIllumination AnalyzerPIC Waveguide Mode SolverGrating & Metasurface Simulator (RCWA)Diffraction Grating CalculatorGaussian Beam PropagatorPolarization CalculatorFabry-Perot CalculatorRing Resonator CalculatorMZI Modulator CalculatorOptical Link AnalyzerFresnel Reflection CalculatorPhotonics Unit ConverterOptical Materials Database

Learn

AcademyGuidesDocsBenchmark
Contact
Contact
All benchmarks

On this page

ScoreboardWhat "agreement" meansEvery case at a glanceAnalytic closed formsIndependent codePublished dataPublished literatureOptimizerHow to break itConsidered and not shippedHow the numbers are producedWhat this page does not claim

Benchmark

Thin-Film Coating Simulator — benchmark

Every case we check the transfer-matrix engine against: the closed form or the published value, our number, the deviation printed as it is, and a link that opens the same calculation in the simulator.

Open the Thin-Film Coating SimulatorLast updated 4 August 2026

19 benchmark cases. Every input, every reference, every link.

Analytic closed forms:
worst deviation 1.0 × 10⁻¹⁷ in reflectance (7 cases)
Independent code (Byrnes tmm 0.2.0):
worst deviation 1.8 × 10⁻¹⁴ over 4,500 spectral points (9 comparisons)
Published data:
SCHOTT N-BK7 catalogue index reproduced to 3.5 × 10⁻⁸
Published literature:
five published reflector designs rebuilt from their design formula — layer count exact 5/5, total optical thickness within 0.031 %

A 7-pair TiO₂/SiO₂ quarter-wave mirror at 550 nm.

Textbook: Y = (n_H/n_L)^14 · n_s

= (2.647935017326822 / 1.4599108864687285)^14 × 1.5185223876207927 = 6332.203461824502

R = ((1 − Y)/(1 + Y))² = 0.9993685078282724

Photizon: 0.9993685078282724 — identical to the last printed digit.

Open this stack in the simulator

What "agreement" means here

Every row carries a tolerance class, printed as a short tag, so you know what agreement means before reading the number. Four classes, and nothing ships in class T4.

ClassMeaningWhat the printed Δ is limited byUsed by
T1 — exact identityThe reference and the engine must agree to the last bit; any nonzero Δ is float64 rounding.Accumulated round-off in the matrix product (grows with layer count: 2×10⁻¹⁶ at 4 layers, 1.8×10⁻¹⁴ at 14).A1, A2, A3, A6, A7, all of B
T2 — analytic value from the same index dataThe closed form is exact but is evaluated with the same n(λ) the engine uses, so this tests the numerics, not the material model.Same as T1, plus the conditioning of the closed form.A2, A3, A5, A6
T3 — physical law with a named model gapAgreement is not to machine precision and we say why, with the size of the gap and its cause.The named physical effect.A5 (FSR vs n_g: −0.078 %), A7 (Ta₂O₅ absentee: 5.3×10⁻⁵, caused by k = 2.1×10⁻⁵)
T4 — reference not verified at sourceNothing ships in this class.——
T1. The closed form and the engine are two independent evaluations of the same physical model. Agreement at 10⁻¹⁶ says the implementation is right; it says nothing about whether the model describes your coating. See what this page does not claim.

A dash in the class column means the source assigns no tolerance class to that row — the literature cases that compare against a published estimator rather than an exact value.

Every case at a glance

26 rows across 19 cases and five kinds of reference. 21 of them open in the simulator with one click, signed out, with the exact stack the row was measured on. Deviations are printed as they are, not rounded into an adjective.

CaseWhat it isWhat it testsReference classReferencePhotizon|Δ|
A — Analytic closed forms
A1Fresnel single interface, 550 nminterface, dispersionT1 closed form0.042388045594775860.042388045594775860.0Open
A1′Index-matched layer is invisibleinvarianceT1 invariance(no change)(no change)2.8 × 10⁻¹⁷ over 3 thicknessesOpen
A2(TiO₂/SiO₂)⁷ QW mirror, 550 nmmultilayer productT1/T2 closed form0.99936850782827240.99936850782827240.0Open
A2′Same, N = 2 / 5 / 10accumulationT1/T2 closed formsee the casesee the case≤ 2.2 × 10⁻¹⁶Open
A3MgF₂ QW AR minimum, 550 nmAR conditionT1/T2 closed form0.0124687634064657390.0124687634064657281.0 × 10⁻¹⁷Open
A4Brewster zero at 56°, p-polpolarization, angle, SnellT1 closed formλ_B = 320.7923776919618 nm, R_p = 0same λ, R_p < 10⁻³²0.0 pmOpen
A5aSi etalon, Airy pointwisemulti-beam interferenceT1/T2 closed formAiryengine2.8 × 10⁻¹⁴ (500 pts)Open
A5bSi etalon resonances T = 1phase over 40 ordersT1 closed form1 exactlyT = 1 to the last bit at all 12 (R < 10⁻²⁶)max |1 − T| = 0.0Open
A5cFSR from the group indexdispersion of the FSRT3 closed form33.8698 nm33.8963 nm−0.078 %Open
A5dFSR from the phase index (the wrong way)—T3 closed form35.1122 nm33.8963 nm+3.59 %Open
A6Opaque Ag, J&C node 756 nmmetals, complex indexT1/T2 closed form0.99579529594529140.99579529594529162.2 × 10⁻¹⁶Open
A6′Ag T over 50 → 500 nmnumerical stabilityT1 closed formexponential1.0 × 10⁻² → 9.4 × 10⁻²⁰clean over 18 decadesOpen
A7Half-wave absentee × 9invarianceT1 invariance(no change)(no change)0.0 exactlyOpen
A7′Absorbing half-wave (Ta₂O₅)k resolutionT3 invariancenot absenteeΔ = 5.26 × 10⁻⁵(physical)Open
B — Independent code
B1Ag-in-stack, 40°/70°, s & poblique + absorptionT1 tmm 0.2.0ByrnesPhotizon≤ 1.9 × 10⁻¹⁵Open
B214-layer QW, 0° & 45°accumulationT1 tmm 0.2.0ByrnesPhotizon≤ 2.0 × 10⁻¹⁴Open
B3Coherent / incoherent / coherentKatsidis-Siapkas vs inc_tmmT1 tmm 0.2.0ByrnesPhotizon≤ 2.6 × 10⁻¹⁵Open
B4400 nm coating on a 160 µm slabreal-sample geometryT1 tmm 0.2.0ByrnesPhotizon≤ 1.3 × 10⁻¹⁵Open
C — Published data
C1SCHOTT N-BK7 n_d / n_e / ν_dmaterial modelT2 published1.51680 / 1.51872 / 64.171.5168000345 / 1.5187219715 / 64.1673≤ 3.5 × 10⁻⁸ (index)no link
C2Johnson & Christy Ag table nodesdata provenanceT2 published(0.03, 5.242) / (0.04, 7.795)identical0.0Open
L — Published literature
L1Five wideband reflectors, Tikhonravov & Trubetskov 2012 Table 2design formula, 73–85 layersT3 published tableN 73/83/85/83/82; TOT; R_min 99.80–99.94 %N exact 5/5; TOT within 0.031 %R_min −0.013 to +0.065 ppno link
L2-aMacleod p. 146 — four printed claimsabsentee theorem + printed RT1 / T2 textbookabsentee; 1.26 %; 0.38 %; "virtually zero"0.0 exactly; 1.260079 %; 0.376479 %; 0.000237 %see the caseno link
L5Achievable broadband-AR envelopes (two independent papers)the optimizer, not the TMM— published estimators0.26982611286150426 % / 0.27240968739155025 %0.2965467215991829 %+9.9 % / +8.9 % aboveno link
L2-bMacleod Table 4.2 — the Reichert four-layer designa real patented coating— textbook tabledesign centred on 550 nm (text claim, p. 155)minima midpoint 549.85 nm0.15 nmno link
O — Optimizer
O1Two-layer V-coat, LM convergenceoptimizer vs an analytic root setT1 analytic root seta two-branch family15 / 15 runs, ≤ 1.8 × 10⁻¹ nm at shipped defaultsR ≤ 9.9 × 10⁻⁷ (1.0 × 10⁻⁶ stopping rule)Open
O2Broadband AR preset is a stationary point of its own meritconvergence + the landscape— independent stationary solveMF 0.001299261999793193MF 0.0012992620232352503≤ 0.0006 nmOpen

A — Analytic closed forms

All Air incidence, all reproducible by a signed-out visitor today. Every range below was chosen so that the shipped 500-point grid lands on exactly 1.000 nm steps at integer wavelengths, so the wavelength quoted here is a wavelength you can hover. Several scans below deliberately run under a material’s cited window — the 301 nm floor sits below TiO₂’s cited 430–1530 nm, and case A7’s Ta₂O₅ link also starts below that dataset’s 350 nm floor — so those links open with a material-validity advisory. That is expected and correct: an advisory is a validity statement, not a breakage signal.

A1T1

Fresnel reflectance at a single interface

|Δ| = 0.0 (bit-identical)

Open in the simulator
A2T1 / T2

Quarter-wave stack maximum reflectance

|Δ| = 0.0 at N = 7; ≤ 2.2 × 10⁻¹⁶ from N = 2 to N = 10

Open in the simulator
A3T1 / T2

Single-layer quarter-wave AR minimum

|Δ| = 1.0 × 10⁻¹⁷ (8.3 × 10⁻¹⁶ relative)

Open in the simulator
A4T1

Brewster's angle — polarization × angle × dispersion

|Δλ| = 0.0 pm; R_p < 10⁻³² at λ_B

Open in the simulator
A5T1 / T2 / T3

Fabry-Pérot etalon — the Airy formula, and the group-index FSR

max |ΔT| = 2.8 × 10⁻¹⁴ over 500 points; FSR −0.078 %

Open in the simulator
A6T1 / T2

Opaque metal — the Fresnel limit and Beer-Lambert decay

|Δ| = 2.2 × 10⁻¹⁶ at 756 nm; 6.7 × 10⁻¹⁶ at 1088 nm

Open in the simulator
A7T1 / T3

The half-wave absentee layer — an invariance gate

Deviation exactly 0.0 in all nine lossless insertions

Open in the simulator

B — Cross-validation against an independent implementation

Nine comparisons across four cases, each over the exact 500-point grid the share link produces — not a convenience grid. A number you cannot see on the plot is not a benchmark.

Reference implementations

  • tmm 0.2.0 (released 26 November 2024), by Steven J. Byrnes, MIT licence, pypi.org/project/tmm/. The physics is documented in S. J. Byrnes, Multilayer optical calculations, arXiv:1603.02720. It is the de-facto free reference in this field and the package you are most likely to already have installed.
Protocol. Our engine is also importable as tmm, so the two run in separate processes, with our source directory explicitly removed from the interpreter path for the reference run. Ignoring that silently compares the engine to itself, which is the most dangerous possible failure mode for a page like this. Our materials layer exports the identical complex n(λ) table to the reference, so the comparison isolates the transfer-matrix algebra and does not double-count the material model.
B1T1

Silver inside the stack, 40° and 70°, both polarizations

max |ΔR| = 1.17 × 10⁻¹⁵ · max |ΔT| = 1.89 × 10⁻¹⁵

Open in the simulator

What the tool computes

MgF₂ 100 / Ag 15 / TiO₂ 60 on BK7, 400–899 nm.

Measured agreement

Caseθ, polmax |ΔR|max |ΔT|
B1a40°, s1.17 × 10⁻¹⁵1.89 × 10⁻¹⁵Open
B1b40°, p9.44 × 10⁻¹⁶1.89 × 10⁻¹⁵Open
B1c70°, p1.11 × 10⁻¹⁵1.22 × 10⁻¹⁵Open

Spot values you can check without running anything (B1a, 40°, s-polarised)

λPhotizon RByrnes RPhotizon TByrnes T
450 nm0.57843961890.57843961890.40902353310.4090235331
650 nm0.39108259370.39108259370.59781615850.5978161585
850 nm0.40850567280.40850567280.58025316870.5802531687

Why a skeptic should care

A 15 nm silver layer inside the stack at 40° and 70°, in both polarizations. Absorption (R + T = 0.977 at 40°, measured closure gap 2.0 × 10⁻²), oblique incidence and the p-polarised admittance are all live simultaneously. This is where sign conventions on r_p and the complex-cosine branch cut go wrong, and where they would be invisible at normal incidence.

B2T1

Fourteen layers of matrix product

max |ΔR| = 1.82 × 10⁻¹⁴ · max |ΔT| = 1.95 × 10⁻¹⁴

Open in the simulator
B3T1

Coherent / incoherent / coherent — two different formalisms

max |ΔR| = 1.11 × 10⁻¹⁶ · max |ΔT| = 2.33 × 10⁻¹⁵

Open in the simulator

What the tool computes

MgF₂ 99.75 / BK7 1 mm incoherent / MgF₂ 99.75 in air, 350–849 nm.

Measured agreement

Caseθ, polmax |ΔR|max |ΔT|
B3a0°, s1.11 × 10⁻¹⁶2.33 × 10⁻¹⁵Open
B3b30°, p1.63 × 10⁻¹⁶2.55 × 10⁻¹⁵Open

Why a skeptic should care

This is the case a sophisticated skeptic actually probes. Our per-layer incoherent handling is Katsidis-Siapkas — a 2×2 intensity-matrix product between coherent blocks; the reference’s incoherent path is a different formulation of the same physics. That two independent incoherent formalisms agree to 1.1 × 10⁻¹⁶ on a coherent–incoherent–coherent sandwich is a much stronger statement than any coherent-only agreement, because the incoherent path is where implementations genuinely disagree.

B4T1

A real sample geometry — 400 nm coating on a 160 µm slab

max |ΔR| = 9.44 × 10⁻¹⁶ · max |ΔT| = 1.33 × 10⁻¹⁵

Open in the simulator
What a cross-validation can and cannot prove. The reference implementation and Photizon implement the same textbook method. Agreement at 10⁻¹⁵ proves neither is right; it proves that two independent implementations of the standard method do not disagree, which is the strongest claim a cross-validation can make. Physical validity is the published-data tier’s job.

C — Published data

The two cases whose reference is a measurement rather than a formula. They test the material model — the half of the calculation the whole analytic and cross-validation stack takes as given.

C1T2

SCHOTT N-BK7 catalogue check values

|Δ| ≤ 3.5 × 10⁻⁸ on the index

The reference

SCHOTT’s published N-BK7 data sheet (glass code 517642.251), freely downloadable, prints n_d = 1.51680 (587.5618 nm), n_e = 1.51872 (546.074 nm) and ν_d = 64.17. Our Sellmeier coefficients come from the SCHOTT Zemax catalogue 2017-01-20b; the check values are an independent output of that fit, printed by the manufacturer.

Measured agreement

QuantitySCHOTT publishedPhotizon|Δ|
n_d (587.5618 nm)1.516801.51680003450058853.5 × 10⁻⁸
n_e (546.074 nm)1.518721.51872197147082642.0 × 10⁻⁸
ν_d = (n_d − 1)/(n_F − n_C)64.1764.16733623749982.7 × 10⁻³ (4.1 × 10⁻⁵ rel.)

Reference values are the manufacturer’s published check values for N-BK7 (SCHOTT AG data sheet, glass code 517642.251). Photizon values computed independently from the shipped Sellmeier fit. The three published values were read from the data sheet header and cross-checked against the RefractiveIndex.INFO SCHOTT page, which independently states n_d 1.5168 and V_d 64.17.

The data sheet also carries a transmittance table. It could not be rendered at source in the session that produced this page, so no transmittance claim ships here.
C2T2

Johnson & Christy noble-metal constants → opaque mirror

Δ = 0.0 — the interpolant is exact at its own nodes

Open in the simulator

L — Published literature

Designs and results printed in the coating literature, rebuilt from their own published parameters and run through the shipped engine. A literature reproduction tests the model and the data path, so its agreement is orders of magnitude looser than the analytic tier — by design. The analytic tier prints 10⁻¹⁷; the first case below prints 0.013 percentage points. That is not a regression, it is a different and harder question being answered.

None of these can ride a share link. Every case here uses idealised indices (n_H = 2.35, n_L = 1.45, and so on), which are custom materials, and custom materials travel in the request body rather than the URL. So this tier is a rendered table of inputs, reference and our value — not a one-click case.
L1T3

Five wideband reflectors from a published design formula

N exact 5/5 · TOT within 0.031 % · R_min −0.013 to +0.065 pp

What the tool computes

All five designs built from the paper’s own design formula and its published coefficients, then run through the shipped engine on the paper’s own grid: 400–900 nm at 0.5 nm, 1001 points, normal incidence, air incidence medium. Materials as the paper states them: n_H = 2.35, n_L = 1.45, substrate n_sub = 1.52, all non-dispersive and lossless. The formula coefficients are quarter-wave optical thickness units at a control wavelength of 500 nm, so a coefficient q on a layer of index n is a physical thickness q · 125 nm / n. A term whose coefficient is zero is omitted.

The design formula and its published coefficients

c₁H d₁L [a₁H b₁L]^m₁ c₂H d₂L [a₂H b₂L]^m₂ c₃H d₃L [a₃H b₃L]^m₃ c₄H

Outermost (air-side) layer first. Every number below is an input to the rebuild; the layer count beside each design is an output of it, and it is also the published one.

DesignN (ours)m₁m₂m₃a₁a₂a₃b₁b₂b₃c₁c₂c₃c₄d₁d₂d₃
173118140.8881.2021.5120.9081.1681.5781.0351.1460.9912.00.9381.3080.899
2831411130.9061.2081.604≡ a₁≡ a₂≡ a₃1.0701.489≡ a₂1.9821.7521.2821.918
3851312141.6571.1960.9041.4821.181≡ a₃1.7821.1981.2631.9611.6811.007≡ a₃
4831213130.8971.1801.581≡ a₁≡ a₂≡ a₃0.5522.01.5090.1000.8431.964≡ a₃
5821014140.8941.1791.573≡ a₁≡ a₂≡ a₃0.9660.9321.494≡ 00.8470.515≡ a₃

Design coefficients from Table 2, “Parameters of Five Wide Band Reflector Designs”, of A. V. Tikhonravov and M. K. Trubetskov, Applied Optics 51(30), 7319–7332 (2012), journal p. 7328, DOI: 10.1364/AO.51.007319. The printed table was read two independent ways — a text extraction and a 300 DPI visual render of the page — which agree on all 19 rows across all five designs. Photizon values computed independently.

≡ aⱼ is the paper’s own notation for a parameter constrained equal to aⱼ during its optimisation, and design 5’s c₄ prints ≡ 0 in that same notation. Those readings are self-checking: substituting any wrong aⱼ into any ≡ group moves the total optical thickness by 2.8 % to 10.8 % (a single low-multiplicity cell by at least 0.28 %), against the ≤ 0.031 % the printed readings give — so a misread constraint could not hide inside the agreement below.

Measured agreement

DesignN pub.N oursTOT pub. (nm)TOT ours (nm)ΔTOTR_min pub.R_min oursΔ (pp)R_avg ours
1737311285.611286.6+0.009 %99.80 %99.8133 %+0.01399.98801 %
2838313045.313043.6−0.013 %99.81 %99.7971 %−0.01399.99653 %
3858513056.313054.9−0.011 %99.94 %99.9693 %+0.02999.99785 %
4838312732.012732.9+0.007 %99.92 %99.9352 %+0.01599.99604 %
5828212661.812657.9−0.031 %99.87 %99.9353 %+0.06599.99628 %

Reference values (layer count, total optical thickness and minimum reflectance) are from Table 2 of A. V. Tikhonravov and M. K. Trubetskov, “Modern design tools and a new paradigm in optical coating design”, Applied Optics 51(30), 7319–7332 (2012), DOI: 10.1364/AO.51.007319. Photizon values computed independently with the shipped transfer-matrix engine on the paper’s own 0.5 nm, 1001-point grid over 400–900 nm.

Two internal consistency checks on the inputs

  • Layer count is an arithmetic identity of the design formula: N = 7 + 2(m₁+m₂+m₃), minus one when c₄ = 0. Evaluated on the published m values this gives 73, 83, 85, 83, 82 — exactly the published layer counts, 5/5, with no fitting.
  • Total optical thickness is 125 nm × Σ(coefficients), which reproduces the published totals to ≤ 0.031 % across all five designs — consistent with the 3-decimal rounding of the printed parameters, again with no fitting.

What the agreement is limited by, and the two open items

The published design parameters are printed to 3 decimals and the results to 2. Perturbing every coefficient uniformly within ±0.0005 — half of the last printed digit, 150 draws per design — moves R_min by sd 0.005 pp for design 1 and sd 0.002 pp for design 5, and moves R_avg by under 0.0001 pp. So a few hundredths of a percentage point is the agreement level this case can realistically reach, and any residual smaller than that is not evidence of anything.

Two residuals we cannot explain, printed rather than hidden. Design 5 is +0.065 pp, and parameter rounding accounts for only ±0.004 pp of it. And the paper’s blanket statement that average reflectance exceeds 99.99 % holds for four of the five designs on our engine; design 1 gives 99.98801 %, 0.002 pp short. Rounding does not close either. The leading candidate cause for design 5 — that we misread its c₄ coefficient as zero — is eliminated, not merely corroborated: a 300 DPI render of the printed table shows c₄ ≡ 0 as printed. The remaining candidates are a difference in the published table itself or a different substrate treatment.

Why a skeptic should care

These authors are the originators of needle optimisation and the principals behind the design package the coating industry actually uses. A design given by a closed-form expression with printed numeric parameters, checked against a printed table of numbers, needs no curve digitisation — which removes the single largest error source in any literature reproduction.

L2-aT1 / T2

A textbook three-layer AR — four printed claims from one page

Absentee difference exactly 0.0; three printed values reproduced at their printed precision

What the tool computes

Macleod introduces this design by observing that an inner half-wave layer is an absentee at λ₀, so the two-layer stack’s peak reflectance in the middle of the low-reflectance region equals that of the single-layer coating. Raising the index of the central quarter-wave layer to 2.0 and then to 2.13 reduces the reflectance at λ₀ twice more. Four independently checkable claims in one paragraph. All designs are all-quarter-wave at λ₀, non-dispersive, lossless, normal incidence, air incidence medium.

Measured agreement

ClaimDesign (air → substrate)Photizon R(λ₀)As printed in the book
A half-wave inner layer is an absenteeAir | 1.38 QW | 1.90 HW | Glass 1.520.012600790214630274—
…so it equals the single-layer coatingAir | 1.38 QW | Glass 1.520.012600790214630274—
Difference between the two0.0 exactlythe absentee claim
Peak reflectance of that paireither of the above1.260079 %1.26 %
…reduced by the higher-index centreAir | 1.38 | 2.00 | 1.90 | Glass 1.52, all QW0.376479 %0.38 %
…reduced further at index 2.13Air | 1.38 | 2.13 | 1.90 | Glass 1.52, all QW0.000237 %"virtually zero"

Reference design and printed values from H. A. Macleod, Thin-Film Optical Filters, 4th ed., CRC Press / Taylor & Francis (2010), p. 146. Photizon values computed independently with the shipped transfer-matrix engine at normal incidence.

The book prints three significant figures, so 1.260079 %, 0.376479 % and 0.000237 % are as close as the printed numbers allow. The difference between a printed 3-figure value and a 16-figure computed one is not a residual and this page does not print one.

Two independent checks that this is a reproduction and not a coincidence

  • Analytic identity. For an all-quarter-wave stack at λ₀, Y = n₁²n₃²/(n₂²n_s) and R = ((n₀−Y)/(n₀+Y))². Evaluated by hand this gives 0.01260079021463029, 0.0037647873741598423 and 2.370862680869589e-06 — the engine agrees to 6.9e-18, −2.6e-18 and 5.8e-19 respectively. That is a different computation from the transfer matrix, so it isolates the layer algebra.
  • λ₀-invariance is bit-identical. Rebuilding the 0.38 % design at λ₀ = 400, 550, 1000 and 10 000 nm returns 0.0037647873741598397 at all four — the same float, not four close floats. A quarter-wave design’s on-resonance reflectance must not depend on the reference wavelength, and it does not.

Why a skeptic should care

Its first claim is the half-wave absentee theorem, which is already this page’s strongest case (nine lossless insertions returning a bit-identical number). This gives that invariance a textbook page number.

L5

Two published estimators of the best achievable broadband AR

Our needle optimum sits +9.9 % and +8.9 % above the two envelopes; the envelopes agree with each other to 0.96 %

What the tool computes

The only case on this page that tests the optimizer rather than the transfer-matrix algebra. The problem was chosen to sit inside both papers’ validity grids simultaneously: band 400–800 nm, air incidence, substrate glass n = 1.52, n_L = 1.45, n_H = 2.03, all non-dispersive, normal incidence. Merit: 101 uniform targets on 400–800 nm, R → 0, unpolarized. Optimizer: the shipped needle refinement (max 40 insertions, minimum layer 1.0 nm). Reporting grid: 0.1 nm, 4001 points.

The reference

Two independent published estimators of the average residual reflectance achievable by a two-material broadband AR, restated here in our own typography:

R_AVE(B, L, T, D) [%] = (4.378 / D) · (1/T)^0.31 · [exp(B − 1.4) − 1] · (L − 1)^3.5

with, in the paper’s own terms: B the longest wavelength in the band divided by the shortest (valid 1.4 to 5.0); L the index of the outermost layer (valid 1.1 to 2.2); T the total optical thickness in waves at the geometric mean of the band edges (valid 1.0 to 9.0); D the highest minus the lowest index among all layers except the last (valid 0.4 to 2.8). Near-normal incidence only; the output is a percentage.

Estimator from Eq. (1) of R. R. Willey, “Predicting achievable design performance of broadband antireflection coatings”, Applied Optics 32(28), 5447–5451 (1993), p. 5448, DOI: 10.1364/AO.32.005447. Photizon values computed independently.

R_av = R_∞ · b^(1/M)

where M is the number of clusters in the design, and R_∞ and b are tabulated per band ratio and index ratio. The cluster optical thickness that turns a total optical thickness into a cluster count M is

T_c = (λ_u / 2) · [1 + (2/π) · arcsin((ρ_HL − 1)/(ρ_HL + 1))], ρ_HL = n_H / n_L

Estimator and tabulated parameters from Eqs. (2)–(3) and Tables 2–3 of A. V. Tikhonravov, M. K. Trubetskov, T. V. Amotchkina and J. A. Dobrowolski, “Estimation of the average residual reflectance of broadband antireflection coatings”, Applied Optics 47(13), C124–C130 (2008), DOI: 10.1364/AO.47.00C124. Photizon values computed independently.

Measured agreement

QuantityValue
Layers found19, sequence air→substrate LHLHLHLHLHLHLHLHLHL (outermost = n_L, as both papers require)
R_avg over 400–800 nm (ours)0.2965467215991829 %
R_max (ours)0.5669083899517552 %
Total optical thickness (ours)1697.4921668586087 nm
T — waves at 565.685 nm3.0007705554919215
M — clusters (TOT / T_c, T_c = 442.64030323049093 nm)3.8349245526670748
Willey Eq. (1) at that T, L = 1.45, D = 0.580.26982611286150426 %
Tikhonravov Eq. (3) at that M0.27240968739155025 %
Tikhonravov R_∞ (M → ∞ floor)0.195 %
ours / Willey1.0990289948378484
ours / Eq. (3)1.0886056382163056
ours / R_∞1.520752418457348

Three things this establishes. Neither envelope is violated — both formulas estimate the achievable optimum and our best design sits above both, as it must; a result below either would have been a red flag about the engine, the merit or our reading of the formula, and that is the falsifiable part. The two published estimators agree with each other to 0.96 % (0.26983 % vs 0.27241 %) — two different groups, fifteen years apart, one an empirical curve-fit and one a cluster-theory derivation, at the same operating point. And our shipped needle optimizer lands within about 10 % of both, which is a statement about the optimizer that no analytic case on this page can make.

What it does not establish: that we find the global optimum. We are 9.9 % and 8.9 % above the two estimators and 52 % above the M → ∞ floor. This is a limited search — three seeds, one index pair explored in depth — not an exhaustive one.

Two assumptions, flagged rather than hidden

  • The averaging measure. Neither paper states whether average residual reflectance is averaged uniformly in λ or in wavenumber. We used uniform in λ. For a design with sub-percent ripple across a 2:1 band this is a small effect, but it is unverified.
  • Merit vs reported quantity. Our optimizer minimises RMS(R); both papers report the mean of R. The procedures match, but the optimised functional and the reported functional are not the same function.

Reproducing the cluster-thickness formula against its own published table

Before using Eq. (2) we ran it against all eighteen rows of the paper’s own table of cluster thicknesses. Seventeen of the eighteen agree within 0.51 nm (largest of those seventeen: 0.5011674418578878 nm), and one row differs by 8.276 nm. That summary is over the whole table, not over what is shown below.

7 of the 18 rows are shown here — the rows the argument turns on: the six that share ρ_HL = 1.62069 and so bracket the outlier on both sides, plus the row this page’s engine test uses. The outlier is one of the seven.

Band (nm)ρ_HLEq. (2), computed here (nm)As printed (nm)Δ (nm)
400–6001.62069345.66744496123863346−0.333
400–7001.62069403.2786857881117403+0.279
400–9001.62069518.5011674418579518+0.501
400–10001.62069576.112408268731576+0.112
400–11001.62069633.7236490956041642−8.276
400–15001.62069864.1686124030965864+0.169
400–800 (used by the engine test above)1.40000442.64030323049093443−0.360

Printed cluster-thickness values from Table 2 of Tikhonravov, Trubetskov, Amotchkina and Dobrowolski, Applied Optics 47(13), C124–C130 (2008), DOI: 10.1364/AO.47.00C124 — 7 of the table’s 18 rows, being the rows this argument uses. The 17/18-within-0.51 nm statistic above is computed over all eighteen. Photizon values computed independently from Eq. (2) of the same paper.

The one row that does not reproduce, and why we print it

At 400–1100 nm with the index pair printed beside it (ρ_HL = 2.35/1.45 = 1.62069), Eq. (2) gives 633.7236490956041 nm against a printed 642 — a residual of −8.276 nm, while the other seventeen rows sit within 0.51 nm. The residual is internal to the published paper and we cannot resolve it from outside. Two explanations, neither asserted:

  • (a) That cell was computed with a different index pair than the one printed beside it. Solving Eq. (2) = 642 at λ_u = 1100 gives ρ = 1.70174791563606, i.e. essentially exactly 1.7 = 2.465/1.45, for which Eq. (2) returns 641.8262507501745 — a −0.174 nm residual, dead-centre in the band the other rows occupy. A 1.45/2.465 row exists in both neighbouring blocks of the same table, so a one-column shift in a source spreadsheet is a mundane and specific mechanism.
  • (b) Our reconstruction of Eq. (2) misses a ρ-dependence that only manifests at this point. The paper’s own data disfavours this heavily, and that can be quantified rather than asserted: ρ_HL = 1.62069 appears in six rows bracketing λ_u = 1100 on both sides, so a missing term would have to vanish at λ_u = 600, 700, 900, 1000 and 1500 and equal +8.276 nm at 1100 alone. No smooth function of (λ_u, ρ) behaves that way. We would not bet on this explanation — and we also cannot rule it out from outside, so both go on the record.

A second, weaker signal from the paper’s own data points the same way. For the five other ρ = 1.62069 rows, the experimental column minus the theory column is +26, +17, +2, +14 and +36 nm — all positive, mean +19.0. The 400–1100 row against the printed 642 gives −2 nm, outside that range; against Eq. (2)’s 633.724 it gives +6.276 nm, inside it. Five points is not a strong prior and we do not treat it as one.

A neutral detail from the same table, recorded because it bears on the mechanism above: the 400–800 block prints the high index as 2.466 while the 400–1200 and 400–1600 blocks print 2.465. We adopted each row exactly as printed. The consequence for the row that uses it is 0.04987517013228171 nm, so nothing on this page depends on the choice.

We do not “fix” that row by adopting ρ = 1.7. Substituting our arithmetic for a publisher’s data is exactly what our data-integrity rule forbids, and no claim on this page depends on the row: the engine test above runs on the 400–800 row.

The tabulated parameters the estimate uses

λ_u/λ_lρ_HLρ_LaR_∞ (%)bln b as printedln b computed here
21.41.450.1953.6041.281.2820443397460914
21.51.450.1453.7201.311.3137236682850553

Printed parameters from Table 3 of the same 2008 paper — 2 of the table’s 12 rows: the row the estimate above uses (first) and its neighbour in the index ratio. The ln b column is recomputed here from the printed b and reproduces the printed value 12/12 across the full table, which is what establishes that the b column was read correctly digit for digit. Photizon values computed independently.

Why a skeptic should care

Two independent published estimators of the best achievable broadband AR, from different groups fifteen years apart, agree with each other to 0.96 %, and our optimizer lands about 9 % above both. That is a claim about the tool, not about arithmetic.

L2-b

A real patented four-layer coating

Design centre reproduces to 0.15 nm

O — Optimizer

Load and measure, not run. Running the optimizer is a Pro feature and Pro is not live yet, so these cases ship as results you can load into the simulator and measure — not as ones you can re-run. That will change when the tier does.
O1T1

Two-layer V-coat converges to an analytically enumerable root set

15 / 15 runs land on the analytic family; how close depends on the stopping rule, not the physics

Open in the simulator

What the tool computes

A two-layer MgF₂ / Ta₂O₅ anti-reflection coating on BK7, target R = 0 at 532 nm, optimised by the shipped Levenberg-Marquardt refiner against a single-point merit function — a merit a user can build in the optimizer panel’s target table in three clicks.

/thin-film?layers=main/MgF2/Franta:123.0660934743829,main/Ta2O5/Gao:138.34811272910952&sub=BK7&range=400-899&target=532

The reference

Analytic, not “our own merit”. At a single wavelength the two-layer AR problem has a closed solution: setting the recursive Fresnel amplitude r = (r₀₁ + r₁e^2iβ₁)/(1 + r₀₁r₁e^2iβ₁) to zero is two real equations in (d₁, d₂). It was solved with an independent implementation — a recursive Fresnel / Airy recursion sharing no code with the engine’s characteristic-matrix path — at n_MgF₂(532) = 1.384210012165197 (the measured e-beam film entry main/MgF2/Franta), n_Ta₂O₅(532) = 2.16353 + 3.3 × 10⁻⁵i and n_BK7(532) = 1.5194725830654814. The solution is a two-branch family, periodic in each layer by its own half-wave thickness (MgF₂ 192.1673717587982 nm, Ta₂O₅ 122.94722051462193 nm):

Branchd(MgF₂)d(Ta₂O₅)|r| (independent solver)R (engine, at that design)
I69.0983193687416 nm107.54610900033335 nm7.3 × 10⁻¹⁷5.8086 × 10⁻³²
II123.06932766464905 nm15.400600167543653 nm2.9 × 10⁻¹⁷4.2353 × 10⁻³²

…plus any integer number of half-waves added to either layer. This enumeration is the reference; it is a property of the physics, not of our optimizer.

That half-wave periodicity is exact only in the lossless limit, and this Ta₂O₅ is not lossless. Shifting branch II by one exact half-wave gives R = 2.99 × 10⁻¹⁰ rather than a root, and the true root nearby sits about 0.0032 nm away — it is the design the O1 link opens, to 5 decimal places. So roughly 0.0032 nm of the 7.1 × 10⁻³ nm “worst distance” in the tightened row below is drift in the reference family, not optimizer error. We print the larger number rather than the flattering one.

Measured agreement

Fifteen runs from fifteen starting points: five fixed — (100, 100), (150, 50), (50, 150), (200, 200) and (123.33, 138.00) nm — plus ten uniform-random in [20, 300]² nm from default_rng(20260804).

MetricShipped defaultsconvergence_threshold = 1e-11
Runs that converged to a member of the analytic family15 / 1515 / 15
Worst distance from the returned design to the nearest family member1.8 × 10⁻¹ nm7.1 × 10⁻³ nm
Worst residual reflectance at the returned design9.9 × 10⁻⁷2.7 × 10⁻¹¹
Iterations2 to 3610 to 43
Wall-clock per run1.5 to 43.4 ms6.9 to 49.0 ms
Both columns are the same optimizer; the difference is where it is told to stop. This merit has one target at unit weight, so the merit function is the reflectance, and the shipped convergence_thresholdof 1 × 10⁻⁶ therefore halts the run the moment R < 10⁻⁶. Tightening it to 1 × 10⁻¹¹ buys two more decades and then stops improving: the floor is the optimizer’s 0.001 nm thickness threshold and its 0.01 nm finite-difference step. At the exact analytic root the engine returns R = 1.0 × 10⁻³¹, so none of this is physics — it is the difference between “converged” and “converged to the precision it was asked for”. convergence_threshold is a field on the optimize API (OptimizeOptions, default 1 × 10⁻⁶); it is not exposed in the optimizer panel, so the left column is what you will reproduce in the browser.

Why a skeptic should care

An optimizer is easy to fake: run it, print the merit it reached, declare success. Here the answer is known independently and is not unique, so the test is whether the optimizer lands on the solution manifold from arbitrary starting points — which catches a wrong analytic gradient, a sign error in the Jacobian, and a merit that is subtly not what it claims to be. Load the returned design and read R = 0.0000 % at 532 nm on the plot.

O2

The shipped broadband-AR preset is a stationary point of its own merit

LM lands 0.0006 nm from an independent stationary solve

Open in the simulator

Local refinement is not global search, measured

On the 400–800 nm broadband-AR problem of case L5, plain Levenberg-Marquardt from random starts is much worse than needle synthesis, and it gets worse as layers are added — the opposite of what a naive reader expects.

MethodNR_avg over 400–800 nm
Needle, 10 insertions190.29655 %
LM, best of 8 random starts60.60645 %
LM, best of 8 random starts100.48823 %
LM, best of 8 random starts141.46459 %
LM, best of 8 random starts201.22699 %

At the higher index contrast (n_L = 1.45, n_H = 2.465) random-start LM degrades to 2.57 % at N = 10 and 5.60 % at N = 20 — worse than bare glass (4.26 %) in one case. Needle is not a nicety on this problem; it is the difference between a working AR coating and a mirror.

Seed choice matters too, and it is measured rather than asserted: needle from a two-layer L|H seed inserted nothing at all and stopped at R_avg 1.98 %; from a four-layer L|H|L|H seed it reached 13 layers and 0.48956 %; from a two-layer H|L seed it reached 19 layers and 0.29655 %.

How to break it

Three links that are deliberately wrong, each beside the correct one. A benchmark page that only shows the tool succeeding reads like marketing. A page that hands you the knife reads like engineering, and it costs us nothing because the invariants hold.

TryWhat should happenWhy it is hereCorrect
Half-wave layer at 188.4 nm, not 188.36766171747468R(550) moves: 0.9286763217372163 → 0.928676320223644, first differing decimal the 9th. Across the band the deviation is largest at the 301 nm edge, |ΔR| = 2.959 × 10⁻⁵.Shows the invariance is real, not a hard-coded equalityCorrect A7
One layer at 5 % of its thickness (2.596362809137416 nm)R drops from 99.94 % (0.9993685078282724) to a visibly different valueShows the closed form is not being pattern-matchedCorrect A2
Etalon scanned over 1199–1698 nmThe material-validity advisory fires, naming the silicon dataset’s own cited 1360 nm floorShows the range gate is live, not decorativeCorrect A5

Considered and not shipped

Four candidates were built, measured and then left off this page. They are listed because what a benchmark page leaves out is part of what it claims.

CandidateWhy it is not here
A measured spectrum from a deposited filmThe one strong candidate is the paper that produced the Ta₂O₅ dataset we ship, whose sample is exactly the geometry of case B4. Its full text could not be opened at source, and nothing is published here from a source we have not read. This remains the page’s one genuine gap.
A textbook buffer-layer invarianceThe claim is that the admittance locus does not change with buffer-layer thickness. On our engine the two designs agree only at the buffer’s own half-wave wavelength (|Δ| = 2.6e-18 at 495.0 nm, where 2 × 247.50 = 495.00) and elsewhere the reflectance moves by an order of magnitude. The book’s sentence is a qualitative statement about the appearance of a plotted diagram and is fine as written; it is not an exact invariance, so it is not published here as a reproduced numeric claim.
Two design-contest summary papersNeither prints a layer table for the problems we wanted — only aggregate columns (layer count, total thickness, merit). Four aggregate numbers cannot reconstruct a 23-layer design, and we do not substitute a plausible one. One of the two also depends on spectrum and dispersion files distributed outside the paper.
A commercial-software comparison tierDropped on legal advice before any measurement was made.

How the numbers are produced

  • Every published number is computed on the link’s own grid — the same 500-point spectral grid the share link produces, not a convenience grid. A number you cannot see on the plot is not a benchmark.
  • The cross-validation reference is imported in a process where our own source directory is not on the interpreter path. Our engine’s package name collides with the reference’s; ignoring that would silently compare the engine to itself.
  • Numbers on this page are rendered as strings from a fixed list, never recomputed at page load. A page that recomputes its own claims from the tool it is validating proves nothing.
  • Full precision where the claim is full precision. A value whose whole point is that it agrees to sixteen digits is not shortened to four.
  • Every share link on this page is machine-checked against the simulator’s own decoder, so a link cannot silently open a different stack from the one its row describes.

What this page does not claim

  1. These numbers are about the implementation, not about your coating. Agreement with a closed form at 10⁻¹⁶ says our arithmetic is right. It says nothing about whether the model describes a real deposited film. More in the manual
  2. The dominant uncertainty in any real prediction is the optical constants, not the numerics — by many orders of magnitude. Our TiO₂ is Devore’s 1951 bulk rutile (n = 2.648 at 550 nm); a real sputtered TiO₂ film is nearer 1.7–2.4. Our Ta₂O₅ is one specific IAD e-beam deposition run. If your process differs, so will your spectrum, and no amount of numerical precision fixes it. Each material page states its source and its validity window. More in the manual
  3. We model an idealised stack: perfectly flat, perfectly parallel, laterally homogeneous layers, illuminated by a plane wave. No scattering, no thickness non-uniformity, no substrate wedge, no birefringence, no nonlinearity, no thermal effects. Interface roughness is available as an effective-medium approximation (Bruggeman), which is a model of a rough interface, not a solution of one. More in the manual
  4. The textbook stop-band-width formula and our measured span differ by 47 nm, and dispersion is the smallest reason. Δλ = (4λ₀/π)·arcsin((n_H − n_L)/(n_H + n_L)) gives 205.46 nm for our 550 nm TiO₂/SiO₂ mirror; the engine’s contiguousR > 99 % span is 158.46 nm. The closed form is exact in normalized frequency g = λ₀/λ, where Δg = 0.373568 puts the band edges at λ₀/(1 ± Δg/2) = 463.44 and 676.33 nm, a width of 212.89 nm that the engine reproduces to 0.05 nm on a 15-pair stack with the same quarter-wave thicknesses and the indices frozen at their 550 nm values. So the 47.00 nm splits three ways: writing Δλ = λ₀·Δg instead of taking those edges, +7.43 nm; measuring seven pairs at the 99 % contour rather than an infinite stack at its band edge, −33.60 nm; and only then material dispersion, −20.83 nm, our TiO₂ running from n = 3.42 at 350 nm to 2.49 at 1000 nm. Neither the formula nor the engine is in error; the two numbers are different definitions of width. The same 301–800 nm scan carries a second R > 99 % run at 320.9–335.9 nm, produced by TiO₂ data extrapolated below its cited window; measured end to end across both runs the span is 316 nm. More in the manual
  5. The optimizer is a local refiner, not a global search. 200 random starts on a four-layer AR problem produced 70 distinct local minima. Needle synthesis and multi-start help; neither is a proof of global optimality, and we do not claim one. More in the manual
  6. “Lossless” materials in our catalogue are lossless in the model. BK7, SiO₂, MgF₂ and TiO₂ ship with k ≡ 0, so a computed transmittance through a thick substrate is an upper bound — real N-BK7 has a finite internal transmittance we do not model. More in the manual
  7. Forward modelling only. No inverse problem: we do not fit a stack to a measured spectrum, and the ellipsometry surface is forward Ψ/Δ only. More in the manual
  8. Validity windows are enforced, not assumed. Every material carries the wavelength range its cited source states, and the tool warns when a scan leaves it. Outside the window the curve is extrapolation, and we say so rather than drawing it silently. More in the manual
Open the Thin-Film Coating SimulatorTool documentation