Files
valve/test/basic/hydraulic-model.basic.test.js
znetsixe 6287708c1e updates
2026-03-11 11:13:17 +01:00

58 lines
1.9 KiB
JavaScript

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}`);
});