Several inlets, more outlets, one bonded plate. Each inlet owns a circuit — six inlets feeding twelve outlets is the case this opens on — and each circuit is a rectilinear Steiner tree in its own colour. Drop a valve onto a leg and that circuit's pressure budget responds; cross another circuit's leg and the no-crossings rung fails until you flip on multi-layer.
A bonded plate has to carry K supply inlets through internal channels to N outlets, with each outlet owned by exactly one inlet (six inlets feeding twelve outlets, on average two per circuit, is the canonical case). On each circuit, a few valves switch the legs you need to control; sensors tap where you need to measure. The pumps are fixed; every outlet has to receive its share of flow; the worst-case path's pressure drop has to stay under the pump's head with margin; and no two circuits' channels can physically share a point on the same plate layer. Three coupled problems: a topology per circuit, the sizing on every leg, and the geometric question of whether the circuits fit side-by-side or need a second layer.
The per-circuit topology is a rectilinear Steiner tree — one inlet, its outlets, minimise total length — and a Hanan-grid + 1-Steiner heuristic solves it in milliseconds. Multi-net just means “solve K of them and check for crossings.” The sizing on each leg is conservation + Darcy–Weisbach + the catalog's K-factors and Cv values. Claude can wire all of that into a live board for you. What it can't pick are the pump curves, which outlet belongs to which inlet (the process owns that), and whether the deepest leg actually carries the flow it's spec'd for — those decisions are yours.
Each circuit is a colour. Drag any port along its edge; click + inlet to add another circuit, + outlet to add an outlet to the nearest inlet, cycle group on an outlet to move it between circuits. Drop valves and sensors on segments; toggle layer to allow crossings via a second plate layer with vias. The critical leg per circuit thickens, and the worst across all circuits is the budget the pump has to clear.
The router is doing one Steiner heuristic per circuit (Hanan candidate
junctions, 1-Steiner improvement) plus a pairwise crossing check across
every segment from every other circuit. The cost on each leg is
Darcy–Weisbach friction integrated along its length plus the minor
losses you've placed: one K=1 per elbow, K=0.5 at every wye it crosses,
and (Q/Cv)2 for every valve on it. The worst-of-N
outlet sums per circuit is that circuit's critical leg; the worst across
all circuits is the budget the pump has to clear.
Three categories, all fetch-verified on supplier or distributor pages. Verified 2026-05-30 — specs and links drift; re-open before you spec a build.
| part | type / orifice | Cv | pressure / voltage |
|---|---|---|---|
| Clippard EV-2M-12 | 2/2 NC, manifold-mount | ~0.45 (17 L/min @ 100 psig) | 0–105 psig / 12 VDC, 0.67 W |
| Lee LHD series | 2/2 NC, 7 mm body, plug-in | 0.013–0.044 (1500/450 Lohm) | vac–45 psig / 12 or 24 VDC spike-hold |
| Parker X-Valve 912† | 2/2 NC, 8 mm, 0.045″ orifice | ~0.06 | 0–25 psig / 12 VDC, EPDM |
Big-Cv valves (Clippard) move flow; tiny-Cv valves (Lee) shape it. The duty point picks which.
| part | type | flow / head | voltage |
|---|---|---|---|
| KNF NF 1.5 | micro diaphragm, liquid | 60 mL/min · 6 bar (~87 psi) | 10–26.4 VDC, self-priming, runs dry |
| Schwarzer SP 270 EC-LC-L | eccentric diaphragm | 100 mL/min · 1 bar (~15 psi) | 12 VDC, 25 g |
| TCS M200S-V | centrifugal impeller | 700 mL/min · 0.23 bar (~3.3 psi) | 1.5–3 V (needs PWM/buck) |
The TCS is here on purpose: it shows what “wrong pump” looks like — lots of flow but no head, so the budget rung fails immediately.
| part | measurement | interface | accuracy |
|---|---|---|---|
| Honeywell ABPMANN030PG2A3 | 0–30 psi gauge | I²C 12-bit, 3.3 V | ±0.25% FS · $33.82@100 |
| TE 4515-DS5B002DP | 0–0.07 psi differential | analog 0.25–4.75 V | ±0.25% FS · for flow-restrictor Δp |
| Sensirion SLF3S-1300F | liquid flow 0–40 mL/min | I²C, 3.3 V | ±5% · H₂O / IPA |
| Sensirion SFM3000-200C‡ | gas flow 0–200 SLM | I²C, 5 V | ±1.5% · NRND, replace with SFM3003/3013 |
† supplier page blocks automated fetching; specs & link confirmed via the listed distributor. ‡ Not Recommended for New Designs — page still resolves, but design-in should target the successor.
Outlets land on a circuit by nearest inlet by default, and that's almost always right: circuits own contiguous Y-bands and don't cross. The moment you assign by “outlet 1 belongs to inlet A because the schematic says so” you can drive crossings into the plate that didn't have to be there. If the process forces an out-of-band assignment, accept the second layer rather than fighting it.
The pump's pressure–flow curve is the budget the whole board lives inside. Sizing valves and channels before knowing the head you have to work with is how you end up routing a manifold the pump can't actually drive.
It's the highest sum: length × friction + bends + valve Cv terms. A short leg with a tight valve will eat more head than a long leg with a wide one. Watch the readout, not the picture.
Every Steiner junction adds a small minor loss (K_wye ≈ 0.5) to each branch passing through it. A tree that minimises length isn't necessarily the one that minimises worst-case ΔP; some manifolds are better with one extra mm of channel and one fewer junction.
The 6×12 default opens with the canonical layout: six inlets evenly spaced on the left edge, twelve outlets evenly spaced on the right, each outlet assigned to its nearest-Y inlet (so each circuit owns two outlets in a contiguous Y-band). The Steiner heuristic gives each circuit a small T; the trees stack vertically and don't cross. With KNF NF 1.5 (~87 psi) the worst-leg ΔP across all six circuits sits well under budget, and the crossing count is zero on a single layer.
Cycle one of the inlet 0 outlets to inlet 5 and the colour crosses the whole plate — the crossing count jumps, and Rung 4 fails. Flip layer to multi and it passes again (at the cost of a via). Switch to the TCS pump and the budget rung fails immediately: flow without head is the wrong tool for a head-loss-dominated plate.
Same two moves — see explore in HTML, deliver in PDF.