@dnv-plant/typescriptpws 1.0.70 → 1.0.73-alpha.1902013
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.ts +2 -2
- package/jest.config.js +5 -0
- package/package.json +6 -6
- package/src/calculations/applicationTools.ts +2 -2
- package/src/calculations/discharge.ts +2 -2
- package/src/calculations/dispersion.ts +2 -2
- package/src/calculations/dispersionView.ts +2 -2
- package/src/calculations/fireball.ts +2 -2
- package/src/calculations/jetFire.ts +2 -2
- package/src/calculations/lateExplosion.ts +2 -2
- package/src/calculations/linkedRunners.ts +2 -2
- package/src/calculations/poolFire.ts +2 -2
- package/src/calculations/properties.ts +2 -2
- package/src/calculations/radiation.ts +2 -2
- package/src/calculations/standalones.ts +2 -2
- package/src/calculations/toxics.ts +2 -2
- package/src/calculations/utilities.ts +2 -2
- package/src/constants.ts +2 -2
- package/src/entities.ts +2 -2
- package/src/entity-schemas.ts +2 -2
- package/src/enums.ts +2 -2
- package/src/materials.ts +14 -14
- package/src/utilities.ts +2 -2
- package/tests/concentration-at-point-calculation/testCase116.test.ts +146 -0
- package/tests/concentration-at-point-calculation/testCase117.test.ts +142 -0
- package/tests/concentration-at-point-calculation/testCase118.test.ts +143 -0
- package/tests/concentration-at-point-calculation/testCase119.test.ts +149 -0
- package/tests/concentration-at-point-calculation/testCase120.test.ts +155 -0
- package/tests/constants/testConstants.test.ts +23 -0
- package/tests/convert-comp-mass-to-mole-calculation/testCase129.test.ts +74 -0
- package/tests/convert-comp-mass-to-mole-calculation/testCase130.test.ts +73 -0
- package/tests/convert-comp-mass-to-mole-calculation/testCase131.test.ts +73 -0
- package/tests/convert-comp-mass-to-mole-calculation/testCase132.test.ts +73 -0
- package/tests/convert-comp-mass-to-mole-calculation/testCase133.test.ts +73 -0
- package/tests/convert-comp-mole-to-mass-calculation/testCase134.test.ts +72 -0
- package/tests/convert-comp-mole-to-mass-calculation/testCase135.test.ts +72 -0
- package/tests/convert-comp-mole-to-mass-calculation/testCase136.test.ts +72 -0
- package/tests/convert-comp-mole-to-mass-calculation/testCase137.test.ts +72 -0
- package/tests/convert-comp-mole-to-mass-calculation/testCase138.test.ts +72 -0
- package/tests/distances-and-ellipses-to-radiation-levels-calculation/testCase64.test.ts +194 -0
- package/tests/distances-and-ellipses-to-radiation-levels-calculation/testCase65.test.ts +197 -0
- package/tests/distances-and-ellipses-to-radiation-levels-calculation/testCase66.test.ts +194 -0
- package/tests/distances-and-ellipses-to-radiation-levels-calculation/testCase67.test.ts +198 -0
- package/tests/distances-and-ellipses-to-radiation-levels-calculation/testCase68.test.ts +178 -0
- package/tests/distances-and-footprints-to-concentration-levels-calculation/testCase31a.test.ts +158 -0
- package/tests/distances-and-footprints-to-concentration-levels-calculation/testCase32a.test.ts +156 -0
- package/tests/distances-and-footprints-to-concentration-levels-calculation/testCase33a.test.ts +158 -0
- package/tests/distances-and-footprints-to-concentration-levels-calculation/testCase34a.test.ts +165 -0
- package/tests/distances-and-footprints-to-concentration-levels-calculation/testCase35a.test.ts +188 -0
- package/tests/distances-to-conc-levels-calculation/testCase121.test.ts +149 -0
- package/tests/distances-to-conc-levels-calculation/testCase122.test.ts +145 -0
- package/tests/distances-to-conc-levels-calculation/testCase123.test.ts +150 -0
- package/tests/distances-to-conc-levels-calculation/testCase124.test.ts +154 -0
- package/tests/distances-to-conc-levels-calculation/testCase125.test.ts +157 -0
- package/tests/entities/testVessel.test.ts +49 -0
- package/tests/fireball-calculation/testCase89.test.ts +151 -0
- package/tests/fireball-calculation/testCase90.test.ts +153 -0
- package/tests/fireball-calculation/testCase91.test.ts +152 -0
- package/tests/fireball-calculation/testCse92.test.ts +150 -0
- package/tests/flash-calculation/testCase26.test.ts +71 -0
- package/tests/flash-calculation/testCase27.test.ts +69 -0
- package/tests/flash-calculation/testCase28.test.ts +69 -0
- package/tests/flash-calculation/testCase29.test.ts +67 -0
- package/tests/flash-calculation/testCase30.test.ts +70 -0
- package/tests/general/operation-id-demo.test.ts +64 -0
- package/tests/get-component-by-id/get-component-by-id-METHANE.test.ts +35 -0
- package/tests/get-mass-from-vessel-calculation/testCase139.test.ts +65 -0
- package/tests/jet-fire-calculation/testCase36.test.ts +141 -0
- package/tests/jet-fire-calculation/testCase37.test.ts +148 -0
- package/tests/jet-fire-calculation/testCase38.test.ts +147 -0
- package/tests/jet-fire-calculation/testCase39.test.ts +146 -0
- package/tests/jet-fire-calculation/testCase40.test.ts +152 -0
- package/tests/late-explosion-calculation/testCase46.test.ts +157 -0
- package/tests/late-explosion-calculation/testCase47.test.ts +149 -0
- package/tests/late-explosion-calculation/testCase48.test.ts +176 -0
- package/tests/late-explosion-calculation/testCase49.test.ts +178 -0
- package/tests/late-explosion-calculation/testCase50.test.ts +176 -0
- package/tests/late-explosion-calculation/testCase74.test.ts +166 -0
- package/tests/late-explosion-calculation/testCase75.test.ts +163 -0
- package/tests/late-explosion-calculation/testCase76.test.ts +174 -0
- package/tests/late-explosion-calculation/testCase77.test.ts +175 -0
- package/tests/late-explosion-calculation/testCase78.test.ts +175 -0
- package/tests/lethality-distance-calculation/testCase60.test.ts +142 -0
- package/tests/linked-runners/user-defined-source-linked-run/test-uds-153.test.ts +121 -0
- package/tests/linked-runners/user-defined-source-linked-run/test-uds-154.test.ts +167 -0
- package/tests/linked-runners/user-defined-source-linked-run/test-uds-155.test.ts +202 -0
- package/tests/linked-runners/user-defined-source-linked-run/test-uds-156.test.ts +201 -0
- package/tests/linked-runners/vessel-leak-linked-run/test-vl-157.test.ts +182 -0
- package/tests/linked-runners/vessel-leak-linked-run/test-vl-158.test.ts +200 -0
- package/tests/linked-runners/vessel-leak-linked-run/test-vl-159.test.ts +158 -0
- package/tests/linked-runners/vessel-leak-linked-run/test-vl-160.test.ts +165 -0
- package/tests/linked-runners/vessel-line-rupture-linked-run/test-vlr-161.test.ts +161 -0
- package/tests/linked-runners/vessel-line-rupture-linked-run/test-vlr-162.test.ts +167 -0
- package/tests/linked-runners/vessel-line-rupture-linked-run/test-vlr-163.test.ts +177 -0
- package/tests/linked-runners/vessel-line-rupture-linked-run/test-vlr-164.test.ts +165 -0
- package/tests/linked-runners/vessel-relief-valve-linked-run/test-vrv-165.test.ts +166 -0
- package/tests/linked-runners/vessel-relief-valve-linked-run/test-vrv-166.test.ts +154 -0
- package/tests/linked-runners/vessel-relief-valve-linked-run/test-vrv-167.test.ts +157 -0
- package/tests/linked-runners/vessel-relief-valve-linked-run/test-vrv-168.test.ts +168 -0
- package/tests/load-mass-inventory-vessel-for-line-rupture-scenario-calculation/testCase126.test.ts +72 -0
- package/tests/load-mass-inventory-vessel-for-line-rupture-scenario-calculation/testCase127.test.ts +73 -0
- package/tests/load-mass-inventory-vessel-for-line-rupture-scenario-calculation/testCase128.test.ts +72 -0
- package/tests/load-mass-inventory-vessel-for-relief-valve-scenario-calculation/testCase103.test.ts +74 -0
- package/tests/load-mass-inventory-vessel-for-relief-valve-scenario-calculation/testCase104.test.ts +75 -0
- package/tests/load-mass-inventory-vessel-for-relief-valve-scenario-calculation/testCase105.test.ts +74 -0
- package/tests/long-pipe-calculation/testCase55.test.ts +88 -0
- package/tests/long-pipe-calculation/testCase56.test.ts +90 -0
- package/tests/long-pipe-calculation/testCase57.test.ts +88 -0
- package/tests/long-pipe-calculation/testCase58.test.ts +88 -0
- package/tests/long-pipe-calculation/testCase59.test.ts +88 -0
- package/tests/materials/test-get-component-by-cas-id-1-2-PROPYLENE-OXIDE.test.ts +23 -0
- package/tests/materials/test-get-component-by-cas-id-CARBON-MONOXIDE.test.ts +25 -0
- package/tests/materials/test-get-component-by-cas-id-METHANE.test.ts +22 -0
- package/tests/materials/test-get-component-by-id-1-2-PROPYLENE-OXIDE.test.ts +23 -0
- package/tests/materials/test-get-component-by-id-CARBON-MONOXIDE.test.ts +22 -0
- package/tests/materials/test-get-component-by-id-METHANE.test.ts +22 -0
- package/tests/materials/test-get-component-by-name-1-2-PROPYLENE-OXIDE.test.ts +24 -0
- package/tests/materials/test-get-component-by-name-CARBON-MONOXIDE.test.ts +23 -0
- package/tests/materials/test-get-component-by-name-METHANE.test.ts +25 -0
- package/tests/materials/test-get-components.test.ts +47 -0
- package/tests/materials/test-get-dippr-components.test.ts +28 -0
- package/tests/materials/test-get-dnv-components.test.ts +28 -0
- package/tests/materials/test-get-material-by-cas-id-1-2-PROPYLENE-OXIDE.test.ts +29 -0
- package/tests/materials/test-get-material-by-cas-id-CARBON-MONOXIDE.test.ts +31 -0
- package/tests/materials/test-get-material-by-cas-id-METHANE.test.ts +30 -0
- package/tests/materials/test-get-material-by-cas-id-ZERO.test.ts +31 -0
- package/tests/materials/test-get-material-by-id-1-2-PROPYLENE-OXIDE.test.ts +30 -0
- package/tests/materials/test-get-material-by-id-CARBON-MONOXIDE.test.ts +29 -0
- package/tests/materials/test-get-material-by-id-METHANE.test.ts +29 -0
- package/tests/materials/test-get-material-by-name-1-2-PROPYLENE-OXIDE.test.ts +29 -0
- package/tests/materials/test-get-material-by-name-CARBON-MONOXIDE.test.ts +29 -0
- package/tests/materials/test-get-material-by-name-METHANE.test.ts +29 -0
- package/tests/materials/test-get-materials.test.ts +32 -0
- package/tests/max-conc-distance-calculation/testCase106.test.ts +146 -0
- package/tests/max-conc-distance-calculation/testCase107.test.ts +148 -0
- package/tests/max-conc-distance-calculation/testCase108.test.ts +172 -0
- package/tests/max-conc-distance-calculation/testCase109.test.ts +146 -0
- package/tests/max-conc-distance-calculation/testCase110.test.ts +146 -0
- package/tests/max-conc-footprint-calculation/testCase31.test.ts +169 -0
- package/tests/max-conc-footprint-calculation/testCase32.test.ts +183 -0
- package/tests/max-conc-footprint-calculation/testCase33.test.ts +161 -0
- package/tests/max-conc-footprint-calculation/testCase34.test.ts +172 -0
- package/tests/max-conc-footprint-calculation/testCase35.test.ts +188 -0
- package/tests/max-distance-to-conc-calculation/testCase111.test.ts +138 -0
- package/tests/max-distance-to-conc-calculation/testCase112.test.ts +174 -0
- package/tests/max-distance-to-conc-calculation/testCase113.test.ts +153 -0
- package/tests/max-distance-to-conc-calculation/testCase114.test.ts +162 -0
- package/tests/max-distance-to-conc-calculation/testCase115.test.ts +167 -0
- package/tests/mixture-constant-properties-calculation/testCase97.test.ts +83 -0
- package/tests/mixture-constant-properties-calculation/testCase98.test.ts +90 -0
- package/tests/mixture-constant-properties-calculation/testCase99.test.ts +87 -0
- package/tests/pool-fire-calculation/testCase41.test.ts +153 -0
- package/tests/pool-fire-calculation/testCase41a.test.ts +141 -0
- package/tests/pool-fire-calculation/testCase42.test.ts +169 -0
- package/tests/pool-fire-calculation/testCase42a.test.ts +175 -0
- package/tests/pool-fire-calculation/testCase43.test.ts +161 -0
- package/tests/pool-fire-calculation/testCase43a.test.ts +157 -0
- package/tests/pool-fire-calculation/testCase44.test.ts +147 -0
- package/tests/pool-fire-calculation/testCase44a.test.ts +152 -0
- package/tests/pool-fire-calculation/testCase45.test.ts +176 -0
- package/tests/pool-fire-calculation/testCase45a.test.ts +182 -0
- package/tests/radiation-at-ponts/testCase69.test.ts +167 -0
- package/tests/radiation-at-ponts/testCase70.test.ts +179 -0
- package/tests/radiation-at-ponts/testCase71.test.ts +150 -0
- package/tests/radiation-at-ponts/testCase72.test.ts +166 -0
- package/tests/radiation-at-ponts/testCase73.test.ts +169 -0
- package/tests/radiation-contour-calculation/testCase51.test.ts +127 -0
- package/tests/radiation-contour-calculation/testCase52.test.ts +126 -0
- package/tests/radiation-contour-calculation/testCase53.test.ts +126 -0
- package/tests/radiation-contour-calculation/testCase54.test.ts +131 -0
- package/tests/relief-valve-min-temperature-calculation/testCase140.test.ts +49 -0
- package/tests/set-mixing-layer-height/testCase100.test.ts +36 -0
- package/tests/set-mixing-layer-height/testCase101.test.ts +36 -0
- package/tests/set-mixing-layer-height/testCase102.test.ts +36 -0
- package/tests/set-phase-to-be-released-for-leak-calculation/testCase150.test.ts +67 -0
- package/tests/set-phase-to-be-released-for-line-rupture-calculation/testCase151.test.ts +67 -0
- package/tests/set-phase-to-be-released-for-relief-valve-calculation/TestCase152.test.ts +61 -0
- package/tests/sideview/testCase31b.test.ts +150 -0
- package/tests/sideview/testCase32b.test.ts +145 -0
- package/tests/sideview/testCase33b.test.ts +130 -0
- package/tests/sideview/testCase34b.test.ts +153 -0
- package/tests/sideview/testCase35b.test.ts +140 -0
- package/tests/tank-fire-calculation/testCase79.test.ts +61 -0
- package/tests/tank-fire-calculation/testCase80.test.ts +67 -0
- package/tests/tank-fire-calculation/testCase81.test.ts +68 -0
- package/tests/tank-fire-calculation/testCase82.test.ts +68 -0
- package/tests/tank-fire-calculation/testCase83.test.ts +73 -0
- package/tests/utilities/convert-camel-case-to-snake-case.test.ts +7 -0
- package/tests/utilities/convert-snake-case-to-camel-case.test.ts +7 -0
- package/tests/vessel-catastrophic-rupture-calculation/testCase1.test.ts +83 -0
- package/tests/vessel-catastrophic-rupture-calculation/testCase2.test.ts +82 -0
- package/tests/vessel-catastrophic-rupture-calculation/testCase3.test.ts +91 -0
- package/tests/vessel-catastrophic-rupture-calculation/testCase4.test.ts +85 -0
- package/tests/vessel-catastrophic-rupture-calculation/testCase5.test.ts +84 -0
- package/tests/vessel-leak-calculation/testCase10.test.ts +108 -0
- package/tests/vessel-leak-calculation/testCase6.test.ts +113 -0
- package/tests/vessel-leak-calculation/testCase7.test.ts +123 -0
- package/tests/vessel-leak-calculation/testCase8.test.ts +102 -0
- package/tests/vessel-leak-calculation/testCase9.test.ts +106 -0
- package/tests/vessel-line-rupture-calculation/vlr-ammonia.test.ts +84 -0
- package/tests/vessel-line-rupture-calculation/vlr-ethaneMethane.test.ts +82 -0
- package/tests/vessel-line-rupture-calculation/vlr-nDecane.test.ts +79 -0
- package/tests/vessel-line-rupture-calculation/vlr-oxygen.test.ts +77 -0
- package/tests/vessel-line-rupture-calculation/vlr-propane.test.ts +77 -0
- package/tests/vessel-relief-valve-calculation/vrv-chlorine.test.ts +99 -0
- package/tests/vessel-relief-valve-calculation/vrv-hydrogen.test.ts +96 -0
- package/tests/vessel-relief-valve-calculation/vrv-methane.test.ts +80 -0
- package/tests/vessel-relief-valve-calculation/vrv-methaneH2s.test.ts +86 -0
- package/tests/vessel-relief-valve-calculation/vrv-nitrogen.test.ts +80 -0
- package/tests/vessel-state-calculation/vs-ammonia.test.ts +56 -0
- package/tests/vessel-state-calculation/vs-butane.test.ts +57 -0
- package/tests/vessel-state-calculation/vs-chlorine.test.ts +56 -0
- package/tests/vessel-state-calculation/vs-methane.test.ts +57 -0
- package/tests/vessel-state-calculation/vs-naturalGas.test.ts +59 -0
- package/tests/vessel-state-calculation/vs-nitrogenPentane.test.ts +58 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Material, MaterialComponent, State } from "../../src/entities";
|
|
2
|
+
import { FlashCalculation } from "../../src/calculations/properties";
|
|
3
|
+
import { ResultCode } from "../../src/enums";
|
|
4
|
+
import { setAccessToken } from "../../src/utilities";
|
|
5
|
+
const accessToken = process.env.PWS_ACCESS_TOKEN;
|
|
6
|
+
|
|
7
|
+
if (!accessToken) {
|
|
8
|
+
throw new Error("ACCESS_TOKEN environment variable is not set.");
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
setAccessToken(accessToken);
|
|
12
|
+
|
|
13
|
+
describe("Flash Calculation Scenario - Test Case 27", () => {
|
|
14
|
+
test("should run the flash calculation and perform regression check", async () => {
|
|
15
|
+
// Set the case properties
|
|
16
|
+
const stateTemperature = 270.0;
|
|
17
|
+
const statePressure = 1.5e5;
|
|
18
|
+
const stateLiquidFraction = 0.7;
|
|
19
|
+
|
|
20
|
+
// Define the initial state of the vessel
|
|
21
|
+
const state = new State({
|
|
22
|
+
temperature: stateTemperature,
|
|
23
|
+
pressure: statePressure,
|
|
24
|
+
liquidFraction: stateLiquidFraction
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
// Define the material (AMMONIA+TRIMETHYLAMINE+WATER)
|
|
28
|
+
const material = new Material({
|
|
29
|
+
name: "Case27_Material",
|
|
30
|
+
components: [
|
|
31
|
+
new MaterialComponent({ name: "AMMONIA", moleFraction: 0.333 }),
|
|
32
|
+
new MaterialComponent({ name: "TRIMETHYLAMINE", moleFraction: 0.333 }),
|
|
33
|
+
new MaterialComponent({ name: "WATER", moleFraction: 0.334 })
|
|
34
|
+
],
|
|
35
|
+
componentCount: 3
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// Create and run flash calculation
|
|
39
|
+
const flashCalc = new FlashCalculation(material, state);
|
|
40
|
+
|
|
41
|
+
console.log("Running flashCalculation...");
|
|
42
|
+
const resultCode = await flashCalc.run();
|
|
43
|
+
|
|
44
|
+
if (flashCalc.messages.length > 0) {
|
|
45
|
+
console.log("Messages:");
|
|
46
|
+
flashCalc.messages.forEach((msg) => console.log(msg));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
expect(resultCode).toBe(ResultCode.SUCCESS);
|
|
50
|
+
|
|
51
|
+
// Regression checks
|
|
52
|
+
const totalFluidDensityError = Math.abs(
|
|
53
|
+
(flashCalc.flashResult!.totalFluidDensity! - 96.46994608249469) / 96.46994608249469
|
|
54
|
+
);
|
|
55
|
+
const bubblePointTempError = Math.abs(
|
|
56
|
+
(flashCalc.flashResult!.bubblePointTemperature! - 269.42243315914885) / 269.42243315914885
|
|
57
|
+
);
|
|
58
|
+
const bubblePointPressureError = Math.abs(
|
|
59
|
+
(flashCalc.flashResult!.bubblePointPressure! - 153386.54309610242) / 153386.54309610242
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
expect(totalFluidDensityError).toBeLessThan(1e-3);
|
|
63
|
+
expect(flashCalc.flashResult!.fluidPhase).toBe(2);
|
|
64
|
+
expect(bubblePointTempError).toBeLessThan(1e-3);
|
|
65
|
+
expect(bubblePointPressureError).toBeLessThan(1e-3);
|
|
66
|
+
|
|
67
|
+
console.log(`SUCCESS: flashCalculation (${flashCalc.calculationElapsedTime}ms)`);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Material, MaterialComponent, State } from "../../src/entities";
|
|
2
|
+
import { FlashCalculation } from "../../src/calculations/properties";
|
|
3
|
+
import { ResultCode } from "../../src/enums";
|
|
4
|
+
import { setAccessToken } from "../../src/utilities";
|
|
5
|
+
const accessToken = process.env.PWS_ACCESS_TOKEN;
|
|
6
|
+
|
|
7
|
+
if (!accessToken) {
|
|
8
|
+
throw new Error("ACCESS_TOKEN environment variable is not set.");
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
setAccessToken(accessToken);
|
|
12
|
+
|
|
13
|
+
describe("Flash Calculation Scenario - Test Case 28", () => {
|
|
14
|
+
test("should run the flash calculation and perform regression check", async () => {
|
|
15
|
+
// Set the case properties
|
|
16
|
+
const stateTemperature = 350.0;
|
|
17
|
+
const statePressure = 2.0e5;
|
|
18
|
+
const stateLiquidFraction = 0.7;
|
|
19
|
+
|
|
20
|
+
// Define the initial state of the vessel
|
|
21
|
+
const state = new State({
|
|
22
|
+
temperature: stateTemperature,
|
|
23
|
+
pressure: statePressure,
|
|
24
|
+
liquidFraction: stateLiquidFraction
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
// Define the material
|
|
28
|
+
const material = new Material({
|
|
29
|
+
name: "Case28_Material",
|
|
30
|
+
components: [
|
|
31
|
+
new MaterialComponent({ name: "N-DECANE", moleFraction: 0.333 }),
|
|
32
|
+
new MaterialComponent({ name: "N-UNDECANE", moleFraction: 0.333 }),
|
|
33
|
+
new MaterialComponent({ name: "WATER", moleFraction: 0.334 })
|
|
34
|
+
],
|
|
35
|
+
componentCount: 3
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// Create and run flash calculation
|
|
39
|
+
const flashCalc = new FlashCalculation(material, state);
|
|
40
|
+
|
|
41
|
+
console.log("Running flashCalculation...");
|
|
42
|
+
const resultCode = await flashCalc.run();
|
|
43
|
+
|
|
44
|
+
if (flashCalc.messages.length > 0) {
|
|
45
|
+
console.log("Messages:");
|
|
46
|
+
flashCalc.messages.forEach((msg) => console.log(msg));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
expect(resultCode).toBe(ResultCode.SUCCESS);
|
|
50
|
+
|
|
51
|
+
// Regression checks
|
|
52
|
+
const totalFluidDensityError = Math.abs(
|
|
53
|
+
(flashCalc.flashResult!.totalFluidDensity! - 705.2670016215116) / 705.2670016215116
|
|
54
|
+
);
|
|
55
|
+
const bubblePointTempError = Math.abs(
|
|
56
|
+
(flashCalc.flashResult!.bubblePointTemperature! - 425.9402358853448) / 425.9402358853448
|
|
57
|
+
);
|
|
58
|
+
const bubblePointPressureError = Math.abs(
|
|
59
|
+
(flashCalc.flashResult!.bubblePointPressure! - 15560.140921506196) / 15560.140921506196
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
expect(totalFluidDensityError).toBeLessThan(1e-3);
|
|
63
|
+
expect(flashCalc.flashResult!.fluidPhase).toBe(3);
|
|
64
|
+
expect(bubblePointTempError).toBeLessThan(1e-3);
|
|
65
|
+
expect(bubblePointPressureError).toBeLessThan(1e-3);
|
|
66
|
+
|
|
67
|
+
console.log(`SUCCESS: flashCalculation (${flashCalc.calculationElapsedTime}ms)`);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Material, MaterialComponent, State } from "../../src/entities";
|
|
2
|
+
import { FlashCalculation } from "../../src/calculations/properties";
|
|
3
|
+
import { ResultCode } from "../../src/enums";
|
|
4
|
+
import { setAccessToken } from "../../src/utilities";
|
|
5
|
+
const accessToken = process.env.PWS_ACCESS_TOKEN;
|
|
6
|
+
|
|
7
|
+
if (!accessToken) {
|
|
8
|
+
throw new Error("ACCESS_TOKEN environment variable is not set.");
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
setAccessToken(accessToken);
|
|
12
|
+
|
|
13
|
+
describe("Flash Calculation Scenario - Test Case 29", () => {
|
|
14
|
+
test("should run the flash calculation and perform regression check", async () => {
|
|
15
|
+
// Set the case properties
|
|
16
|
+
const stateTemperature = 300.0;
|
|
17
|
+
const statePressure = 2.0e5;
|
|
18
|
+
const stateLiquidFraction = 0.8;
|
|
19
|
+
|
|
20
|
+
// Define the initial state of the vessel
|
|
21
|
+
const state = new State({
|
|
22
|
+
temperature: stateTemperature,
|
|
23
|
+
pressure: statePressure,
|
|
24
|
+
liquidFraction: stateLiquidFraction
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
// Define the material
|
|
28
|
+
const material = new Material({
|
|
29
|
+
name: "N-BUTANE",
|
|
30
|
+
components: [
|
|
31
|
+
new MaterialComponent({ name: "N-BUTANE", moleFraction: 1.0 })
|
|
32
|
+
],
|
|
33
|
+
componentCount: 1
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
// Create and run flash calculation
|
|
37
|
+
const flashCalc = new FlashCalculation(material, state);
|
|
38
|
+
|
|
39
|
+
console.log("Running flashCalculation...");
|
|
40
|
+
const resultCode = await flashCalc.run();
|
|
41
|
+
|
|
42
|
+
if (flashCalc.messages.length > 0) {
|
|
43
|
+
console.log("Messages:");
|
|
44
|
+
flashCalc.messages.forEach((msg) => console.log(msg));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
expect(resultCode).toBe(ResultCode.SUCCESS);
|
|
48
|
+
|
|
49
|
+
// Regression checks
|
|
50
|
+
const totalFluidDensityError = Math.abs(
|
|
51
|
+
(flashCalc.flashResult!.totalFluidDensity! - 4.922619520710173) / 4.922619520710173
|
|
52
|
+
);
|
|
53
|
+
const bubblePointTempError = Math.abs(
|
|
54
|
+
(flashCalc.flashResult!.bubblePointTemperature! - 291.9424041360644) / 291.9424041360644
|
|
55
|
+
);
|
|
56
|
+
const bubblePointPressureError = Math.abs(
|
|
57
|
+
(flashCalc.flashResult!.bubblePointPressure! - 258003.82350284143) / 258003.82350284143
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
expect(totalFluidDensityError).toBeLessThan(1e-3);
|
|
61
|
+
expect(flashCalc.flashResult!.fluidPhase).toBe(1);
|
|
62
|
+
expect(bubblePointTempError).toBeLessThan(1e-3);
|
|
63
|
+
expect(bubblePointPressureError).toBeLessThan(1e-3);
|
|
64
|
+
|
|
65
|
+
console.log(`SUCCESS: flashCalculation (${flashCalc.calculationElapsedTime}ms)`);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Material, MaterialComponent, State } from "../../src/entities";
|
|
2
|
+
import { FlashCalculation } from "../../src/calculations/properties";
|
|
3
|
+
import { ResultCode } from "../../src/enums";
|
|
4
|
+
import { setAccessToken } from "../../src/utilities";
|
|
5
|
+
const accessToken = process.env.PWS_ACCESS_TOKEN;
|
|
6
|
+
|
|
7
|
+
if (!accessToken) {
|
|
8
|
+
throw new Error("ACCESS_TOKEN environment variable is not set.");
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
setAccessToken(accessToken);
|
|
12
|
+
|
|
13
|
+
describe("Flash Calculation Scenario - Test Case 30", () => {
|
|
14
|
+
test("should run the flash calculation and perform regression check", async () => {
|
|
15
|
+
// Set the case properties
|
|
16
|
+
const stateTemperature = 290.0;
|
|
17
|
+
const statePressure = 1.0e6;
|
|
18
|
+
const stateLiquidFraction = 0.8;
|
|
19
|
+
|
|
20
|
+
// Define the initial state of the vessel
|
|
21
|
+
const state = new State({
|
|
22
|
+
temperature: stateTemperature,
|
|
23
|
+
pressure: statePressure,
|
|
24
|
+
liquidFraction: stateLiquidFraction
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
// Define the material
|
|
28
|
+
const material = new Material({
|
|
29
|
+
name: "Case30_Material",
|
|
30
|
+
components: [
|
|
31
|
+
new MaterialComponent({ name: "METHANE", moleFraction: 0.25 }),
|
|
32
|
+
new MaterialComponent({ name: "ETHANE", moleFraction: 0.25 }),
|
|
33
|
+
new MaterialComponent({ name: "HYDROGEN", moleFraction: 0.25 }),
|
|
34
|
+
new MaterialComponent({ name: "HYDROGEN SULFIDE", moleFraction: 0.25 })
|
|
35
|
+
],
|
|
36
|
+
componentCount: 4
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
// Create and run flash calculation
|
|
40
|
+
const flashCalc = new FlashCalculation(material, state);
|
|
41
|
+
|
|
42
|
+
console.log("Running flashCalculation...");
|
|
43
|
+
const resultCode = await flashCalc.run();
|
|
44
|
+
|
|
45
|
+
if (flashCalc.messages.length > 0) {
|
|
46
|
+
console.log("Messages:");
|
|
47
|
+
flashCalc.messages.forEach((msg) => console.log(msg));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
expect(resultCode).toBe(ResultCode.SUCCESS);
|
|
51
|
+
|
|
52
|
+
// Regression checks
|
|
53
|
+
const totalFluidDensityError = Math.abs(
|
|
54
|
+
(flashCalc.flashResult!.totalFluidDensity! - 8.777167721290303) / 8.777167721290303
|
|
55
|
+
);
|
|
56
|
+
const bubblePointTempError = Math.abs(
|
|
57
|
+
(flashCalc.flashResult!.bubblePointTemperature! - 45.7498568184341) / 45.7498568184341
|
|
58
|
+
);
|
|
59
|
+
const bubblePointPressureError = Math.abs(
|
|
60
|
+
(flashCalc.flashResult!.bubblePointPressure! - 13803578.156685727) / 13803578.156685727
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
expect(totalFluidDensityError).toBeLessThan(1e-3);
|
|
64
|
+
expect(flashCalc.flashResult!.fluidPhase).toBe(1);
|
|
65
|
+
expect(bubblePointTempError).toBeLessThan(1e-3);
|
|
66
|
+
expect(bubblePointPressureError).toBeLessThan(1e-3);
|
|
67
|
+
|
|
68
|
+
console.log(`SUCCESS: flashCalculation (${flashCalc.calculationElapsedTime}ms)`);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Material, MaterialComponent, State, Vessel } from "../../src/entities";
|
|
2
|
+
import { GetMassFromVesselCalculation } from "../../src/calculations/utilities";
|
|
3
|
+
import { ResultCode, VesselConditions, VesselShape } from "../../src/enums";
|
|
4
|
+
import { setAccessToken } from "../../src/utilities";
|
|
5
|
+
const accessToken = process.env.PWS_ACCESS_TOKEN;
|
|
6
|
+
|
|
7
|
+
if (!accessToken) {
|
|
8
|
+
throw new Error("ACCESS_TOKEN environment variable is not set.");
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
setAccessToken(accessToken);
|
|
12
|
+
|
|
13
|
+
describe("Get Mass From Vessel Calculation - Demo Test", () => {
|
|
14
|
+
test("should calculate mass from vessel with carbon dioxide", async () => {
|
|
15
|
+
// Define test case properties
|
|
16
|
+
const materialName = "CARBON DIOXIDE (TOXIC)";
|
|
17
|
+
const stateTemperature = 280.0;
|
|
18
|
+
const statePressure = 8.0e6;
|
|
19
|
+
const vesselShape = VesselShape.VESSEL_SPHERE;
|
|
20
|
+
const vesselDiameter = 5.0;
|
|
21
|
+
|
|
22
|
+
// Define the initial state
|
|
23
|
+
const state = new State({
|
|
24
|
+
temperature: stateTemperature,
|
|
25
|
+
pressure: statePressure,
|
|
26
|
+
liquidFraction: 0.8
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
// Define the material
|
|
30
|
+
const material = new Material({
|
|
31
|
+
name: materialName,
|
|
32
|
+
components: [new MaterialComponent({ name: materialName, moleFraction: 1.0 })]
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
// Create vessel
|
|
36
|
+
const vessel = new Vessel({
|
|
37
|
+
state: state,
|
|
38
|
+
material: material,
|
|
39
|
+
diameter: vesselDiameter,
|
|
40
|
+
shape: vesselShape,
|
|
41
|
+
vesselConditions: VesselConditions.PRESSURIZED_LIQUID_VESSEL,
|
|
42
|
+
liquidFillFractionByVolume: 0.6
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
// Create and run get mass from vessel calculation
|
|
46
|
+
const getMassFromVesselCalc = new GetMassFromVesselCalculation(vessel);
|
|
47
|
+
|
|
48
|
+
console.log("Running getMassFromVesselCalculation...");
|
|
49
|
+
const resultCode = await getMassFromVesselCalc.run();
|
|
50
|
+
|
|
51
|
+
// Log operation ID
|
|
52
|
+
console.log(`operation_id: ${getMassFromVesselCalc.operationId}`);
|
|
53
|
+
|
|
54
|
+
// Log any messages
|
|
55
|
+
if (getMassFromVesselCalc.messages.length > 0) {
|
|
56
|
+
console.log("Messages:");
|
|
57
|
+
getMassFromVesselCalc.messages.forEach((msg) => console.log(msg));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Assertions
|
|
61
|
+
expect(resultCode).toBe(ResultCode.SUCCESS);
|
|
62
|
+
console.log(`SUCCESS: getMassFromVesselCalculation (${getMassFromVesselCalc.calculationElapsedTime}ms)`);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { MaterialComponent } from "../../src/entities";
|
|
2
|
+
import { getComponentById } from "../../src/materials"; // Assuming this is where the function would live in TS
|
|
3
|
+
import { setAccessToken } from "../../src/utilities";
|
|
4
|
+
const accessToken = process.env.PWS_ACCESS_TOKEN;
|
|
5
|
+
|
|
6
|
+
if (!accessToken) {
|
|
7
|
+
throw new Error("ACCESS_TOKEN environment variable is not set.");
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
setAccessToken(accessToken);
|
|
11
|
+
|
|
12
|
+
describe("Material Component Retrieval - Test Case", () => {
|
|
13
|
+
test("should get material component data by ID for METHANE", async () => {
|
|
14
|
+
// Test description
|
|
15
|
+
/**
|
|
16
|
+
* Test to get the material component data by id for METHANE.
|
|
17
|
+
* METHANE entity id = 9ad96d64-098e-4079-b604-a432145eba99.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
// Define the methane component ID
|
|
21
|
+
const methaneId = "9ad96d64-098e-4079-b604-a432145eba99";
|
|
22
|
+
|
|
23
|
+
console.log("Running getComponentById...");
|
|
24
|
+
|
|
25
|
+
// Invoke the method
|
|
26
|
+
const materialComponentData = await getComponentById(methaneId);
|
|
27
|
+
|
|
28
|
+
console.log("Material Component Data:", materialComponentData);
|
|
29
|
+
|
|
30
|
+
// Basic assertions - adjust these based on expected MaterialComponent properties
|
|
31
|
+
expect(materialComponentData).toBeDefined();
|
|
32
|
+
expect(materialComponentData.name).toBe("METHANE"); // Assuming name is a property
|
|
33
|
+
expect(materialComponentData.id).toBe(methaneId); // Assuming id is a property
|
|
34
|
+
});
|
|
35
|
+
});
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Material, MaterialComponent, State, Vessel } from "../../src/entities";
|
|
2
|
+
import { GetMassFromVesselCalculation } from "../../src/calculations/utilities";
|
|
3
|
+
import { ResultCode, VesselConditions, VesselShape } from "../../src/enums";
|
|
4
|
+
import { setAccessToken } from "../../src/utilities";
|
|
5
|
+
const accessToken = process.env.PWS_ACCESS_TOKEN;
|
|
6
|
+
|
|
7
|
+
if (!accessToken) {
|
|
8
|
+
throw new Error("ACCESS_TOKEN environment variable is not set.");
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
setAccessToken(accessToken);
|
|
12
|
+
|
|
13
|
+
describe("Get Mass From Vessel - Test Case 139", () => {
|
|
14
|
+
test("should calculate mass from vessel and perform regression check", async () => {
|
|
15
|
+
// Define the case properties
|
|
16
|
+
const materialName = "CARBON DIOXIDE (TOXIC)";
|
|
17
|
+
const stateTemperature = 280.0;
|
|
18
|
+
const statePressure = 8.0e6;
|
|
19
|
+
const vesselShape = VesselShape.VESSEL_SPHERE;
|
|
20
|
+
const vesselDiameter = 5.0;
|
|
21
|
+
|
|
22
|
+
// Define the material
|
|
23
|
+
const material = new Material({
|
|
24
|
+
name: materialName,
|
|
25
|
+
components: [new MaterialComponent({ name: materialName, moleFraction: 1.0 })]
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
// Create vessel
|
|
29
|
+
const vessel = new Vessel({
|
|
30
|
+
state: new State({
|
|
31
|
+
temperature: stateTemperature,
|
|
32
|
+
pressure: statePressure,
|
|
33
|
+
liquidFraction: 0.8
|
|
34
|
+
}),
|
|
35
|
+
material: material,
|
|
36
|
+
diameter: vesselDiameter,
|
|
37
|
+
shape: vesselShape,
|
|
38
|
+
vesselConditions: VesselConditions.PRESSURIZED_LIQUID_VESSEL,
|
|
39
|
+
liquidFillFractionByVolume: 0.6
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
// Create and run get mass from vessel calculation
|
|
43
|
+
const getMassFromVesselCalc = new GetMassFromVesselCalculation(vessel);
|
|
44
|
+
|
|
45
|
+
console.log("Running getMassFromVesselCalculation...");
|
|
46
|
+
const resultCode = await getMassFromVesselCalc.run();
|
|
47
|
+
|
|
48
|
+
if (getMassFromVesselCalc.messages.length > 0) {
|
|
49
|
+
console.log("Messages:");
|
|
50
|
+
getMassFromVesselCalc.messages.forEach((msg) => console.log(msg));
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
expect(resultCode).toBe(ResultCode.SUCCESS);
|
|
54
|
+
|
|
55
|
+
// Regression check
|
|
56
|
+
const massError = Math.abs(
|
|
57
|
+
(getMassFromVesselCalc.massInventory! - 34659.76615856555) / 34659.76615856555
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
expect(massError).toBeLessThan(1e-3);
|
|
61
|
+
|
|
62
|
+
console.log(`SUCCESS: getMassFromVesselCalculation (${getMassFromVesselCalc.calculationElapsedTime}ms)`);
|
|
63
|
+
console.log(`Mass from vessel = ${getMassFromVesselCalc.massInventory}`);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { Material, MaterialComponent, State, Leak, Vessel, FlammableParameters, Weather, Substrate, DischargeParameters } from "../../src/entities";
|
|
2
|
+
import { VesselStateCalculation, VesselLeakCalculation } from "../../src/calculations/discharge";
|
|
3
|
+
import { JetFireCalculation} from "../../src/calculations/jetFire";
|
|
4
|
+
import { ResultCode, AtmosphericStabilityClass, VesselShape, TimeVaryingOption } from "../../src/enums";
|
|
5
|
+
import { setAccessToken } from "../../src/utilities";
|
|
6
|
+
const accessToken = process.env.PWS_ACCESS_TOKEN;
|
|
7
|
+
|
|
8
|
+
if (!accessToken) {
|
|
9
|
+
throw new Error("ACCESS_TOKEN environment variable is not set.");
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
setAccessToken(accessToken);
|
|
13
|
+
|
|
14
|
+
describe("Integrated Jet Fire Scenario - Test Case 36", () => {
|
|
15
|
+
test("should run the full jet fire scenario and perform regression check", async () => {
|
|
16
|
+
// Set the case properties
|
|
17
|
+
const materialName = "METHANE";
|
|
18
|
+
const stateTemperature = 280.0;
|
|
19
|
+
const statePressure = 1.0e6;
|
|
20
|
+
const vesselShape = VesselShape.VESSEL_SPHERE;
|
|
21
|
+
const vesselDiameter = 3.0;
|
|
22
|
+
const leakHoleDiameter = 0.1;
|
|
23
|
+
const timeVaryingOption = TimeVaryingOption.INITIAL_RATE;
|
|
24
|
+
const leakHoleHeightFraction = 0.5;
|
|
25
|
+
const windSpeed = 2.0;
|
|
26
|
+
const stabilityClass = AtmosphericStabilityClass.STABILITY_F;
|
|
27
|
+
const surfaceRoughness = 0.18;
|
|
28
|
+
const timeOfInterest = 10.0;
|
|
29
|
+
|
|
30
|
+
// Define the initial state of the vessel
|
|
31
|
+
const state = new State({
|
|
32
|
+
temperature: stateTemperature,
|
|
33
|
+
pressure: statePressure,
|
|
34
|
+
liquidFraction: 0.0
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// Define the material contained by the vessel
|
|
38
|
+
const material = new Material({
|
|
39
|
+
name: materialName,
|
|
40
|
+
components: [new MaterialComponent({ name: materialName, moleFraction: 1.0 })]
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
// Create and run vessel state calculation
|
|
44
|
+
const vesselStateCalc = new VesselStateCalculation(material, state);
|
|
45
|
+
|
|
46
|
+
console.log("Running vesselStateCalculation...");
|
|
47
|
+
let resultCode = await vesselStateCalc.run();
|
|
48
|
+
|
|
49
|
+
if (vesselStateCalc.messages.length > 0) {
|
|
50
|
+
console.log("Messages:");
|
|
51
|
+
vesselStateCalc.messages.forEach((msg) => console.log(msg));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
expect(resultCode).toBe(ResultCode.SUCCESS);
|
|
55
|
+
console.log(`SUCCESS: vesselStateCalculation (${vesselStateCalc.calculationElapsedTime}ms)`);
|
|
56
|
+
|
|
57
|
+
// Create vessel
|
|
58
|
+
const vessel = new Vessel({
|
|
59
|
+
state: vesselStateCalc.outputState,
|
|
60
|
+
material: vesselStateCalc.material,
|
|
61
|
+
vesselConditions: vesselStateCalc.vesselConditions,
|
|
62
|
+
diameter: vesselDiameter,
|
|
63
|
+
shape: vesselShape,
|
|
64
|
+
liquidFillFractionByVolume: 0.0
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
// Create leak
|
|
68
|
+
const leak = new Leak({
|
|
69
|
+
holeDiameter: leakHoleDiameter,
|
|
70
|
+
holeHeightFraction: leakHoleHeightFraction,
|
|
71
|
+
timeVaryingOption: timeVaryingOption
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
// Create and run vessel leak calculation
|
|
75
|
+
const vesselLeakCalc = new VesselLeakCalculation(
|
|
76
|
+
vessel,
|
|
77
|
+
leak,
|
|
78
|
+
new DischargeParameters()
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
console.log("Running vesselLeakCalculation...");
|
|
82
|
+
resultCode = await vesselLeakCalc.run();
|
|
83
|
+
|
|
84
|
+
if (vesselLeakCalc.messages.length > 0) {
|
|
85
|
+
console.log("Messages:");
|
|
86
|
+
vesselLeakCalc.messages.forEach((msg) => console.log(msg));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
expect(resultCode).toBe(ResultCode.SUCCESS);
|
|
90
|
+
console.log(`SUCCESS: vesselLeakCalculation (${vesselLeakCalc.calculationElapsedTime}ms)`);
|
|
91
|
+
|
|
92
|
+
// Define weather and substrate
|
|
93
|
+
const weather = new Weather({
|
|
94
|
+
windSpeed: windSpeed,
|
|
95
|
+
stabilityClass: stabilityClass
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
const substrate = new Substrate({
|
|
99
|
+
surfaceRoughness: surfaceRoughness
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
// Create and run jet fire calculation
|
|
103
|
+
const flammableParams = new FlammableParameters({
|
|
104
|
+
timeOfInterest: timeOfInterest
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
const jetFireCalc = new JetFireCalculation(
|
|
108
|
+
vesselLeakCalc.exitMaterial!,
|
|
109
|
+
vesselLeakCalc.dischargeRecords!,
|
|
110
|
+
vesselLeakCalc.dischargeRecords!.length,
|
|
111
|
+
vesselLeakCalc.dischargeResult!,
|
|
112
|
+
weather,
|
|
113
|
+
substrate,
|
|
114
|
+
flammableParams
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
console.log("Running jetFireCalculation...");
|
|
118
|
+
resultCode = await jetFireCalc.run();
|
|
119
|
+
|
|
120
|
+
if (jetFireCalc.messages.length > 0) {
|
|
121
|
+
console.log("Messages:");
|
|
122
|
+
jetFireCalc.messages.forEach((msg) => console.log(msg));
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
expect(resultCode).toBe(ResultCode.SUCCESS);
|
|
126
|
+
|
|
127
|
+
// Regression checks
|
|
128
|
+
const flameLengthError = Math.abs(
|
|
129
|
+
(jetFireCalc.flameResult!.flameLength! - 33.750426875730376) / 33.750426875730376
|
|
130
|
+
);
|
|
131
|
+
const surfaceEmissivePowerError = Math.abs(
|
|
132
|
+
(jetFireCalc.flameResult!.surfaceEmissivePower! - 309079.19061404973) / 309079.19061404973
|
|
133
|
+
);
|
|
134
|
+
|
|
135
|
+
expect(flameLengthError).toBeLessThan(1e-3);
|
|
136
|
+
expect(surfaceEmissivePowerError).toBeLessThan(1e-3);
|
|
137
|
+
expect(jetFireCalc.flameRecords!.length).toBe(2);
|
|
138
|
+
|
|
139
|
+
console.log(`SUCCESS: jetFireCalculation (${jetFireCalc.calculationElapsedTime}ms)`);
|
|
140
|
+
});
|
|
141
|
+
});
|