Depth Distribution Results
This chapter covers the three depth-resolved result pages: Poynting Vector, Absorption Density, and Electric Field. These pages add spatial depth information to the spectral dimension so you can locate where energy flow, local loss, and field intensity are distributed inside the stack.
Use these pages to identify:
- where field enhancement is concentrated,
- which layer is responsible for local absorption,
- whether a layer boundary introduces a visible change in energy flow.
Analysis Entry
| Current results page | Method page |
|---|---|
sweep strategy and interpretation for Poynting Vector / Absorption Density / Electric Field | Depth Detector Analysis |
| layer-level attribution before depth-resolved localization | RTA and Layer Absorption Analysis |
| fallback rules for multi-dimensional sweeps | Overview |
Focus
This chapter covers three points:
- the prerequisites and shared page structure of depth-resolved results
- how to read
Poynting Vector,Absorption Density, andElectric Field - what to do when charts fall back to tables or trigger large-data safeguards
Example Setup: Coherent ITO Baseline
The screenshots in this chapter use the default ITO-on-substrate model with one required change: the substrate is switched from incoherent to coherent so the app can generate depth-resolved fields.
This baseline uses:
- The default
Structure:Air-in -> ITO (40 nm) -> Substrate (1 um) -> Air-out. SubstratewithInco.turned off, so the full stack is coherent.- The default
Optics: wavelength modeSweep,400 -> 900 nm, step5 nm;Incident Angle = 0°;pRatio = 0.5. Depth Distribution > Select All, which currently enables all four depth outputs:Poynting Vector,Absorption Density,Electric Field, andRefractive Index. This chapter focuses on the first three.Depth Resolution = 1 nm, then the top-toolbarRunbutton.


Prerequisites and shared page structure
Depth-distribution pages have explicit availability conditions. The current implementation is gated by:
| Condition | Current rule | Direct consequence when not met |
|---|---|---|
| Detector enabled | The corresponding detector must be checked in Optics > Depth Distribution | The page has no data |
| Fully coherent stack | Every layer in the stack must remain coherent | Poynting / Absorption Density / Electric Field are not generated |
| Depth resolution | resolution >= 0.1 nm and <= 100 nm; in practice it should also stay below the total stack thickness | Validation fails or the result becomes too coarse to interpret |
The three pages share the same page shell:
- Result header: shows the current result type, single-run vs
Sweep, and the chart/table toggle. - Main plot area: shows the depth-resolved plot, or a table when dimensionality becomes too high.
- Right sidebar: chart-type toggles, export actions, data-count stats, and page-specific controls.
- Layer-boundary overlay: marks the depth regions that belong to different layers.
Axes, Color Scale, and View Modes
In heatmap mode:
- the x-axis is
Depth (nm), - the y-axis is
Wavelength (nm), - color represents the selected physical quantity,
- the color bar shows the current displayed minimum and maximum.
In line mode:
- the x-axis is still depth,
- each line corresponds to one wavelength,
- the sidebar lets you select or invert the wavelength set to display.
Use Heatmap for full spatial overview. Use Line for a smaller set of explicit depth profiles at selected wavelengths.
When the App Falls Back to a Table
These pages do not always remain in chart mode. The current implementation has two automatic fallbacks:
- In
Sweepresults, the page switches to a table when the active sweep dimensionality becomes too high (for non-scalar results, this usually starts at two sweep dimensions). - When the table row count, chart point count, or 3D scatter point count exceeds the rendering limits, the app blocks the visualization and recommends CSV export.
The current limits are:
| Limit | Current threshold | Behavior when exceeded |
|---|---|---|
| Total table rows | 500,000 | Table rendering is blocked and a large-data warning is shown |
| Total chart points | 500,000 | Chart rendering is blocked or warned |
scatter3D points | 80,000 | 3D scatter rendering is blocked, export remains available |
bar3D points | 50,000 | 3D bar rendering is blocked (bar geometry is more expensive than scatter) |
| Chart optimization threshold | 100,000 | Animations and smooth curves are disabled for performance |
| Single-request TMM solve count | 50,000 | Backend safety limit to prevent timeout or memory exhaustion |
So a missing plot does not necessarily indicate bad physics. In many cases, it only means the browser-side renderer is protecting itself.
Poynting Vector
The Poynting Vector page plots the normalized z-component of the Poynting vector. In this 1D thin-film context, it is the most direct view of forward energy flow through depth.
Check:
- Check whether interfaces introduce visible steps or gradients.
- Check whether strongly absorbing regions coincide with stronger decay.
- Check whether low-loss regions remain smooth and nearly uniform.
In the baseline case used here, the map is mostly smooth. That is consistent with a relatively simple ITO-on-substrate stack. The visible change near the layer boundary reflects index contrast and layer transition rather than a localized severe loss.

Primary use
Use this page to check:
- Is energy moving through the stack smoothly, or is something changing sharply at an interface?
- Did a design change make the stack more “transparent” to power flow or more “blocked” in a specific region?
If the question is “which layer is actually absorbing,” move to Absorption Density.
Absorption Density
Absorption Density shows local absorption per depth position. It is used to locate where absorption is strongest, not to report total absorbed power.
Check:
- Identify the high-intensity regions.
- Determine whether they persist across the full band or only inside a narrow wavelength range.
- Map those regions back to the layer stack in
Structure.
This page complements Layer Absorption:
Layer Absorptionis the layer-integrated summary.Absorption Densityis the continuous spatial distribution inside the layers.
Layer Absorption is the layer-level summary. Absorption Density is the position-level distribution.

When to return to Structure
If the strongest absorption appears inside a layer that should have stayed nearly transparent, check these first:
- whether the
kvalues in the material file are too large, - whether the wrong material file was applied,
- whether the functional layer and substrate were accidentally assigned in the wrong order.
Electric Field
Electric Field is the most information-dense of the three pages. It can show field magnitude, phase, and individual Cartesian components.
The current page exposes three control groups:
| Control | Purpose | Current limitation |
|---|---|---|
Magnitude / Phase | Switch between field magnitude and phase | Phase mode restricts the component list |
Component | Select Ex / Ey / Ez / E | Total magnitude E is not available in Phase mode |
Unwrap Phase | Remove -π ~ π discontinuities in phase plots | Available only in Phase mode |
For a first pass, use Magnitude and the default component setting to locate field-enhancement regions. Use Phase after the relevant spatial region is identified.

Field-enhancement checks
Use this check sequence:
- identify the brightest region in the map,
- identify which layer contains that region,
- decide whether that layer is the one where enhancement is intended,
- if not, return to
StructureorOpticsand adjust thickness, angle, or polarization.
If the goal is to explain an absorption increase, read Electric Field together with Absorption Density.
Analysis order
Use this fixed sequence:
- Start with
Poynting Vectorto judge whether the energy transport remains smooth. - Move to
Absorption Densityto locate the dominant loss region. - Finish with
Electric Fieldto explain whether local field enhancement is driving that behavior. - Switch to the table or export CSV only when exact numeric extraction is required.
Common errors and checks
No data on the page
Check these first:
- whether
RunorRun Sweepwas actually executed, - whether the corresponding depth detector is enabled,
- whether any layer is still marked as
Inco..
Disabled depth-resolution input
This usually means no depth detector is currently enabled. In the current UI, Depth Resolution becomes editable only after at least one depth detector is checked.
Nearly flat heatmap
That does not automatically mean the model is wrong. Common reasons are:
- the physical quantity is genuinely varying only weakly,
- the dynamic range is narrow, so the color bar spans a small interval.
In that case, switch back to Line mode and inspect a smaller set of wavelength profiles directly.
Table fallback or large-data warning
This is usually a rendering safeguard, not a physics failure. The normal responses are:
- reduce the sweep dimensionality,
- increase the wavelength step,
- increase the depth resolution value (fewer depth points),
- export CSV and inspect the data outside the browser.
Next step
If the current task is to turn depth-resolved results into local-field, local-absorption, and post-optimization validation workflows, continue with Depth Detector Analysis. If the current task is to write the best solution back into the model and re-check system-level results, continue with Optimization Report and then return to the relevant Analysis page.