Skip to content

Changelog

All notable changes to PhotonLab are listed here. Versions follow semantic versioning.

A rewrite of the solver and the interface. Scenes and links from 2.x do not carry over.

  • The absorbing boundary actually absorbs now. Version 2 shipped a CPML implementation that was never called; the edges copied the neighbouring cell, which reflects every wave. The new CPML reflects 87 dB below the incident wave.
  • Plane waves and Gaussian beams are injected through a one-sided total-field / scattered-field line fed by an auxiliary 1D grid. They travel in one direction only and show reflections cleanly.
  • TE polarization (Hz, Ex, Ey) alongside TM, sharing the same kernels.
  • Drude metals: silver and gold, with surface plasmons in TE.
  • Mirror and periodic boundaries, selectable per axis.
  • Sources and probes run inside the solver at every step. The old probe and source classes copied the whole field (1 MB) across the WebAssembly boundary on every call.
  • One-byte material ids per cell with a 64-entry table and up to eight custom refractive indices. Reading the material under a cell is now exact.
  • Physical units: scenes are described in nanometres, the grid size only sets the resolution.
  • Waveforms without DC content (Ricker pulse, Gaussian wave packet) and a smooth turn-on for continuous waves. The old “Gaussian pulse” was a single-cell spike.
  • Kernels vectorised with WebAssembly SIMD. The module shrank from 267 KB to 80 KB.
  • Shape rasterisers clip before looping. A rectangle with negative coordinates no longer fills the whole grid.
  • Physics test suite: CPML reflection, TF/SF leakage, Fresnel reflection of glass and silicon, metal reflection, energy conservation, spectrum peak, hostile input.
  • New interface designed from scratch in an instrument style, with its own icon set, IBM Plex type, rulers and a status readout. Emoji and neon are gone.
  • The simulation and the WebGL renderer run in a Web Worker on an OffscreenCanvas, with a main-thread fallback.
  • A start-up benchmark picks a grid size the device can sustain (256 to 768 cells). The simulation runs at the same speed on 60 Hz and 120 Hz displays.
  • Materials are drawn on the field. In 2.x they were invisible once drawn.
  • Tools: brush, eraser, line, rectangle, ellipse, polygon, source, probe; select, move, duplicate and delete.
  • Sources: point, plane wave, Gaussian beam, phased array; continuous, pulse or wave packet; fire pulses on demand.
  • Up to eight probes, an analysis panel with signal, spectrum (with the peak in nm) and energy.
  • Field or time-averaged intensity view, five colour maps, exposure control, zoom and pan.
  • Undo and redo, scene files, compressed share links, PNG, video and CSV export.
  • English and Turkish.
  • Keyboard shortcuts (advertised in 2.x but never implemented).
  • Layouts for desktop, tablet and phone; installable as an offline app.
  • Twelve experiments, with the 2.x geometry errors fixed: the lens was concave, the waveguide had a stray spur and gaps, the parabola’s source was not at its focus, the zone plate used the wrong zone radii, and the Fresnel lens could not be opened from the menu.
  • Placing a probe froze the canvas permanently.
  • PNG snapshots came out black.
  • The canvas was stretched to the window, turning circles into ellipses, and the drawing preview did not line up with the result.
  • The instability warning could never appear.
  • Several colours used by the export menu and panels were undefined.
  • Documentation site with a physics section, generated figures and screenshots, in English and Turkish.
  • npm workspaces, continuous integration, unit tests for the web app.
  • Removed template leftovers, unused components and the screenshot bot.

Engineering suite: CAD tools, video export, spectrum analyzer (not connected to the UI).

First public versions.