@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,194 @@
|
|
|
1
|
+
import { VesselLeakCalculation, VesselStateCalculation } from "../../src/calculations/discharge";
|
|
2
|
+
import { JetFireCalculation } from "../../src/calculations/jetFire";
|
|
3
|
+
import { DistancesAndEllipsesToRadiationLevelsCalculation} from "../../src/calculations/radiation";
|
|
4
|
+
import { Bund, DischargeParameters, FlammableOutputConfig, FlammableParameters, Leak, LocalPosition, Material, MaterialComponent, State, Substrate, Transect, Vessel, Weather } from "../../src/entities";
|
|
5
|
+
import { AtmosphericStabilityClass, Resolution, ResultCode, TimeVaryingOption, VesselShape } from "../../src/enums";
|
|
6
|
+
import { setAccessToken } from "../../src/utilities";
|
|
7
|
+
const accessToken = process.env.PWS_ACCESS_TOKEN;
|
|
8
|
+
|
|
9
|
+
if (!accessToken) {
|
|
10
|
+
throw new Error("ACCESS_TOKEN environment variable is not set.");
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
setAccessToken(accessToken);
|
|
14
|
+
|
|
15
|
+
describe("Test Case 64 - Distances and Ellipses to Radiation Levels Scenario", () => {
|
|
16
|
+
test("should run vessel state, leak, jet fire, and distances/ellipses calculations with regression checks", async () => {
|
|
17
|
+
// Define case properties
|
|
18
|
+
const materialName = "METHANE";
|
|
19
|
+
const stateTemperature = 280.0;
|
|
20
|
+
const statePressure = 1.0e6;
|
|
21
|
+
const vesselShape = VesselShape.VESSEL_SPHERE;
|
|
22
|
+
const vesselDiameter = 3.0;
|
|
23
|
+
const leakHoleDiameter = 0.1;
|
|
24
|
+
const timeVaryingOption = TimeVaryingOption.INITIAL_RATE;
|
|
25
|
+
const leakHoleHeightFraction = 0.5;
|
|
26
|
+
const liquidFillFractionByVolume = 0.0;
|
|
27
|
+
const windSpeed = 2.0;
|
|
28
|
+
const stabilityClass = AtmosphericStabilityClass.STABILITY_F;
|
|
29
|
+
const timeOfInterest = 3600.0;
|
|
30
|
+
const radiationResolution = Resolution.MEDIUM;
|
|
31
|
+
|
|
32
|
+
// Define material and state
|
|
33
|
+
const material = new Material({
|
|
34
|
+
name: materialName,
|
|
35
|
+
components: [new MaterialComponent({ name: materialName, moleFraction: 1.0 })],
|
|
36
|
+
componentCount: 1,
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
const state = new State({
|
|
40
|
+
temperature: stateTemperature,
|
|
41
|
+
pressure: statePressure,
|
|
42
|
+
liquidFraction: 0.0,
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
// Vessel state calculation
|
|
46
|
+
const vesselStateCalc = new VesselStateCalculation(material, state);
|
|
47
|
+
|
|
48
|
+
console.log("Running vessel_state_calculation...");
|
|
49
|
+
const vesselStateResult = await vesselStateCalc.run();
|
|
50
|
+
|
|
51
|
+
if (vesselStateCalc.messages.length > 0) {
|
|
52
|
+
console.log("Messages:");
|
|
53
|
+
vesselStateCalc.messages.forEach((msg) => console.log(msg));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
expect(vesselStateResult).toBe(ResultCode.SUCCESS);
|
|
57
|
+
console.log(`SUCCESS: vessel_state_calculation (${vesselStateCalc.calculationElapsedTime}ms)`);
|
|
58
|
+
|
|
59
|
+
// Define vessel
|
|
60
|
+
const vessel = new Vessel({
|
|
61
|
+
state: vesselStateCalc.outputState!,
|
|
62
|
+
material: vesselStateCalc.material,
|
|
63
|
+
vesselConditions: vesselStateCalc.vesselConditions,
|
|
64
|
+
location: new LocalPosition({ x: 0, y: 0, z: 0 }),
|
|
65
|
+
diameter: vesselDiameter,
|
|
66
|
+
shape: vesselShape,
|
|
67
|
+
liquidFillFractionByVolume: liquidFillFractionByVolume,
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
// Define leak
|
|
71
|
+
const leak = new Leak({
|
|
72
|
+
holeDiameter: leakHoleDiameter,
|
|
73
|
+
holeHeightFraction: leakHoleHeightFraction,
|
|
74
|
+
timeVaryingOption: timeVaryingOption,
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// Vessel leak calculation
|
|
78
|
+
const dischargeParams = new DischargeParameters();
|
|
79
|
+
const vesselLeakCalc = new VesselLeakCalculation(vessel, leak, dischargeParams);
|
|
80
|
+
|
|
81
|
+
console.log("Running vessel_leak_calculation...");
|
|
82
|
+
const leakResult = 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(leakResult).toBe(ResultCode.SUCCESS);
|
|
90
|
+
console.log(`SUCCESS: vessel_leak_calculation (${vesselLeakCalc.calculationElapsedTime}ms)`);
|
|
91
|
+
|
|
92
|
+
// Set up entities for jet fire calculation
|
|
93
|
+
const weather = new Weather({
|
|
94
|
+
windSpeed: windSpeed,
|
|
95
|
+
stabilityClass: stabilityClass,
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
const substrate = new Substrate({
|
|
99
|
+
bund: new Bund({ specifyBund: false }),
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
const flammableParams = new FlammableParameters({
|
|
103
|
+
timeOfInterest: timeOfInterest,
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
// Jet fire calculation
|
|
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 jet_fire_calculation...");
|
|
118
|
+
const jetFireResult = 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(jetFireResult).toBe(ResultCode.SUCCESS);
|
|
126
|
+
console.log(`SUCCESS: jet_fire_calculation (${jetFireCalc.calculationElapsedTime}ms)`);
|
|
127
|
+
|
|
128
|
+
// Flammable output configurations
|
|
129
|
+
const flammableOutputConfigs = [
|
|
130
|
+
new FlammableOutputConfig({
|
|
131
|
+
position: new LocalPosition({ x: 0.0, y: 0.0, z: 0.0 }),
|
|
132
|
+
transect: new Transect({
|
|
133
|
+
transectStartPoint: new LocalPosition({ x: 0.0, y: 0.0, z: 0.0 }),
|
|
134
|
+
transectEndPoint: new LocalPosition({ x: 0.0, y: 0.0, z: 0.0 }),
|
|
135
|
+
}),
|
|
136
|
+
radiationResolution: radiationResolution,
|
|
137
|
+
}),
|
|
138
|
+
new FlammableOutputConfig({
|
|
139
|
+
position: new LocalPosition({ x: 0.0, y: 0.0, z: 1.0 }),
|
|
140
|
+
transect: new Transect({
|
|
141
|
+
transectStartPoint: new LocalPosition({ x: 0.0, y: 0.0, z: 0.0 }),
|
|
142
|
+
transectEndPoint: new LocalPosition({ x: 0.0, y: 0.0, z: 0.0 }),
|
|
143
|
+
}),
|
|
144
|
+
radiationResolution: radiationResolution,
|
|
145
|
+
}),
|
|
146
|
+
new FlammableOutputConfig({
|
|
147
|
+
position: new LocalPosition({ x: 0.0, y: 0.0, z: 2.0 }),
|
|
148
|
+
transect: new Transect({
|
|
149
|
+
transectStartPoint: new LocalPosition({ x: 0.0, y: 0.0, z: 0.0 }),
|
|
150
|
+
transectEndPoint: new LocalPosition({ x: 0.0, y: 0.0, z: 0.0 }),
|
|
151
|
+
}),
|
|
152
|
+
radiationResolution: radiationResolution,
|
|
153
|
+
}),
|
|
154
|
+
];
|
|
155
|
+
|
|
156
|
+
// Distances and ellipses to radiation levels calculation
|
|
157
|
+
const distancesEllipsesCalc = new DistancesAndEllipsesToRadiationLevelsCalculation(
|
|
158
|
+
jetFireCalc.flameResult!,
|
|
159
|
+
jetFireCalc.flameRecords!,
|
|
160
|
+
jetFireCalc.flameRecords!.length,
|
|
161
|
+
weather,
|
|
162
|
+
jetFireCalc.flammableParameters!,
|
|
163
|
+
flammableOutputConfigs,
|
|
164
|
+
flammableOutputConfigs.length
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
console.log("Running distances_and_ellipses_to_radiation_levels_calculation...");
|
|
168
|
+
const distancesEllipsesResult = await distancesEllipsesCalc.run();
|
|
169
|
+
|
|
170
|
+
if (distancesEllipsesCalc.messages.length > 0) {
|
|
171
|
+
console.log("Messages:");
|
|
172
|
+
distancesEllipsesCalc.messages.forEach((msg) => console.log(msg));
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
expect(distancesEllipsesResult).toBe(ResultCode.SUCCESS);
|
|
176
|
+
|
|
177
|
+
// Regression checks
|
|
178
|
+
expect(distancesEllipsesCalc.contourPoints!.length).toBe(150);
|
|
179
|
+
|
|
180
|
+
if (distancesEllipsesCalc.contourPoints!.length > 0) {
|
|
181
|
+
const contourPointError = Math.abs(
|
|
182
|
+
(distancesEllipsesCalc.contourPoints![distancesEllipsesCalc.contourPoints!.length - 1].x - 58.40830479872616) / 58.40830479872616
|
|
183
|
+
);
|
|
184
|
+
expect(contourPointError).toBeLessThan(1e-3);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const areaError = Math.abs(
|
|
188
|
+
(distancesEllipsesCalc.areas![0] - 3563.332415345197) / 3563.332415345197
|
|
189
|
+
);
|
|
190
|
+
expect(areaError).toBeLessThan(1e-3);
|
|
191
|
+
|
|
192
|
+
console.log(`SUCCESS: distances_and_ellipses_to_radiation_levels_calculation (${distancesEllipsesCalc.calculationElapsedTime}ms)`);
|
|
193
|
+
});
|
|
194
|
+
});
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { VesselLeakCalculation, VesselStateCalculation } from "../../src/calculations/discharge";
|
|
2
|
+
import { JetFireCalculation } from "../../src/calculations/jetFire";
|
|
3
|
+
import { DistancesAndEllipsesToRadiationLevelsCalculation } from "../../src/calculations/radiation";
|
|
4
|
+
import { Bund, DischargeParameters, FlammableOutputConfig, FlammableParameters, Leak, LocalPosition, Material, MaterialComponent, State, Substrate, Transect, Vessel, Weather } from "../../src/entities";
|
|
5
|
+
import { AtmosphericStabilityClass, Resolution, ResultCode, TimeVaryingOption, VesselShape } from "../../src/enums";
|
|
6
|
+
import { setAccessToken } from "../../src/utilities";
|
|
7
|
+
const accessToken = process.env.PWS_ACCESS_TOKEN;
|
|
8
|
+
|
|
9
|
+
if (!accessToken) {
|
|
10
|
+
throw new Error("ACCESS_TOKEN environment variable is not set.");
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
setAccessToken(accessToken);
|
|
14
|
+
|
|
15
|
+
describe("Test Case 65 - Distances and Ellipses to Radiation Levels Scenario", () => {
|
|
16
|
+
test("should run vessel state, leak, jet fire, and distances/ellipses calculations with regression checks", async () => {
|
|
17
|
+
// Define case properties
|
|
18
|
+
const materialName = "N-BUTANE";
|
|
19
|
+
const stateTemperature = 220.0;
|
|
20
|
+
const statePressure = 1.0e6;
|
|
21
|
+
const vesselShape = VesselShape.VESSEL_SPHERE;
|
|
22
|
+
const vesselDiameter = 3.0;
|
|
23
|
+
const leakHoleDiameter = 0.1;
|
|
24
|
+
const timeVaryingOption = TimeVaryingOption.INITIAL_RATE;
|
|
25
|
+
const leakHoleHeightFraction = 0.5;
|
|
26
|
+
const liquidFillFractionByVolume = 0.5;
|
|
27
|
+
const windSpeed = 2.0;
|
|
28
|
+
const stabilityClass = AtmosphericStabilityClass.STABILITY_F;
|
|
29
|
+
const timeOfInterest = 2600.0;
|
|
30
|
+
const radiationResolution = Resolution.HIGH;
|
|
31
|
+
|
|
32
|
+
// Define material and state
|
|
33
|
+
const material = new Material({
|
|
34
|
+
name: materialName,
|
|
35
|
+
components: [new MaterialComponent({ name: materialName, moleFraction: 1.0 })],
|
|
36
|
+
componentCount: 1,
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
const state = new State({
|
|
40
|
+
temperature: stateTemperature,
|
|
41
|
+
pressure: statePressure,
|
|
42
|
+
liquidFraction: 0.0,
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
// Vessel state calculation
|
|
46
|
+
const vesselStateCalc = new VesselStateCalculation(material, state);
|
|
47
|
+
|
|
48
|
+
console.log("Running vessel_state_calculation...");
|
|
49
|
+
const vesselStateResult = await vesselStateCalc.run();
|
|
50
|
+
|
|
51
|
+
if (vesselStateCalc.messages.length > 0) {
|
|
52
|
+
console.log("Messages:");
|
|
53
|
+
vesselStateCalc.messages.forEach((msg) => console.log(msg));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
expect(vesselStateResult).toBe(ResultCode.SUCCESS);
|
|
57
|
+
console.log(`SUCCESS: vessel_state_calculation (${vesselStateCalc.calculationElapsedTime}ms)`);
|
|
58
|
+
|
|
59
|
+
// Define vessel
|
|
60
|
+
const vessel = new Vessel({
|
|
61
|
+
state: vesselStateCalc.outputState!,
|
|
62
|
+
material: vesselStateCalc.material,
|
|
63
|
+
vesselConditions: vesselStateCalc.vesselConditions,
|
|
64
|
+
location: new LocalPosition({ x: 0, y: 0, z: 0 }),
|
|
65
|
+
diameter: vesselDiameter,
|
|
66
|
+
shape: vesselShape,
|
|
67
|
+
liquidFillFractionByVolume: liquidFillFractionByVolume,
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
// Define leak
|
|
71
|
+
const leak = new Leak({
|
|
72
|
+
holeDiameter: leakHoleDiameter,
|
|
73
|
+
holeHeightFraction: leakHoleHeightFraction,
|
|
74
|
+
timeVaryingOption: timeVaryingOption,
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// Vessel leak calculation
|
|
78
|
+
const dischargeParams = new DischargeParameters();
|
|
79
|
+
const vesselLeakCalc = new VesselLeakCalculation(vessel, leak, dischargeParams);
|
|
80
|
+
|
|
81
|
+
console.log("Running vessel_leak_calculation...");
|
|
82
|
+
const leakResult = 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(leakResult).toBe(ResultCode.SUCCESS);
|
|
90
|
+
console.log(`SUCCESS: vessel_leak_calculation (${vesselLeakCalc.calculationElapsedTime}ms)`);
|
|
91
|
+
|
|
92
|
+
// Set up entities for jet fire calculation
|
|
93
|
+
const weather = new Weather({
|
|
94
|
+
windSpeed: windSpeed,
|
|
95
|
+
stabilityClass: stabilityClass,
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
const substrate = new Substrate({
|
|
99
|
+
bund: new Bund({ specifyBund: false }),
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
const flammableParams = new FlammableParameters({
|
|
103
|
+
timeOfInterest: timeOfInterest,
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
// Jet fire calculation
|
|
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 jet_fire_calculation...");
|
|
118
|
+
const jetFireResult = 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(jetFireResult).toBe(ResultCode.SUCCESS);
|
|
126
|
+
console.log(`SUCCESS: jet_fire_calculation (${jetFireCalc.calculationElapsedTime}ms)`);
|
|
127
|
+
|
|
128
|
+
// Flammable output configurations
|
|
129
|
+
const flammableOutputConfigs = [
|
|
130
|
+
new FlammableOutputConfig({
|
|
131
|
+
position: new LocalPosition({ x: 0.0, y: 0.0, z: 2.0 }),
|
|
132
|
+
transect: new Transect({
|
|
133
|
+
transectStartPoint: new LocalPosition({ x: 0.0, y: 0.0, z: 0.0 }),
|
|
134
|
+
transectEndPoint: new LocalPosition({ x: 0.0, y: 0.0, z: 0.0 }),
|
|
135
|
+
}),
|
|
136
|
+
radiationResolution: radiationResolution,
|
|
137
|
+
}),
|
|
138
|
+
new FlammableOutputConfig({
|
|
139
|
+
position: new LocalPosition({ x: 0.0, y: 0.0, z: 4.0 }),
|
|
140
|
+
transect: new Transect({
|
|
141
|
+
transectStartPoint: new LocalPosition({ x: 0.0, y: 0.0, z: 0.0 }),
|
|
142
|
+
transectEndPoint: new LocalPosition({ x: 0.0, y: 0.0, z: 0.0 }),
|
|
143
|
+
}),
|
|
144
|
+
radiationResolution: radiationResolution,
|
|
145
|
+
}),
|
|
146
|
+
new FlammableOutputConfig({
|
|
147
|
+
position: new LocalPosition({ x: 0.0, y: 0.0, z: 5.0 }),
|
|
148
|
+
transect: new Transect({
|
|
149
|
+
transectStartPoint: new LocalPosition({ x: 0.0, y: 0.0, z: 0.0 }),
|
|
150
|
+
transectEndPoint: new LocalPosition({ x: 0.0, y: 0.0, z: 0.0 }),
|
|
151
|
+
}),
|
|
152
|
+
radiationResolution: radiationResolution,
|
|
153
|
+
}),
|
|
154
|
+
];
|
|
155
|
+
|
|
156
|
+
// Distances and ellipses to radiation levels calculation
|
|
157
|
+
const distancesEllipsesCalc = new DistancesAndEllipsesToRadiationLevelsCalculation(
|
|
158
|
+
jetFireCalc.flameResult!,
|
|
159
|
+
jetFireCalc.flameRecords!,
|
|
160
|
+
jetFireCalc.flameRecords!.length,
|
|
161
|
+
weather,
|
|
162
|
+
jetFireCalc.flammableParameters!,
|
|
163
|
+
flammableOutputConfigs,
|
|
164
|
+
flammableOutputConfigs.length
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
console.log("Running distances_and_ellipses_to_radiation_levels_calculation...");
|
|
168
|
+
const distancesEllipsesResult = await distancesEllipsesCalc.run();
|
|
169
|
+
|
|
170
|
+
if (distancesEllipsesCalc.messages.length > 0) {
|
|
171
|
+
console.log("Messages:");
|
|
172
|
+
distancesEllipsesCalc.messages.forEach((msg) => console.log(msg));
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
expect(distancesEllipsesResult).toBe(ResultCode.SUCCESS);
|
|
176
|
+
|
|
177
|
+
// Regression checks
|
|
178
|
+
expect(distancesEllipsesCalc.contourPoints!.length).toBe(150);
|
|
179
|
+
|
|
180
|
+
if (distancesEllipsesCalc.contourPoints!.length > 0) {
|
|
181
|
+
const contourPointError = Math.abs(
|
|
182
|
+
(distancesEllipsesCalc.contourPoints![distancesEllipsesCalc.contourPoints!.length - 1].x - 302.89074103021574) /
|
|
183
|
+
302.89074103021574
|
|
184
|
+
);
|
|
185
|
+
expect(contourPointError).toBeLessThan(1e-3);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
const areaError = Math.abs(
|
|
189
|
+
(distancesEllipsesCalc.areas![0] - 118325.3837897791) / 118325.3837897791
|
|
190
|
+
);
|
|
191
|
+
expect(areaError).toBeLessThan(1e-3);
|
|
192
|
+
|
|
193
|
+
console.log(
|
|
194
|
+
`SUCCESS: distances_and_ellipses_to_radiation_levels_calculation (${distancesEllipsesCalc.calculationElapsedTime}ms)`
|
|
195
|
+
);
|
|
196
|
+
});
|
|
197
|
+
});
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { VesselLeakCalculation, VesselStateCalculation } from "../../src/calculations/discharge";
|
|
2
|
+
import { JetFireCalculation } from "../../src/calculations/jetFire";
|
|
3
|
+
import { DistancesAndEllipsesToRadiationLevelsCalculation } from "../../src/calculations/radiation";
|
|
4
|
+
import { Bund, DischargeParameters, FlammableOutputConfig, FlammableParameters, Leak, LocalPosition, Material, MaterialComponent, State, Substrate, Transect, Vessel, Weather } from "../../src/entities";
|
|
5
|
+
import { AtmosphericStabilityClass, Resolution, ResultCode, TimeVaryingOption, VesselShape } from "../../src/enums";
|
|
6
|
+
import { setAccessToken } from "../../src/utilities";
|
|
7
|
+
const accessToken = process.env.PWS_ACCESS_TOKEN;
|
|
8
|
+
|
|
9
|
+
if (!accessToken) {
|
|
10
|
+
throw new Error("ACCESS_TOKEN environment variable is not set.");
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
setAccessToken(accessToken);
|
|
14
|
+
|
|
15
|
+
describe("Test Case 66 - Distances and Ellipses to Radiation Levels Scenario", () => {
|
|
16
|
+
test("should run vessel state, leak, jet fire, and distances/ellipses calculations with regression checks", async () => {
|
|
17
|
+
// Define case properties
|
|
18
|
+
const materialName = "PROPANE";
|
|
19
|
+
const stateTemperature = 290.0;
|
|
20
|
+
const statePressure = 5.0e5;
|
|
21
|
+
const vesselShape = VesselShape.VESSEL_SPHERE;
|
|
22
|
+
const vesselDiameter = 3.0;
|
|
23
|
+
const leakHoleDiameter = 0.1;
|
|
24
|
+
const timeVaryingOption = TimeVaryingOption.INITIAL_RATE;
|
|
25
|
+
const leakHoleHeightFraction = 0.3;
|
|
26
|
+
const liquidFillFractionByVolume = 0.4;
|
|
27
|
+
const windSpeed = 2.0;
|
|
28
|
+
const stabilityClass = AtmosphericStabilityClass.STABILITY_F;
|
|
29
|
+
const timeOfInterest = 2600.0;
|
|
30
|
+
const radiationResolution = Resolution.LOW;
|
|
31
|
+
|
|
32
|
+
// Define material and state
|
|
33
|
+
const material = new Material({
|
|
34
|
+
name: materialName,
|
|
35
|
+
components: [new MaterialComponent({ name: materialName, moleFraction: 1.0 })],
|
|
36
|
+
componentCount: 1,
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
const state = new State({
|
|
40
|
+
temperature: stateTemperature,
|
|
41
|
+
pressure: statePressure,
|
|
42
|
+
liquidFraction: 0.0,
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
// Vessel state calculation
|
|
46
|
+
const vesselStateCalc = new VesselStateCalculation(material, state);
|
|
47
|
+
|
|
48
|
+
console.log("Running vessel_state_calculation...");
|
|
49
|
+
const vesselStateResult = await vesselStateCalc.run();
|
|
50
|
+
|
|
51
|
+
if (vesselStateCalc.messages.length > 0) {
|
|
52
|
+
console.log("Messages:");
|
|
53
|
+
vesselStateCalc.messages.forEach((msg) => console.log(msg));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
expect(vesselStateResult).toBe(ResultCode.SUCCESS);
|
|
57
|
+
console.log(`SUCCESS: vessel_state_calculation (${vesselStateCalc.calculationElapsedTime}ms)`);
|
|
58
|
+
|
|
59
|
+
// Define vessel
|
|
60
|
+
const vessel = new Vessel({
|
|
61
|
+
state: vesselStateCalc.outputState!,
|
|
62
|
+
material: vesselStateCalc.material,
|
|
63
|
+
vesselConditions: vesselStateCalc.vesselConditions,
|
|
64
|
+
location: new LocalPosition({ x: 0, y: 0, z: 0 }),
|
|
65
|
+
diameter: vesselDiameter,
|
|
66
|
+
shape: vesselShape,
|
|
67
|
+
liquidFillFractionByVolume: liquidFillFractionByVolume,
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
// Define leak
|
|
71
|
+
const leak = new Leak({
|
|
72
|
+
holeDiameter: leakHoleDiameter,
|
|
73
|
+
holeHeightFraction: leakHoleHeightFraction,
|
|
74
|
+
timeVaryingOption: timeVaryingOption,
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// Vessel leak calculation
|
|
78
|
+
const dischargeParams = new DischargeParameters();
|
|
79
|
+
const vesselLeakCalc = new VesselLeakCalculation(vessel, leak, dischargeParams);
|
|
80
|
+
|
|
81
|
+
console.log("Running vessel_leak_calculation...");
|
|
82
|
+
const leakResult = 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(leakResult).toBe(ResultCode.SUCCESS);
|
|
90
|
+
console.log(`SUCCESS: vessel_leak_calculation (${vesselLeakCalc.calculationElapsedTime}ms)`);
|
|
91
|
+
|
|
92
|
+
// Set up entities for jet fire calculation
|
|
93
|
+
const weather = new Weather({
|
|
94
|
+
windSpeed: windSpeed,
|
|
95
|
+
stabilityClass: stabilityClass,
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
const substrate = new Substrate({
|
|
99
|
+
bund: new Bund({ specifyBund: false }),
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
const flammableParams = new FlammableParameters({
|
|
103
|
+
timeOfInterest: timeOfInterest,
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
// Jet fire calculation
|
|
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 jet_fire_calculation...");
|
|
118
|
+
const jetFireResult = 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(jetFireResult).toBe(ResultCode.SUCCESS);
|
|
126
|
+
console.log(`SUCCESS: jet_fire_calculation (${jetFireCalc.calculationElapsedTime}ms)`);
|
|
127
|
+
|
|
128
|
+
// Flammable output configurations
|
|
129
|
+
const flammableOutputConfigs = [
|
|
130
|
+
new FlammableOutputConfig({
|
|
131
|
+
position: new LocalPosition({ x: 0.0, y: 0.0, z: 2.0 }),
|
|
132
|
+
transect: new Transect({
|
|
133
|
+
transectStartPoint: new LocalPosition({ x: 0.0, y: 0.0, z: 0.0 }),
|
|
134
|
+
transectEndPoint: new LocalPosition({ x: 0.0, y: 0.0, z: 0.0 }),
|
|
135
|
+
}),
|
|
136
|
+
radiationResolution: radiationResolution,
|
|
137
|
+
}),
|
|
138
|
+
new FlammableOutputConfig({
|
|
139
|
+
position: new LocalPosition({ x: 0.0, y: 0.0, z: 3.0 }),
|
|
140
|
+
transect: new Transect({
|
|
141
|
+
transectStartPoint: new LocalPosition({ x: 0.0, y: 0.0, z: 0.0 }),
|
|
142
|
+
transectEndPoint: new LocalPosition({ x: 0.0, y: 0.0, z: 0.0 }),
|
|
143
|
+
}),
|
|
144
|
+
radiationResolution: radiationResolution,
|
|
145
|
+
}),
|
|
146
|
+
new FlammableOutputConfig({
|
|
147
|
+
position: new LocalPosition({ x: 0.0, y: 0.0, z: 6.0 }),
|
|
148
|
+
transect: new Transect({
|
|
149
|
+
transectStartPoint: new LocalPosition({ x: 0.0, y: 0.0, z: 0.0 }),
|
|
150
|
+
transectEndPoint: new LocalPosition({ x: 0.0, y: 0.0, z: 0.0 }),
|
|
151
|
+
}),
|
|
152
|
+
radiationResolution: radiationResolution,
|
|
153
|
+
}),
|
|
154
|
+
];
|
|
155
|
+
|
|
156
|
+
// Distances and ellipses to radiation levels calculation
|
|
157
|
+
const distancesEllipsesCalc = new DistancesAndEllipsesToRadiationLevelsCalculation(
|
|
158
|
+
jetFireCalc.flameResult!,
|
|
159
|
+
jetFireCalc.flameRecords!,
|
|
160
|
+
jetFireCalc.flameRecords!.length,
|
|
161
|
+
weather,
|
|
162
|
+
jetFireCalc.flammableParameters!,
|
|
163
|
+
flammableOutputConfigs,
|
|
164
|
+
flammableOutputConfigs.length
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
console.log("Running distances_and_ellipses_to_radiation_levels_calculation...");
|
|
168
|
+
const distancesEllipsesResult = await distancesEllipsesCalc.run();
|
|
169
|
+
|
|
170
|
+
if (distancesEllipsesCalc.messages.length > 0) {
|
|
171
|
+
console.log("Messages:");
|
|
172
|
+
distancesEllipsesCalc.messages.forEach((msg) => console.log(msg));
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
expect(distancesEllipsesResult).toBe(ResultCode.SUCCESS);
|
|
176
|
+
|
|
177
|
+
// Regression checks
|
|
178
|
+
expect(distancesEllipsesCalc.contourPoints!.length).toBe(150);
|
|
179
|
+
|
|
180
|
+
if (distancesEllipsesCalc.contourPoints!.length > 0) {
|
|
181
|
+
const contourPointError = Math.abs(
|
|
182
|
+
(distancesEllipsesCalc.contourPoints![distancesEllipsesCalc.contourPoints!.length - 1].x - 54.11820446994824) / 54.11820446994824
|
|
183
|
+
);
|
|
184
|
+
expect(contourPointError).toBeLessThan(1e-3);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const areaError = Math.abs(
|
|
188
|
+
(distancesEllipsesCalc.areas![0] - 3641.2004589975213) / 3641.2004589975213
|
|
189
|
+
);
|
|
190
|
+
expect(areaError).toBeLessThan(1e-3);
|
|
191
|
+
|
|
192
|
+
console.log(`SUCCESS: distances_and_ellipses_to_radiation_levels_calculation (${distancesEllipsesCalc.calculationElapsedTime}ms)`);
|
|
193
|
+
});
|
|
194
|
+
});
|