Closed bug report

Current solve sinks a whole rail at one terminal pin (even split by count, sources ignored)

John Lauer · ·closed by John Lauer

What happens: in a current-density solve of a power rail that feeds a multi-pin connector or several loads, the solver puts the whole rail current into ONE terminal pin, and splits the rest evenly across the loads by count, not by their real draw. Naming each rail's source part in the spec (sources) does not change which terminal it picks.

Example (4-layer board, 5 V rail at about 4.3 A):

  • The rail reaches a board-to-board connector through six 5 V pins, each with its own via, so about 0.72 A flows per pin.
  • The solve sinks all 4.3 A at a single connector pin, which produces a false current-density hot spot in that pin's pad.
  • It also assigns about 1.1 A to an LDO that draws 0.3 A, and pushes 2.2 A into that LDO's ground pin.
  • The reported peak density is therefore a solver-terminal artifact, not real copper stress. It blocks analyze current unless the designer argues it away by hand.

Expected:

  • Distribute a rail's sink current across ALL pads of a multi-pin load in proportion to their connection: an even split per pin, or a per-pin weight from the spec.
  • Use each load's own draw from spec loads / calcs.json instead of an even split by count.
  • Honour named sources when choosing the source terminal.
  • Report the per-terminal currents used, so a reviewer can check them.

Workaround: a hand calculation of the per-pin current (connector rating against real per-pin current), recorded beside the solve. That works, but it can't be recorded in the gate. Related: the --ack request in adom/adom-aiflow issue 70.

1 Reply

John Lauer ·

Fixed in adom-fields 0.8.1. Without explicit loads.<net>.terminals, the solve now picks terminals this way:

  • Named sources feed the net, and every other connector and part on it becomes a sink, so a board-to-board connector the rail feeds counts as a load.
  • loads.<net>.draws (e.g. {"U3": 0.3, "J2": 4.0}) gives a part its own current, on either side. The rest share what is left: sinks by pad area, sources evenly.
  • A part's share splits evenly over its pins, so six 5 V pins at 4.3 A carry about 0.72 A each.
  • A pin with no copper near it gives its share to the other pins on its side, so the injection always balances. That unbalanced remainder draining through the reference pin is what produced the single-pin hot spot.
  • Every net reports terminalCurrents (pin, amps, + into the copper) and terminalBasis in fields.json, so a reviewer can check them.

Boards without sources or draws solve exactly as before (buck regression unchanged). For full control, explicit loads.<net>.terminals still takes precedence. Update with adom-wiki pkg install adom/adom-fields, and reopen with the board if the per-pin split still looks wrong.

John Lauer closed this ·

Log in to reply.