diff --git a/README.md b/README.md index 9a733a4..07b5cf4 100644 --- a/README.md +++ b/README.md @@ -16,10 +16,12 @@ current**. PNGs + a text summary are saved per run. THT-pad contact (V+, injected at the drill-wall ring) squeezes past a notch in the F.Cu pour, transfers through the stitching-via field into the B.Cu pour and leaves at the Vāˆ’ lug — per-via currents and the -hottest via are reported. The white equipotential lines share their -levels across the layers, so their density reads as field strength: -nearly the whole drop happens around the notch on F.Cu, only two lines -fall across the B.Cu pour.* +hottest via are reported.* + +![Potential on the two-layer demo net](docs/img/demo-potential.png) +*The matching potential map with equipotential contour lines: they +bunch where the field is strongest — nearly the whole 8.7 mV drop +happens around the notch on F.Cu.* Uses the KiCad **IPC API** (`kicad-python` / `kipy`), not the deprecated SWIG API. Requires KiCad **10.0.1+**. diff --git a/docs/img/demo-current.png b/docs/img/demo-current.png index 96292f1..8affd6d 100644 Binary files a/docs/img/demo-current.png and b/docs/img/demo-current.png differ diff --git a/docs/img/demo-potential.png b/docs/img/demo-potential.png new file mode 100644 index 0000000..fe0b016 Binary files /dev/null and b/docs/img/demo-potential.png differ diff --git a/tools/gen_readme_figs.py b/tools/gen_readme_figs.py index a5df308..f8dcf2c 100644 --- a/tools/gen_readme_figs.py +++ b/tools/gen_readme_figs.py @@ -104,32 +104,13 @@ def demo_problem() -> Problem: return p -def _overlay_potential(fig, res, stack): - """Equipotential contours on the per-layer current-density axes, - on shared levels so line density reads as field strength.""" - vmax = float(np.nanmax(res.V)) - vmin = min(0.0, float(np.nanmin(res.V))) - levels = np.linspace(vmin, vmax, 17)[1:-1] - ext = stack.extent_mm() - ny, nx = stack.shape2d - xs = np.linspace(ext[0], ext[1], nx, endpoint=False) - xs += (xs[1] - xs[0]) / 2 - ys = np.linspace(ext[3], ext[2], ny, endpoint=False) - ys += (ys[1] - ys[0]) / 2 - for li, ax in enumerate(a for a in fig.axes if a.images): - with np.errstate(invalid="ignore"): - ax.contour(xs, ys, res.V[li], levels=levels, colors="white", - linewidths=0.5, alpha=0.65) - - def gen_demo_maps(): p = demo_problem() res, stack, e1, e2 = _solve(p, 0.05) - fig_j = plots.fig_current(res, stack, e1, e2, p) - _overlay_potential(fig_j, res, stack) figs = [ (plots.fig_raster(stack, e1, e2, p, res), "demo-raster"), - (fig_j, "demo-current"), + (plots.fig_current(res, stack, e1, e2, p), "demo-current"), + (plots.fig_potential(res, stack, e1, e2, p), "demo-potential"), ] plots.save_and_show(figs, OUT, show=False)