- Fix flowmovement unit mismatch: MGC computed flow in canonical (m³/s) but rotatingMachine expects output units (m³/h). All flowmovement calls now convert via _canonicalToOutputFlow(). Without this fix, every pump stayed at minimum flow regardless of demand. - Fix absolute scaling: demandQout vs demandQ comparison bug, reorder conditions so <= 0 is checked first, add else branch for valid demand. - Fix empty Qd <= 0 block: now calls turnOffAllMachines(). - Add empty-machines guards on optimalControl and equalizePressure. - Add null fallback (|| 0) on pressure measurement reads. - Fix division-by-zero in calcRelativeDistanceFromPeak. - Fix missing flowmovement after startup in equalFlowControl. - Add marginal-cost refinement loop in BEP-Gravitation: after slope-based redistribution, iteratively shifts flow from highest actual dP/dQ to lowest using real power evaluations. Closes gap to brute-force optimum from 2.1% to <0.1% without affecting combination selection stability. - Add NCog distribution comparison tests and brute-force power table test. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
machineGroupControl Test Suite Layout
Required EVOLV layout:
- basic/
- integration/
- edge/
- helpers/
Baseline structure tests:
- basic/structure-module-load.basic.test.js
- integration/structure-examples.integration.test.js
- edge/structure-examples-node-type.edge.test.js