--- title: NCog Behavior and Limitations created: 2026-04-07 updated: 2026-04-07 status: evolving tags: [rotatingMachine, NCog, BEP, efficiency] sources: [nodes/rotatingMachine/src/specificClass.js] --- # NCog — Normalized Center of Gravity ## What It Is NCog is a 0-1 value indicating where on its flow range a pump operates most efficiently. Computed per tick from the current pressure slice of the 3D pump curve. ``` BEP_flow = minFlow + (maxFlow - minFlow) * NCog ``` ## How It's Computed 1. Pressure sensors update → `getMeasuredPressure()` computes differential 2. `fDimension` locks the 2D slice at current system pressure 3. `calcCog()` computes Q/P (specific flow) across the curve 4. Peak Q/P index → `NCog = (flowAtPeak - flowMin) / (flowMax - flowMin)` ## When NCog is Meaningful NCog requires **differential pressure** (upstream + downstream). With only one pressure sensor, fDimension is the raw sensor value (too high), producing a monotonic Q/P curve and NCog = 0. | Condition | NCog for H05K | NCog for C5 | |-----------|--------------|-------------| | ΔP = 400 mbar | 0.333 | 0.355 | | ΔP = 1000 mbar | 0.000 | 0.000 | | ΔP = 1500 mbar | 0.135 | 0.000 | | ΔP = 2000 mbar | 0.351 | 0.000 | ## Why NCog = 0 Happens For variable-speed centrifugal pumps, Q/P is monotonically decreasing when the affinity laws dominate (P ∝ Q³). At certain pressure levels, the spline interpolation preserves this monotonicity and the peak is always at index 0 (minimum flow). ## How the machineGroupControl Uses NCog The BEP-Gravitation algorithm seeds each pump at its BEP flow, then redistributes using slope-based weights + marginal-cost refinement. Even when NCog = 0, the slope redistribution produces near-optimal results because it uses actual power evaluations. > [!warning] Disproven: NCog as proportional weight > Using NCog directly as a flow-distribution weight (`flow = NCog/totalNCog * Qd`) is wrong. It starves pumps with NCog = 0 and overloads high-NCog pumps. See `calcBestCombination` in machineGroupControl.