const test = require('node:test'); const assert = require('node:assert/strict'); const { ValveHydraulicModel } = require('../../src/hydraulicModel'); test('hydraulic model gas branch keeps existing formula when not choked', () => { const model = new ValveHydraulicModel({ serviceType: 'gas', gasChokedRatioLimit: 0.9 }); const result = model.calculateDeltaPMbar({ qM3h: 36, kv: 10, downstreamGaugeMbar: 500, rho: 1.204, tempK: 293.15, }); const p2AbsBar = (500 / 1000) + 1.01325; const expectedDeltaPMbar = ((36 ** 2 * 1.204 * 293.15) / (514 ** 2 * 10 ** 2 * p2AbsBar)) * 1000; assert.ok(result); assert.ok(Math.abs(result.deltaPMbar - expectedDeltaPMbar) < 0.05, `expected ${expectedDeltaPMbar}, got ${result.deltaPMbar}`); assert.equal(result.details.isChoked, false); }); test('hydraulic model gas branch applies choked-flow cap', () => { const model = new ValveHydraulicModel({ serviceType: 'gas', gasChokedRatioLimit: 0.2 }); const result = model.calculateDeltaPMbar({ qM3h: 1000, kv: 1, downstreamGaugeMbar: 500, rho: 1.204, tempK: 293.15, }); const p2AbsBar = (500 / 1000) + 1.01325; const expectedCappedDeltaPMbar = p2AbsBar * 0.2 * 1000; assert.ok(result); assert.equal(result.details.isChoked, true); assert.ok(Math.abs(result.deltaPMbar - expectedCappedDeltaPMbar) < 0.0001, `expected ${expectedCappedDeltaPMbar}, got ${result.deltaPMbar}`); }); test('hydraulic model liquid branch uses liquid Kv equation', () => { const model = new ValveHydraulicModel({ serviceType: 'liquid' }); const result = model.calculateDeltaPMbar({ qM3h: 100, kv: 50, downstreamGaugeMbar: 500, rho: 998, tempK: 293.15, }); const expectedDeltaPMbar = (((100 / 50) ** 2) * (998 / 1000)) * 1000; assert.ok(result); assert.equal(result.details.isChoked, false); assert.ok(Math.abs(result.deltaPMbar - expectedDeltaPMbar) < 0.0001, `expected ${expectedDeltaPMbar}, got ${result.deltaPMbar}`); });