docs: initialize project wiki from production hardening session
12 pages covering architecture, findings, and metrics from the rotatingMachine + machineGroupControl hardening work: - Overview: node inventory, what works/doesn't, current scale - Architecture: 3D pump curves, group optimization algorithm - Findings: BEP-Gravitation proof (0.1% of optimum), NCog behavior, curve non-convexity, pump switching stability - Metrics: test counts, power comparison table, performance numbers - Knowledge graph: structured YAML with all data points and provenance - Session log: 2026-04-07 production hardening - Tools: query.py, search.sh, lint.sh Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
42
wiki/findings/ncog-behavior.md
Normal file
42
wiki/findings/ncog-behavior.md
Normal file
@@ -0,0 +1,42 @@
|
||||
---
|
||||
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.
|
||||
Reference in New Issue
Block a user