@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,148 @@
|
|
|
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 37", () => {
|
|
15
|
+
test("should run the full jet fire scenario and perform regression check", async () => {
|
|
16
|
+
// Set the case properties
|
|
17
|
+
const materialName = "N-BUTANE";
|
|
18
|
+
const stateTemperature = 300.0;
|
|
19
|
+
const statePressure = 3.0e5;
|
|
20
|
+
const vesselShape = VesselShape.VESSEL_CUBOID;
|
|
21
|
+
const vesselHeight = 2.0;
|
|
22
|
+
const vesselWidth = 1.0;
|
|
23
|
+
const vesselLength = 3.0;
|
|
24
|
+
const leakHoleDiameter = 0.05;
|
|
25
|
+
const timeVaryingOption = TimeVaryingOption.INITIAL_RATE;
|
|
26
|
+
const leakHoleHeightFraction = 0.2;
|
|
27
|
+
const windSpeed = 2.0;
|
|
28
|
+
const stabilityClass = AtmosphericStabilityClass.STABILITY_F;
|
|
29
|
+
const surfaceRoughness = 0.18;
|
|
30
|
+
const timeOfInterest = 20.0;
|
|
31
|
+
const liquidFillFractionByVolume = 0.5;
|
|
32
|
+
|
|
33
|
+
// Define the initial state of the vessel
|
|
34
|
+
const state = new State({
|
|
35
|
+
temperature: stateTemperature,
|
|
36
|
+
pressure: statePressure,
|
|
37
|
+
liquidFraction: 0.0
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// Define the material contained by the vessel
|
|
41
|
+
const material = new Material({
|
|
42
|
+
name: materialName,
|
|
43
|
+
components: [new MaterialComponent({ name: materialName, moleFraction: 1.0 })]
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// Create and run vessel state calculation
|
|
47
|
+
const vesselStateCalc = new VesselStateCalculation(material, state);
|
|
48
|
+
|
|
49
|
+
console.log("Running vesselStateCalculation...");
|
|
50
|
+
let resultCode = await vesselStateCalc.run();
|
|
51
|
+
|
|
52
|
+
if (vesselStateCalc.messages.length > 0) {
|
|
53
|
+
console.log("Messages:");
|
|
54
|
+
vesselStateCalc.messages.forEach((msg) => console.log(msg));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
expect(resultCode).toBe(ResultCode.SUCCESS);
|
|
58
|
+
console.log(`SUCCESS: vesselStateCalculation (${vesselStateCalc.calculationElapsedTime}ms)`);
|
|
59
|
+
|
|
60
|
+
// Create vessel
|
|
61
|
+
const vessel = new Vessel({
|
|
62
|
+
state: vesselStateCalc.outputState,
|
|
63
|
+
material: vesselStateCalc.material,
|
|
64
|
+
vesselConditions: vesselStateCalc.vesselConditions,
|
|
65
|
+
length: vesselLength,
|
|
66
|
+
width: vesselWidth,
|
|
67
|
+
height: vesselHeight,
|
|
68
|
+
shape: vesselShape,
|
|
69
|
+
liquidFillFractionByVolume: liquidFillFractionByVolume
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// Create leak
|
|
73
|
+
const leak = new Leak({
|
|
74
|
+
holeDiameter: leakHoleDiameter,
|
|
75
|
+
holeHeightFraction: leakHoleHeightFraction,
|
|
76
|
+
timeVaryingOption: timeVaryingOption
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
// Create and run vessel leak calculation
|
|
80
|
+
const vesselLeakCalc = new VesselLeakCalculation(
|
|
81
|
+
vessel,
|
|
82
|
+
leak,
|
|
83
|
+
new DischargeParameters()
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
console.log("Running vesselLeakCalculation...");
|
|
87
|
+
resultCode = await vesselLeakCalc.run();
|
|
88
|
+
|
|
89
|
+
if (vesselLeakCalc.messages.length > 0) {
|
|
90
|
+
console.log("Messages:");
|
|
91
|
+
vesselLeakCalc.messages.forEach((msg) => console.log(msg));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
expect(resultCode).toBe(ResultCode.SUCCESS);
|
|
95
|
+
console.log(`SUCCESS: vesselLeakCalculation (${vesselLeakCalc.calculationElapsedTime}ms)`);
|
|
96
|
+
|
|
97
|
+
// Define weather and substrate
|
|
98
|
+
const weather = new Weather({
|
|
99
|
+
windSpeed: windSpeed,
|
|
100
|
+
stabilityClass: stabilityClass
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
const substrate = new Substrate({
|
|
104
|
+
surfaceRoughness: surfaceRoughness
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// Create and run jet fire calculation
|
|
108
|
+
const flammableParams = new FlammableParameters({
|
|
109
|
+
timeOfInterest: timeOfInterest,
|
|
110
|
+
jetFireAutoSelect: false,
|
|
111
|
+
timeAveraging: true
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
const jetFireCalc = new JetFireCalculation(
|
|
115
|
+
vesselLeakCalc.exitMaterial!,
|
|
116
|
+
vesselLeakCalc.dischargeRecords!,
|
|
117
|
+
vesselLeakCalc.dischargeRecords!.length,
|
|
118
|
+
vesselLeakCalc.dischargeResult!,
|
|
119
|
+
weather,
|
|
120
|
+
substrate,
|
|
121
|
+
flammableParams
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
console.log("Running jetFireCalculation...");
|
|
125
|
+
resultCode = await jetFireCalc.run();
|
|
126
|
+
|
|
127
|
+
if (jetFireCalc.messages.length > 0) {
|
|
128
|
+
console.log("Messages:");
|
|
129
|
+
jetFireCalc.messages.forEach((msg) => console.log(msg));
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
expect(resultCode).toBe(ResultCode.SUCCESS);
|
|
133
|
+
|
|
134
|
+
// Regression checks
|
|
135
|
+
const flameLengthError = Math.abs(
|
|
136
|
+
(jetFireCalc.flameResult!.flameLength! - 52.735663839470966) / 52.735663839470966
|
|
137
|
+
);
|
|
138
|
+
const surfaceEmissivePowerError = Math.abs(
|
|
139
|
+
(jetFireCalc.flameResult!.surfaceEmissivePower! - 199020.3679914611) / 199020.3679914611
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
expect(flameLengthError).toBeLessThan(1e-3);
|
|
143
|
+
expect(surfaceEmissivePowerError).toBeLessThan(1e-3);
|
|
144
|
+
expect(jetFireCalc.flameRecords!.length).toBe(2);
|
|
145
|
+
|
|
146
|
+
console.log(`SUCCESS: jetFireCalculation (${jetFireCalc.calculationElapsedTime}ms)`);
|
|
147
|
+
});
|
|
148
|
+
});
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { Material, MaterialComponent, State, Vessel, LineRupture, FlammableParameters, Weather, Substrate, DischargeParameters } from "../../src/entities";
|
|
2
|
+
import { VesselStateCalculation, VesselLineRuptureCalculation } from "../../src/calculations/discharge";
|
|
3
|
+
import { JetFireCalculation } from "../../src/calculations/jetFire";
|
|
4
|
+
import { ResultCode, AtmosphericStabilityClass, VesselShape } 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 38", () => {
|
|
15
|
+
test("should run the full jet fire scenario with line rupture and perform regression check", async () => {
|
|
16
|
+
// Set the case properties
|
|
17
|
+
const materialName = "PROPANE";
|
|
18
|
+
const stateTemperature = 250.0;
|
|
19
|
+
const statePressure = 3.0e5;
|
|
20
|
+
const vesselShape = VesselShape.HORIZONTAL_CYLINDER;
|
|
21
|
+
const vesselDiameter = 2.0;
|
|
22
|
+
const liquidFillFractionByVolume = 0.7;
|
|
23
|
+
const pipeDiameter = 0.1;
|
|
24
|
+
const pipeLength = 5.0;
|
|
25
|
+
const pipeHeightFraction = 0.3;
|
|
26
|
+
const windSpeed = 2.0;
|
|
27
|
+
const stabilityClass = AtmosphericStabilityClass.STABILITY_F;
|
|
28
|
+
const surfaceRoughness = 0.18;
|
|
29
|
+
const timeOfInterest = 120.0;
|
|
30
|
+
const jetFireAutoSelect = false;
|
|
31
|
+
const timeAveraging = false;
|
|
32
|
+
|
|
33
|
+
// Define the initial state of the vessel
|
|
34
|
+
const state = new State({
|
|
35
|
+
temperature: stateTemperature,
|
|
36
|
+
pressure: statePressure,
|
|
37
|
+
liquidFraction: 0.0
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// Define the material contained by the vessel
|
|
41
|
+
const material = new Material({
|
|
42
|
+
name: materialName,
|
|
43
|
+
components: [new MaterialComponent({ name: materialName, moleFraction: 1.0 })]
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// Create and run vessel state calculation
|
|
47
|
+
const vesselStateCalc = new VesselStateCalculation(material, state);
|
|
48
|
+
|
|
49
|
+
console.log("Running vesselStateCalculation...");
|
|
50
|
+
let resultCode = await vesselStateCalc.run();
|
|
51
|
+
|
|
52
|
+
if (vesselStateCalc.messages.length > 0) {
|
|
53
|
+
console.log("Messages:");
|
|
54
|
+
vesselStateCalc.messages.forEach((msg) => console.log(msg));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
expect(resultCode).toBe(ResultCode.SUCCESS);
|
|
58
|
+
console.log(`SUCCESS: vesselStateCalculation (${vesselStateCalc.calculationElapsedTime}ms)`);
|
|
59
|
+
|
|
60
|
+
// Create vessel
|
|
61
|
+
const vessel = new Vessel({
|
|
62
|
+
state: vesselStateCalc.outputState,
|
|
63
|
+
material: vesselStateCalc.material,
|
|
64
|
+
vesselConditions: vesselStateCalc.vesselConditions,
|
|
65
|
+
diameter: vesselDiameter,
|
|
66
|
+
length: 5.0,
|
|
67
|
+
shape: vesselShape,
|
|
68
|
+
liquidFillFractionByVolume: liquidFillFractionByVolume
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
// Create line rupture
|
|
72
|
+
const lineRupture = new LineRupture({
|
|
73
|
+
pipeDiameter: pipeDiameter,
|
|
74
|
+
pipeLength: pipeLength,
|
|
75
|
+
pipeHeightFraction: pipeHeightFraction
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
// Create and run vessel line rupture calculation
|
|
79
|
+
const vesselLineRuptureCalc = new VesselLineRuptureCalculation(
|
|
80
|
+
vessel,
|
|
81
|
+
lineRupture,
|
|
82
|
+
new DischargeParameters()
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
console.log("Running vesselLineRuptureCalculation...");
|
|
86
|
+
resultCode = await vesselLineRuptureCalc.run();
|
|
87
|
+
|
|
88
|
+
if (vesselLineRuptureCalc.messages.length > 0) {
|
|
89
|
+
console.log("Messages:");
|
|
90
|
+
vesselLineRuptureCalc.messages.forEach((msg) => console.log(msg));
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
expect(resultCode).toBe(ResultCode.SUCCESS);
|
|
94
|
+
console.log(`SUCCESS: vesselLineRuptureCalculation (${vesselLineRuptureCalc.calculationElapsedTime}ms)`);
|
|
95
|
+
|
|
96
|
+
// Define weather and substrate
|
|
97
|
+
const weather = new Weather({
|
|
98
|
+
windSpeed: windSpeed,
|
|
99
|
+
stabilityClass: stabilityClass
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
const substrate = new Substrate({
|
|
103
|
+
surfaceRoughness: surfaceRoughness
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
// Create and run jet fire calculation
|
|
107
|
+
const flammableParams = new FlammableParameters({
|
|
108
|
+
timeOfInterest: timeOfInterest,
|
|
109
|
+
jetFireAutoSelect: jetFireAutoSelect,
|
|
110
|
+
timeAveraging: timeAveraging
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
const jetFireCalc = new JetFireCalculation(
|
|
114
|
+
vesselLineRuptureCalc.exitMaterial!,
|
|
115
|
+
vesselLineRuptureCalc.dischargeRecords!,
|
|
116
|
+
vesselLineRuptureCalc.dischargeRecords!.length,
|
|
117
|
+
vesselLineRuptureCalc.dischargeResult!,
|
|
118
|
+
weather,
|
|
119
|
+
substrate,
|
|
120
|
+
flammableParams
|
|
121
|
+
);
|
|
122
|
+
|
|
123
|
+
console.log("Running jetFireCalculation...");
|
|
124
|
+
resultCode = await jetFireCalc.run();
|
|
125
|
+
|
|
126
|
+
if (jetFireCalc.messages.length > 0) {
|
|
127
|
+
console.log("Messages:");
|
|
128
|
+
jetFireCalc.messages.forEach((msg) => console.log(msg));
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
expect(resultCode).toBe(ResultCode.SUCCESS);
|
|
132
|
+
|
|
133
|
+
// Regression checks
|
|
134
|
+
const flameLengthError = Math.abs(
|
|
135
|
+
(jetFireCalc.flameResult!.flameLength! - 98.19868637938056) / 98.19868637938056
|
|
136
|
+
);
|
|
137
|
+
const surfaceEmissivePowerError = Math.abs(
|
|
138
|
+
(jetFireCalc.flameResult!.surfaceEmissivePower! - 175803.22174161073) / 175803.22174161073
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
expect(flameLengthError).toBeLessThan(1e-3);
|
|
142
|
+
expect(surfaceEmissivePowerError).toBeLessThan(1e-3);
|
|
143
|
+
expect(jetFireCalc.flameRecords!.length).toBe(2);
|
|
144
|
+
|
|
145
|
+
console.log(`SUCCESS: jetFireCalculation (${jetFireCalc.calculationElapsedTime}ms)`);
|
|
146
|
+
});
|
|
147
|
+
});
|
|
@@ -0,0 +1,146 @@
|
|
|
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 39", () => {
|
|
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 liquidFillFractionByVolume = 0.0;
|
|
26
|
+
const windSpeed = 2.0;
|
|
27
|
+
const stabilityClass = AtmosphericStabilityClass.STABILITY_F;
|
|
28
|
+
const surfaceRoughness = 0.18;
|
|
29
|
+
const timeOfInterest = 3600.0;
|
|
30
|
+
const jetFireAutoSelect = false;
|
|
31
|
+
const timeAveraging = true;
|
|
32
|
+
|
|
33
|
+
// Define the initial state of the vessel
|
|
34
|
+
const state = new State({
|
|
35
|
+
temperature: stateTemperature,
|
|
36
|
+
pressure: statePressure,
|
|
37
|
+
liquidFraction: 0.0
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// Define the material contained by the vessel
|
|
41
|
+
const material = new Material({
|
|
42
|
+
name: materialName,
|
|
43
|
+
components: [new MaterialComponent({ name: materialName, moleFraction: 1.0 })]
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// Create and run vessel state calculation
|
|
47
|
+
const vesselStateCalc = new VesselStateCalculation(material, state);
|
|
48
|
+
|
|
49
|
+
console.log("Running vesselStateCalculation...");
|
|
50
|
+
let resultCode = await vesselStateCalc.run();
|
|
51
|
+
|
|
52
|
+
if (vesselStateCalc.messages.length > 0) {
|
|
53
|
+
console.log("Messages:");
|
|
54
|
+
vesselStateCalc.messages.forEach((msg) => console.log(msg));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
expect(resultCode).toBe(ResultCode.SUCCESS);
|
|
58
|
+
console.log(`SUCCESS: vesselStateCalculation (${vesselStateCalc.calculationElapsedTime}ms)`);
|
|
59
|
+
|
|
60
|
+
// Create vessel
|
|
61
|
+
const vessel = new Vessel({
|
|
62
|
+
state: vesselStateCalc.outputState,
|
|
63
|
+
material: vesselStateCalc.material,
|
|
64
|
+
vesselConditions: vesselStateCalc.vesselConditions,
|
|
65
|
+
diameter: vesselDiameter,
|
|
66
|
+
shape: vesselShape,
|
|
67
|
+
liquidFillFractionByVolume: liquidFillFractionByVolume
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
// Create leak
|
|
71
|
+
const leak = new Leak({
|
|
72
|
+
holeDiameter: leakHoleDiameter,
|
|
73
|
+
holeHeightFraction: leakHoleHeightFraction,
|
|
74
|
+
timeVaryingOption: timeVaryingOption
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// Create and run vessel leak calculation
|
|
78
|
+
const vesselLeakCalc = new VesselLeakCalculation(
|
|
79
|
+
vessel,
|
|
80
|
+
leak,
|
|
81
|
+
new DischargeParameters()
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
console.log("Running vesselLeakCalculation...");
|
|
85
|
+
resultCode = await vesselLeakCalc.run();
|
|
86
|
+
|
|
87
|
+
if (vesselLeakCalc.messages.length > 0) {
|
|
88
|
+
console.log("Messages:");
|
|
89
|
+
vesselLeakCalc.messages.forEach((msg) => console.log(msg));
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
expect(resultCode).toBe(ResultCode.SUCCESS);
|
|
93
|
+
console.log(`SUCCESS: vesselLeakCalculation (${vesselLeakCalc.calculationElapsedTime}ms)`);
|
|
94
|
+
|
|
95
|
+
// Define weather and substrate
|
|
96
|
+
const weather = new Weather({
|
|
97
|
+
windSpeed: windSpeed,
|
|
98
|
+
stabilityClass: stabilityClass
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
const substrate = new Substrate({
|
|
102
|
+
surfaceRoughness: surfaceRoughness
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
// Create and run jet fire calculation
|
|
106
|
+
const flammableParams = new FlammableParameters({
|
|
107
|
+
timeOfInterest: timeOfInterest,
|
|
108
|
+
jetFireAutoSelect: jetFireAutoSelect,
|
|
109
|
+
timeAveraging: timeAveraging
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
const jetFireCalc = new JetFireCalculation(
|
|
113
|
+
vesselLeakCalc.exitMaterial!,
|
|
114
|
+
vesselLeakCalc.dischargeRecords!,
|
|
115
|
+
vesselLeakCalc.dischargeRecords!.length,
|
|
116
|
+
vesselLeakCalc.dischargeResult!,
|
|
117
|
+
weather,
|
|
118
|
+
substrate,
|
|
119
|
+
flammableParams
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
console.log("Running jetFireCalculation...");
|
|
123
|
+
resultCode = await jetFireCalc.run();
|
|
124
|
+
|
|
125
|
+
if (jetFireCalc.messages.length > 0) {
|
|
126
|
+
console.log("Messages:");
|
|
127
|
+
jetFireCalc.messages.forEach((msg) => console.log(msg));
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
expect(resultCode).toBe(ResultCode.SUCCESS);
|
|
131
|
+
|
|
132
|
+
// Regression checks
|
|
133
|
+
const flameLengthError = Math.abs(
|
|
134
|
+
(jetFireCalc.flameResult!.flameLength! - 33.750426875730376) / 33.750426875730376
|
|
135
|
+
);
|
|
136
|
+
const surfaceEmissivePowerError = Math.abs(
|
|
137
|
+
(jetFireCalc.flameResult!.surfaceEmissivePower! - 309079.19061404973) / 309079.19061404973
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
expect(flameLengthError).toBeLessThan(1e-3);
|
|
141
|
+
expect(surfaceEmissivePowerError).toBeLessThan(1e-3);
|
|
142
|
+
expect(jetFireCalc.flameRecords!.length).toBe(2);
|
|
143
|
+
|
|
144
|
+
console.log(`SUCCESS: jetFireCalculation (${jetFireCalc.calculationElapsedTime}ms)`);
|
|
145
|
+
});
|
|
146
|
+
});
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { Material, MaterialComponent, State, Vessel, LineRupture, Weather, Substrate, DischargeParameters, FlammableParameters } from "../../src/entities";
|
|
2
|
+
import { VesselStateCalculation, VesselLineRuptureCalculation } from "../../src/calculations/discharge";
|
|
3
|
+
import { JetFireCalculation } from "../../src/calculations/jetFire";
|
|
4
|
+
import { ResultCode, AtmosphericStabilityClass, VesselShape } 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 40", () => {
|
|
15
|
+
test("should run the full jet fire scenario with line rupture and perform regression check", async () => {
|
|
16
|
+
// Set the case properties
|
|
17
|
+
const materialName = "ETHANE_METHANE_HYDROGEN";
|
|
18
|
+
const stateTemperature = 260.0;
|
|
19
|
+
const statePressure = 5.0e5;
|
|
20
|
+
const vesselShape = VesselShape.VESSEL_SPHERE;
|
|
21
|
+
const vesselDiameter = 3.0;
|
|
22
|
+
const liquidFillFractionByVolume = 0.7;
|
|
23
|
+
const pipeDiameter = 0.5;
|
|
24
|
+
const pipeLength = 1.0;
|
|
25
|
+
const pipeHeightFraction = 0.5;
|
|
26
|
+
const windSpeed = 2.0;
|
|
27
|
+
const stabilityClass = AtmosphericStabilityClass.STABILITY_F;
|
|
28
|
+
const surfaceRoughness = 0.18;
|
|
29
|
+
const timeOfInterest = 600.0;
|
|
30
|
+
const jetFireAutoSelect = false;
|
|
31
|
+
const timeAveraging = true;
|
|
32
|
+
|
|
33
|
+
// Define the initial state of the vessel
|
|
34
|
+
const state = new State({
|
|
35
|
+
temperature: stateTemperature,
|
|
36
|
+
pressure: statePressure,
|
|
37
|
+
liquidFraction: 0.0
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// Define the material contained by the vessel
|
|
41
|
+
const material = new Material({
|
|
42
|
+
name: materialName,
|
|
43
|
+
components: [
|
|
44
|
+
new MaterialComponent({ name: "METHANE", moleFraction: 0.5 }),
|
|
45
|
+
new MaterialComponent({ name: "ETHANE", moleFraction: 0.3 }),
|
|
46
|
+
new MaterialComponent({ name: "HYDROGEN", moleFraction: 0.2 })
|
|
47
|
+
],
|
|
48
|
+
componentCount: 3
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// Create and run vessel state calculation
|
|
52
|
+
const vesselStateCalc = new VesselStateCalculation(material, state);
|
|
53
|
+
|
|
54
|
+
console.log("Running vesselStateCalculation...");
|
|
55
|
+
let resultCode = await vesselStateCalc.run();
|
|
56
|
+
|
|
57
|
+
if (vesselStateCalc.messages.length > 0) {
|
|
58
|
+
console.log("Messages:");
|
|
59
|
+
vesselStateCalc.messages.forEach((msg) => console.log(msg));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
expect(resultCode).toBe(ResultCode.SUCCESS);
|
|
63
|
+
console.log(`SUCCESS: vesselStateCalculation (${vesselStateCalc.calculationElapsedTime}ms)`);
|
|
64
|
+
|
|
65
|
+
// Create vessel
|
|
66
|
+
const vessel = new Vessel({
|
|
67
|
+
state: vesselStateCalc.outputState,
|
|
68
|
+
material: vesselStateCalc.material,
|
|
69
|
+
vesselConditions: vesselStateCalc.vesselConditions,
|
|
70
|
+
diameter: vesselDiameter,
|
|
71
|
+
length: 5.0,
|
|
72
|
+
shape: vesselShape,
|
|
73
|
+
liquidFillFractionByVolume: liquidFillFractionByVolume
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
// Create line rupture
|
|
77
|
+
const lineRupture = new LineRupture({
|
|
78
|
+
pipeDiameter: pipeDiameter,
|
|
79
|
+
pipeLength: pipeLength,
|
|
80
|
+
pipeHeightFraction: pipeHeightFraction
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
// Create and run vessel line rupture calculation
|
|
84
|
+
const vesselLineRuptureCalc = new VesselLineRuptureCalculation(
|
|
85
|
+
vessel,
|
|
86
|
+
lineRupture,
|
|
87
|
+
new DischargeParameters()
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
console.log("Running vesselLineRuptureCalculation...");
|
|
91
|
+
resultCode = await vesselLineRuptureCalc.run();
|
|
92
|
+
|
|
93
|
+
if (vesselLineRuptureCalc.messages.length > 0) {
|
|
94
|
+
console.log("Messages:");
|
|
95
|
+
vesselLineRuptureCalc.messages.forEach((msg) => console.log(msg));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
expect(resultCode).toBe(ResultCode.SUCCESS);
|
|
99
|
+
console.log(`SUCCESS: vesselLineRuptureCalculation (${vesselLineRuptureCalc.calculationElapsedTime}ms)`);
|
|
100
|
+
|
|
101
|
+
// Define weather and substrate
|
|
102
|
+
const weather = new Weather({
|
|
103
|
+
windSpeed: windSpeed,
|
|
104
|
+
stabilityClass: stabilityClass
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
const substrate = new Substrate({
|
|
108
|
+
surfaceRoughness: surfaceRoughness
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
// Create and run jet fire calculation
|
|
112
|
+
const flammableParams = new FlammableParameters({
|
|
113
|
+
timeOfInterest: timeOfInterest,
|
|
114
|
+
jetFireAutoSelect: jetFireAutoSelect,
|
|
115
|
+
timeAveraging: timeAveraging
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
const jetFireCalc = new JetFireCalculation(
|
|
119
|
+
vesselLineRuptureCalc.exitMaterial!,
|
|
120
|
+
vesselLineRuptureCalc.dischargeRecords!,
|
|
121
|
+
vesselLineRuptureCalc.dischargeRecords!.length,
|
|
122
|
+
vesselLineRuptureCalc.dischargeResult!,
|
|
123
|
+
weather,
|
|
124
|
+
substrate,
|
|
125
|
+
flammableParams
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
console.log("Running jetFireCalculation...");
|
|
129
|
+
resultCode = await jetFireCalc.run();
|
|
130
|
+
|
|
131
|
+
if (jetFireCalc.messages.length > 0) {
|
|
132
|
+
console.log("Messages:");
|
|
133
|
+
jetFireCalc.messages.forEach((msg) => console.log(msg));
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
expect(resultCode).toBe(ResultCode.SUCCESS);
|
|
137
|
+
|
|
138
|
+
// Regression checks
|
|
139
|
+
const flameLengthError = Math.abs(
|
|
140
|
+
(jetFireCalc.flameResult!.flameLength! - 96.77758243403922) / 96.77758243403922
|
|
141
|
+
);
|
|
142
|
+
const surfaceEmissivePowerError = Math.abs(
|
|
143
|
+
(jetFireCalc.flameResult!.surfaceEmissivePower! - 350000.0) / 350000.0
|
|
144
|
+
);
|
|
145
|
+
|
|
146
|
+
expect(flameLengthError).toBeLessThan(1e-3);
|
|
147
|
+
expect(surfaceEmissivePowerError).toBeLessThan(1e-3);
|
|
148
|
+
expect(jetFireCalc.flameRecords!.length).toBe(2);
|
|
149
|
+
|
|
150
|
+
console.log(`SUCCESS: jetFireCalculation (${jetFireCalc.calculationElapsedTime}ms)`);
|
|
151
|
+
});
|
|
152
|
+
});
|