Adom Fields
Public Made by Adomby adom
Adom Fields: where the current and the heat go on your board.
main
cb236bf
Heat through the parts and the heatsink (solids)
Since 0.8.0 the heat solve does not stop at the board. A spec can add solid bodies, such as a power package's die, tab and moulding, an isolating pad, and a finned heatsink. They are solved in the same steady system as the copper, so the viewer shows where the heat goes: from the die into the tab, across the pad into the sink base, up the fins into the air, and down the leads into the board.
The model
- Geometry. Each body is a union of axis-aligned boxes in board millimetres: x and y as in KiCad, z up from the top copper face. A body under the board uses z below minus the board thickness. The grid keeps every box edge and subdivides to
pitchMm(1 mm by default), so a 0.6 mm pad or a 1.2 mm fin keeps its true thickness. - Conduction inside a body uses its
conductivityWMk. Between two bodies there must be a declaredcontactsentry, with area resistance in m²K/W (0 means ideal). Two touching bodies with no contact are refused, and so are overlapping bodies. - Air. Every exposed face loses heat through
hStillWM2k/hMovingWM2k, in series with half a cell of conduction. This is prescribed convection, not CFD, and there's no radiation. - The board. A face lying on the outer copper couples to it through
boardContactM2kW: the bottom face of a body on top at z = 0, or the top face of a body under the board at z = minusboard.thicknessMminfields.json(every dielectric and every copper layer). The underside has a tolerance of 0.05 mm, and also accepts the older sum of the dielectrics and the two outer copper layers. A body withboardContactM2kWand no face on the copper, or a body with no heat and no path to the board, raises asolid-uncoupledissue;solids.stillgivesonCopperper body.boardLinksjoin a body to one board point with a resistance in K/W, for example a lead to its pad. - Heat.
heatOf: "Q1"takes the spec'shot.Q1.wattsand spreads them over the body's volume. The board then gets none of Q1's heat directly.wattssets a body's own heat instead. Don't use both, and don't useheatOftogether with apackageCoolingentry for the same part.
Calibrate, don't guess
A finned sink's real h depends on its fin spacing and the airflow, so calibrate it. Solve once, take the sink's mean base rise over its heat to air, and scale h until that matches the vendor's K/W. The R7 electronic-load example below converged in one step: 9.04 K/W against the vendor's 9.0 still, and 5.84 against 5.8 moving. Calibrate the package's junction-to-tab contact to the datasheet's RthJC, and the interface films to their K/W.
Fan levels
fanLevels: [0, 0.25, 0.5, 0.75, 1] solves each level as a full steady state. h on every exposed face (board, bodies, a packageCooling sink) follows Churchill's mixed-convection blend:
h(s) = (h_still³ + (h_forced · sⁿ)³)^⅓, h_forced chosen so h(1) = h_moving
Here s is the fraction of full fan speed. The exponent n is fanExponent: 0.5 for laminar flow over plates and through fin channels, about 0.8 when turbulent. The fan is assumed to reach every face evenly; there's no duct or shadowing model. Each level writes its own board textures (T-fan50-*, q-fan50-*) and its bodies' cells (solids.json levels). fields.json airStates gives each level's h, chip rises and per-body results.
Example: the R7 electronic load
Q1 (IXTP15N50L2, TO-220, tab up) is pressed through an AlN pad into a 53 × 53 mm base with 20 fins. The model takes the boxes from the assembly GLB. At 5.5 W:
| Fan | Q1 die | Heatsink peak |
|---|---|---|
| Off | +56.9 °C | +48.9 °C |
| 25 % | +52.0 °C | +44.0 °C |
| 50 % | +46.6 °C | +38.7 °C |
| 75 % | +42.5 °C | +34.5 °C |
| 100 % | +39.4 °C | +31.4 °C |
These come from the 0.2 mm board solve; the 1 mm body grid is the same in both runs. Every number depends on the supplied interface, convection and lead resistances, so read them as screening estimates, not qualified ratings.
In the viewer
- Heat view: each body's cells are coloured by heat flux in W/mm² (log, purple to yellow).
- Temperature view: colour shows the rise.
- Range: one colour range covers all the bodies and all fan levels, so the colours compare.
- Display: the heatsink is see-through so the package under it shows, the bodies move with an exploded stack, and the default iso view frames everything in the scene.
# Heat through the parts and the heatsink (`solids`)
Since 0.8.0 the heat solve does not stop at the board. A spec can add **solid bodies**, such as a power package's die, tab and moulding, an isolating pad, and a finned heatsink. They are solved in the same steady system as the copper, so the viewer shows where the heat goes: from the die into the tab, across the pad into the sink base, up the fins into the air, and down the leads into the board.
## The model
- **Geometry.** Each body is a union of axis-aligned boxes in board millimetres: x and y as in KiCad, z up from the top copper face. A body under the board uses z below minus the board thickness. The grid keeps every box edge and subdivides to `pitchMm` (1 mm by default), so a 0.6 mm pad or a 1.2 mm fin keeps its true thickness.
- **Conduction** inside a body uses its `conductivityWMk`. Between two bodies there must be a declared `contacts` entry, with area resistance in m²K/W (0 means ideal). Two touching bodies with no contact are refused, and so are overlapping bodies.
- **Air.** Every exposed face loses heat through `hStillWM2k` / `hMovingWM2k`, in series with half a cell of conduction. This is prescribed convection, not CFD, and there's no radiation.
- **The board.** A face lying on the outer copper couples to it through `boardContactM2kW`: the bottom face of a body on top at z = 0, or the top face of a body under the board at z = minus `board.thicknessMm` in `fields.json` (every dielectric and every copper layer). The underside has a tolerance of 0.05 mm, and also accepts the older sum of the dielectrics and the two outer copper layers. A body with `boardContactM2kW` and no face on the copper, or a body with no heat and no path to the board, raises a `solid-uncoupled` issue; `solids.still` gives `onCopper` per body. `boardLinks` join a body to one board point with a resistance in K/W, for example a lead to its pad.
- **Heat.** `heatOf: "Q1"` takes the spec's `hot.Q1.watts` and spreads them over the body's volume. The board then gets none of Q1's heat directly. `watts` sets a body's own heat instead. Don't use both, and don't use `heatOf` together with a `packageCooling` entry for the same part.
## Calibrate, don't guess
A finned sink's real h depends on its fin spacing and the airflow, so calibrate it. Solve once, take the sink's mean base rise over its heat to air, and scale h until that matches the vendor's K/W. The R7 electronic-load example below converged in one step: 9.04 K/W against the vendor's 9.0 still, and 5.84 against 5.8 moving. Calibrate the package's junction-to-tab contact to the datasheet's RthJC, and the interface films to their K/W.
## Fan levels
`fanLevels: [0, 0.25, 0.5, 0.75, 1]` solves each level as a full steady state. h on every exposed face (board, bodies, a packageCooling sink) follows Churchill's mixed-convection blend:
h(s) = (h_still³ + (h_forced · sⁿ)³)^⅓, h_forced chosen so h(1) = h_moving
Here s is the fraction of full fan speed. The exponent n is `fanExponent`: 0.5 for laminar flow over plates and through fin channels, about 0.8 when turbulent. The fan is assumed to reach every face evenly; there's no duct or shadowing model. Each level writes its own board textures (`T-fan50-*`, `q-fan50-*`) and its bodies' cells (`solids.json` `levels`). `fields.json` `airStates` gives each level's h, chip rises and per-body results.
## Example: the R7 electronic load
Q1 (IXTP15N50L2, TO-220, tab up) is pressed through an AlN pad into a 53 × 53 mm base with 20 fins. The model takes the boxes from the assembly GLB. At 5.5 W:
| Fan | Q1 die | Heatsink peak |
|---|---|---|
| Off | +56.9 °C | +48.9 °C |
| 25 % | +52.0 °C | +44.0 °C |
| 50 % | +46.6 °C | +38.7 °C |
| 75 % | +42.5 °C | +34.5 °C |
| 100 % | +39.4 °C | +31.4 °C |
These come from the 0.2 mm board solve; the 1 mm body grid is the same in both runs. Every number depends on the supplied interface, convection and lead resistances, so read them as screening estimates, not qualified ratings.
## In the viewer
- **Heat view:** each body's cells are coloured by heat flux in W/mm² (log, purple to yellow).
- **Temperature view:** colour shows the rise.
- **Range:** one colour range covers all the bodies and all fan levels, so the colours compare.
- **Display:** the heatsink is see-through so the package under it shows, the bodies move with an exploded stack, and the default iso view frames everything in the scene.