conditions:"2% demand steps, both ascending and descending"
pump_curves:
H05K-S03R:
pressure_levels:33
pressure_range:"700-3900 mbar"
flow_range:"28-227 m3/h (at 2000 mbar)"
data_points_per_level:5
anomalies_fixed:3
date:2026-04-07
C5-D03R-SHN1:
pressure_levels:26
pressure_range:"400-2900 mbar"
flow_range:"6-53 m3/h"
data_points_per_level:5
non_convex:true
date:2026-04-07
# ── DISPROVEN CLAIMS ──
disproven:
ncog_proportional_weight:
claimed:"Distributing flow proportional to NCog weights is optimal"
claimed_date:2026-04-07
disproven_date:2026-04-07
evidence_for:"Simple implementation in calcBestCombination"
evidence_against:"Starves small pumps (NCog=0 gets zero flow), overloads large pumps at high demand. BEP-target + scale is correct approach."
root_cause:"NCog is a position indicator (0-1 on flow range), not a distribution weight"
efficiency_rounding:
claimed:"Math.round(flow/power * 100) / 100 preserves BEP signal"
claimed_date:pre-2026-04-07
disproven_date:2026-04-07
evidence_for:"Removes floating point noise"
evidence_against:"In canonical units (m3/s and W), Q/P ratio is ~1e-6. Rounding to 2 decimals produces 0 for all points. NCog, cog, BEP all became 0."
root_cause:"Canonical units make the ratio very small — rounding destroys the signal"
equal_marginal_cost_optimal:
claimed:"Equal dP/dQ across pumps guarantees global power minimum"
claimed_date:2026-04-07
disproven_date:2026-04-07
evidence_for:"KKT conditions for convex functions"
evidence_against:"C5 pump curve is non-convex (dP/dQ dips from 1.3M to 453K then rises). Sparse data (5 points) causes spline artifacts."
root_cause:"Convexity assumption fails with interpolated curves from sparse data"
# ── PERFORMANCE ──
performance:
mgc_optimization:
median_ms:0.09
p99_ms:0.5
tick_budget_pct:0.015
source:benchmark script
date:2026-04-07
predict_y_call:
complexity:"O(log n), ~O(1) for 5-10 data points"
source:predict_class.js
# ── ARCHITECTURE ──
architecture:
canonical_units:
pressure:Pa
flow:"m3/s"
power:W
temperature:K
output_units:
pressure:mbar
flow:"m3/h"
power:kW
temperature:C
node_count:13
submodules:12
# ── BUGS FIXED ──
bugs_fixed:
flowmovement_unit_mismatch:
severity:critical
description:"machineGroupControl sent flow in canonical (m3/s) but rotatingMachine flowmovement expected output units (m3/h). Every pump stayed at minimum."
fix:"_canonicalToOutputFlow() conversion before all flowmovement calls"
commit:d55f401
date:2026-04-07
emergencystop_case:
severity:critical
description:"specificClass called executeSequence('emergencyStop') but config key was 'emergencystop'"
fix:"Lowercase to match config"
commit:07af7ce
date:2026-04-07
curve_data_anomalies:
severity:high
description:"3 flow values leaked into power column in hidrostal-H05K-S03R.json at pressures 1600, 3200, 3300 mbar"
fix:"Linearly interpolated correct values from adjacent levels"
commit:024db55
date:2026-04-07
efficiency_rounding:
severity:high
description:"Math.round(Q/P * 100) / 100 destroyed all NCog/BEP calculations"
fix:"Removed rounding, use raw ratio"
commit:07af7ce
date:2026-04-07
absolute_scaling_bug:
severity:high
description:"handleInput compared demandQout (always 0) instead of demandQ for max cap"
fix:"Reordered conditions, use demandQ throughout"
commit:d55f401
date:2026-04-07
# ── TIMELINE ──
timeline:
- {date: 2026-04-07, commit: 024db55, desc:"Fix 3 anomalous power values in hidrostal curve"}