cells_supporting(name) walks each labelled point through _cells_on_edge, which is an EDGE walk: in 3-D it takes support-of-support. A conforming surface's labelled points are FACETS (height 1), so in 3-D the walk starts one level too low — support(face) is already the cells, and the second support step lands on nothing. The zone comes back all-False, silently.
The method was only ever exercised in 2-D (add_conforming_surface), where a facet IS an edge and the walk coincides with getSupport. The 3-D case first bites with the Mesh-level conforming sheet (PR #589): a per-cell viscosity assigned from the zone would silently be the background value everywhere.
Fix: dispatch on point height — a facet's support is the cells in any dimension; keep the edge walk for labelled edges (a trace chain). Test: the zone of a placed sheet equals the union of its faces' support cells (test_0862).
Underworld development team with AI support from Claude Code
cells_supporting(name) walks each labelled point through _cells_on_edge, which is an EDGE walk: in 3-D it takes support-of-support. A conforming surface's labelled points are FACETS (height 1), so in 3-D the walk starts one level too low — support(face) is already the cells, and the second support step lands on nothing. The zone comes back all-False, silently.
The method was only ever exercised in 2-D (add_conforming_surface), where a facet IS an edge and the walk coincides with getSupport. The 3-D case first bites with the Mesh-level conforming sheet (PR #589): a per-cell viscosity assigned from the zone would silently be the background value everywhere.
Fix: dispatch on point height — a facet's support is the cells in any dimension; keep the edge walk for labelled edges (a trace chain). Test: the zone of a placed sheet equals the union of its faces' support cells (test_0862).
Underworld development team with AI support from Claude Code