Loading…
Loading…
PINNeAPPle ModelRegistry 'bench_mlp' (4 x 128, SiLU) on log-scaled geometry, material and operating variables, trained on 5000 solves of the HeatSink Sizer physics engine in natural convection (Bar-Cohen & Rohsenow composite correlation, 3-D finite-volume base conduction) with monotonicity constraints: a hinge penalty keeps d log R / d log k and d log R / d log(source width) negative on the training designs and on random in-range designs (pinneapple_design.thermal.heatsink.monotone). Returns the resistance and a split-conformal 95 % upper bound.
heatsink_natural_mlp v1.0.0 (revision v1.0.0.post1) · part of the PINNeAPPle zoo · training data PINNeAPPle-Labs/heatsink-natural-convection
Try it without installing anything: PINNeAPPle zoo demo (pick heatsink_natural_mlp: its predictions along each input with their band and where its physics checks warn or fail, and your own inputs evaluated in the browser).
Task: Plate-fin heat sink in natural convection (vertical fins, free air): base-to-air thermal resistance
| Name | Unit | Description |
|---|---|---|
base_width_mm |
mm | base width (across the fins) |
base_depth_mm |
mm | base depth (fin length) |
base_thickness_mm |
mm | base plate thickness |
n_fins |
- | number of fins |
fin_thickness_mm |
mm | fin thickness |
fin_height_mm |
mm | fin height |
k_w_mk |
W/(m K) | material thermal conductivity |
source_width_mm |
mm | heat-source footprint width |
source_depth_mm |
mm | heat-source footprint depth |
t_ambient_c |
degC | ambient air temperature |
power_w |
W | dissipated power |
| Name | Unit | Description |
|---|---|---|
r_base_k_w |
K/W | thermal resistance, base to ambient air |
r_base_upper95_k_w |
K/W | split-conformal 95 % upper bound on r_base_k_w |
base_width_mm: [30.0, 200.0]base_depth_mm: [30.0, 200.0]base_thickness_mm: [2.0, 15.0]fin_thickness_mm: [0.6, 4.0]fin_height_mm: [8.0, 80.0]k_w_mk: [150.0, 400.0]source_frac_w: [0.15, 1.0]source_frac_d: [0.15, 1.0]t_ambient_c: [0.0, 50.0]fin_gap_mm: [2.2, 30.6]fin_gap_note: gap sampled in 2.5-20 mm, then the fin count is rounded; the realised gaps of the training designs span 2.2-30.6 mmpower_w: [1.0, 80.0]regime: natural convection in free air, vertical fins, no radiationbench_mlp — {"in_dim": 12, "out_dim": 1, "width": 128, "depth": 4, "act": "silu", "targets": ["log R"], "monotone": {"log_k": -1, "log_fw": -1}}Reference: 750 held-out designs solved by the HeatSink Sizer physics engine (pinneapple_design.thermal.heatsink.engine). The engine is checked against independent methods: natural h vs Elenbaas (1942) 2 %, Lee et al. spreading (1-5 %), FVM grid convergence < 2 %.
| Metric | Value |
|---|---|
| test/R_mean_abs_pct | 0.46867034214113035 |
| test/R_p95_abs_pct | 1.5446053620114195 |
| test/R_max_abs_pct | 4.433409218069984 |
| test/R_upper95_coverage_pct | 97.06666666666666 |
| test/n | 750.0 |
Decision: APPROVED · score 1.00 · coverage 100%
License: apache-2.0
PINNeAPPle contributors (2026). HeatSink Sizer natural-convection surrogate (monotone). PINNeAPPle model zoo, https://github.com/PINNeAPPle-Labs/PINNeAPPle
pass: every applicable check passed (15/15 applicable checks pass; level standard; generated by pp.validate with PINNeAPPle 0.7.0, schema validation-report/v1).
| Factor | Credibility | Meaning |
|---|---|---|
| code_verification | 0 | no evidence |
| solution_verification | 3 | passes quantitative checks |
| validation | 4 | passes against an independent reference or a guaranteed bound |
| input_pedigree | 4 | passes against an independent reference or a guaranteed bound |
| uncertainty | 2 | passes with warnings or qualitative evidence only |
| robustness | 0 | no evidence |
| applicability | 0 | no evidence |
| Check | Status | Result |
|---|---|---|
method.status |
not-applicable | no catalog method id given (validate(..., method='S2')) |
reference.card_metrics |
pass | card metrics reproduced on the stored reference (max relative difference) |
reference.acceptance.test/R_mean_abs_pct |
pass | held-out test/R_mean_abs_pct within the zoo acceptance limit |
reference.acceptance.test/R_p95_abs_pct |
pass | held-out test/R_p95_abs_pct within the zoo acceptance limit |
physics.model_checks.1 |
pass | monotonic: a more conductive material never raises the resistance (share of held-out designs violating, +5 % step) |
physics.model_checks.2 |
pass | monotonic: a wider heat source spreads less (lower resistance) (share of held-out designs violating, +5 % step) |
physics.model_checks.3 |
pass | monotonic: more power drives more buoyant flow (lower resistance) (share of held-out designs violating, +5 % step) |
physics.model_checks.4 |
pass | R > 0 on the held-out designs |
applicability.range |
not-applicable | no query inputs given |
uncertainty.spread |
pass | the model returns a predictive spread or bound |
metamorphic |
not-applicable | no relations declared for heatsink_natural_mlp |
data.finite |
pass | stored audit card of heatsink_natural_convection: every value finite |
data.physics.physics |
not-applicable | stored audit card of heatsink_natural_convection: no PDE stated for this dataset |
data.physics.constraint.r-base-k-w-0 |
pass | stored audit card of heatsink_natural_convection: r_base_k_w > 0: 0 of 5000 rows violate it |
data.physics.constraint.source-width-mm-source-frac-w-base-width-mm |
pass | stored audit card of heatsink_natural_convection: source_width_mm == source_frac_w * base_width_mm: 0 of 5000 rows violate it |
data.physics.constraint.source-depth-mm-source-frac-d-base-depth-mm |
pass | stored audit card of heatsink_natural_convection: source_depth_mm == source_frac_d * base_depth_mm: 0 of 5000 rows violate it |
data.diversity.duplicates |
pass | stored audit card of heatsink_natural_convection: train: 0 exact, 0 near copies of 3250; cal: 0 exact, 0 near copies of 500; test: 0 exact, 0 near copies of 750; val: 0 exact, 0 near copies of 500 |
data.diversity.effective |
pass | stored audit card of heatsink_natural_convection: effective sample count 11 of 3250 (no generator stated: only a collapse to one pattern is flagged) |
data.leakage |
pass | stored audit card of heatsink_natural_convection: 0 of 750 test samples are (near) copies of train samples (closest: 0.458 x the median train spacing) |
Model SHA-256 a93b5a6de4cb56d956b1fc9d5e7216d0f19e9c2c170d7b91ba8a4b0eb1e23115.
pip install "pinneapple @ git+https://github.com/PINNeAPPle-Labs/PINNeAPPle"
import pinneapple as pp
model = pp.zoo.load("heatsink_natural_mlp") # weights checked against their SHA-256
inputs = {"base_width_mm": 85.6305, "base_depth_mm": 87.183, "base_thickness_mm": 4.99737, "n_fins": 15.0, "fin_thickness_mm": 1.38136, "fin_height_mm": 12.9024, "k_w_mk": 281.774, "source_width_mm": 28.218, "source_depth_mm": 40.7197, "t_ambient_c": 11.241, "power_w": 39.4607}
out = model.predict(inputs) # warns for inputs outside the validity range
print({k: round(float(v[0]), 6) for k, v in out.items()})
# {'r_base_k_w': 3.854359, 'r_base_upper95_k_w': 3.906871}
print(pp.zoo.query_checks(model, inputs)[0]["verdict"]["status"]) # per-query trust checks
# pass
print(pp.zoo.validate(model).decisao) # card metrics reproduced + physics checks
# APPROVED
The inputs are the first held-out test case of the training dataset; its reference value is r_base_k_w = 3.87935. pp.zoo.evaluate("heatsink_natural_mlp") recomputes every metric of the card on the stored reference.
No Hugging Face inference provider can run this model, so the Hub widget is off (inference: false). It is a small PyTorch network, but its prediction is more than a forward pass: the inputs are encoded and normalised, the outputs denormalised (and, for ensembles, averaged with their spread), and every query is checked against the validity range and the model's physics checks. The pinneapple library does all of that (below); the ONNX graph carries the pre- and post-processing but not the checks; the zoo demo Space shows the model along a sweep of each input and runs it, with its checks, in your browser.
model.onnx (opset 17) maps x, shape (n, 11) float32 with the columns base_width_mm, base_depth_mm, base_thickness_mm, n_fins, fin_thickness_mm, fin_height_mm, k_w_mk, source_width_mm, source_depth_mm, t_ambient_c, power_w, to the outputs y: ['r_base_k_w', 'r_base_upper95_k_w']. Pre- and post-processing are in the graph (largest difference from PyTorch on the reference inputs: 9.3e-07); the validity-range and physics checks are not, so check the range yourself.
import numpy as np, onnxruntime as ort
from huggingface_hub import hf_hub_download
path = hf_hub_download("PINNeAPPle-Labs/heatsink-natural-mlp", "model.onnx", revision="v1.0.0.post1")
session = ort.InferenceSession(path)
x = np.array([[85.6305, 87.183, 4.99737, 15.0, 1.38136, 12.9024, 281.774, 28.218, 40.7197, 11.241, 39.4607]], np.float32)
print(dict(zip([o.name for o in session.get_outputs()], session.run(None, {"x": x}))))
| File | Content | SHA-256 |
|---|---|---|
weights.pt |
PyTorch state_dict (torch.load(weights_only=True)), what pp.zoo.load reads |
85fcadf7182e81b58b1926715611fb10a089a515539d52020d72dc089f8abad2 |
config.json |
architecture and normalisation | b0d10bdf450dd2b5a1f9e3563cc373aa75e09611d1684afb473bc55f24833e19 |
model_card.json |
the model card: inputs, outputs, validity range, metrics, trust report | 2b22ed77d7e1d74a41498544c76b30495263377b4a07d7ab1f97b26ffc3ac5cf |
model.safetensors |
the same tensors as weights.pt in safetensors format (pinneapple_hub.zoo.export.load_safetensors loads them) |
derived |
model.onnx |
ONNX graph, physical inputs to physical outputs (below) | derived |
example.json |
the "How to use" case: inputs, outputs, reference, verdicts | derived |
The SHA-256 are those of the package's manifest: pp.zoo.load refuses any other file.
If you use this model, please cite PINNeAPPle (software, Zenodo DOI 10.5281/zenodo.23343062; see CITATION.cff):
@software{pinneapple,
author = {Barros, Yan and Schiassi, Enrico},
title = {PINNeAPPle},
doi = {10.5281/zenodo.23343062},
url = {https://github.com/PINNeAPPle-Labs/PINNeAPPle}
}