Wire the adaptive quadtree grid into the solve path (phase 2)
config.ADAPTIVE_CELLS (dialog checkbox "adaptive cells", off by default; standalone --adaptive) routes run_solve through fill_resistance/adaptive.py: per-layer balanced leaf grids where every non-uniform fine cell (electrodes, 1D chain cells, buildup, via-mouth thickness map) is pinned at the fine size, leaf faces via the series-half-cell rule, chain links and barrels re-attached by node id, connectivity restriction and both contact models on the leaf graph via solver cores extracted for reuse (_equipotential_core, _uniform_core, _conductance_params, _barrel_links). All fields (V, |J|, power density) are computed per leaf and expanded to the fine grid, so plots, summary and dumps are unchanged. Element sizes: minimum = the grid cell size itself (auto / dialog / CELL_UM_OVERRIDE); maximum = ADAPTIVE_MAX_CELL_UM (2 mm default); ADAPTIVE_GUARD sets the clearance a block needs to grow. Measured end-to-end (feature-dense 120x120 plate, h=50um): 25.9 s -> 5.4 s, 5.58M -> 823k unknowns, R -1.1%. Accuracy documented honestly: coarse-fine interfaces carry a first-order tangential flux error biasing R low by ~0.5-2% depending on geometry (worst on narrow strips); the earlier assumption that linear fields solve exactly on the leaf graph was wrong - offset centers across size transitions leave an unpaired residue. Gradient-corrected interface fluxes remain as phase 4 if tighter accuracy per leaf is needed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -137,6 +137,17 @@ SWIG API. Requires KiCad **10.0.1+**.
|
||||
AMG-preconditioned CG (pyamg) above — Jacobi-CG if pyamg is missing.
|
||||
Discretization error typically ≲ 2 % at defaults — halve the cell size
|
||||
and compare to judge convergence.
|
||||
- **Adaptive cells** (dialog checkbox, off by default; `ADAPTIVE_CELLS`):
|
||||
solves on a 2:1-balanced quadtree — fine cells at copper boundaries,
|
||||
electrodes, traces, via mouths and buildup, blocks up to
|
||||
`ADAPTIVE_MAX_CELL_UM` (2 mm) in plane interiors (`ADAPTIVE_GUARD`
|
||||
sets the clearance a block needs to grow). The **minimum element size
|
||||
is the grid cell size itself** (auto / dialog / `CELL_UM_OVERRIDE`);
|
||||
the uniform limit reproduces the normal grid exactly. Large
|
||||
speed/memory wins on big pours; the coarse–fine interfaces carry a
|
||||
first-order flux error that biases R **low by ~0.5–2 %** depending on
|
||||
geometry (worst on narrow strips, mild on large planes). All fields
|
||||
are expanded back to the fine grid for the maps and reports.
|
||||
|
||||
## Offline / development
|
||||
|
||||
|
||||
Reference in New Issue
Block a user