81 lines
2.2 KiB
JavaScript
81 lines
2.2 KiB
JavaScript
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
|
|
const Diffuser = require('../src/specificClass');
|
|
|
|
function makeConfig(overrides = {}) {
|
|
return {
|
|
general: {
|
|
name: 'Zone_1',
|
|
logging: {
|
|
enabled: false,
|
|
logLevel: 'error',
|
|
},
|
|
},
|
|
functionality: {
|
|
softwareType: 'diffuser',
|
|
role: 'aeration diffuser',
|
|
},
|
|
diffuser: {
|
|
number: 1,
|
|
elements: 4,
|
|
density: 2.4,
|
|
waterHeight: 4.5,
|
|
alfaFactor: 0.7,
|
|
headerPressure: 0,
|
|
localAtmPressure: 1013.25,
|
|
waterDensity: 997,
|
|
...overrides,
|
|
},
|
|
};
|
|
}
|
|
|
|
test('diffuser starts idle with zero production', () => {
|
|
const diffuser = new Diffuser(makeConfig());
|
|
const output = diffuser.getOutput();
|
|
|
|
assert.equal(diffuser.idle, true);
|
|
assert.equal(output.oKgo2H, 0);
|
|
assert.equal(typeof output.oPLoss, 'number');
|
|
});
|
|
|
|
test('diffuser calculates oxygen transfer and pressure once airflow is applied', () => {
|
|
const diffuser = new Diffuser(makeConfig());
|
|
diffuser.setFlow(24);
|
|
|
|
const output = diffuser.getOutput();
|
|
assert.equal(diffuser.idle, false);
|
|
assert.ok(output.oFlowElement > 0);
|
|
assert.ok(output.oOtr > 0);
|
|
assert.ok(output.oPLoss > diffuser.o_p_water);
|
|
assert.ok(output.oKgo2H > 0);
|
|
});
|
|
|
|
test('diffuser increases total pressure when water height rises', () => {
|
|
const diffuser = new Diffuser(makeConfig());
|
|
diffuser.setFlow(24);
|
|
const lowHeadLoss = diffuser.getOutput().oPLoss;
|
|
|
|
diffuser.setWaterHeight(6);
|
|
const highHeadLoss = diffuser.getOutput().oPLoss;
|
|
|
|
assert.ok(highHeadLoss > lowHeadLoss);
|
|
});
|
|
|
|
test('diffuser raises warnings and alarms when flow per element is too low', () => {
|
|
const diffuser = new Diffuser(makeConfig({ elements: 1, waterHeight: 3 }));
|
|
diffuser.setFlow(0.5);
|
|
|
|
assert.equal(diffuser.warning.state, true);
|
|
assert.equal(diffuser.alarm.state, true);
|
|
assert.equal(diffuser.getStatus().fill, 'red');
|
|
});
|
|
|
|
test('diffuser converts oxygen output to reactor OTR per zone volume', () => {
|
|
const diffuser = new Diffuser(makeConfig({ waterHeight: 4.5 }));
|
|
diffuser.setFlow(24);
|
|
|
|
const expected = diffuser.getOutput().oKgo2H * 1000 * 24 / 500;
|
|
assert.ok(Math.abs(diffuser.getReactorOtr(500) - expected) < 1e-8);
|
|
});
|