@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.
Files changed (215) hide show
  1. package/index.ts +2 -2
  2. package/jest.config.js +5 -0
  3. package/package.json +6 -6
  4. package/src/calculations/applicationTools.ts +2 -2
  5. package/src/calculations/discharge.ts +2 -2
  6. package/src/calculations/dispersion.ts +2 -2
  7. package/src/calculations/dispersionView.ts +2 -2
  8. package/src/calculations/fireball.ts +2 -2
  9. package/src/calculations/jetFire.ts +2 -2
  10. package/src/calculations/lateExplosion.ts +2 -2
  11. package/src/calculations/linkedRunners.ts +2 -2
  12. package/src/calculations/poolFire.ts +2 -2
  13. package/src/calculations/properties.ts +2 -2
  14. package/src/calculations/radiation.ts +2 -2
  15. package/src/calculations/standalones.ts +2 -2
  16. package/src/calculations/toxics.ts +2 -2
  17. package/src/calculations/utilities.ts +2 -2
  18. package/src/constants.ts +2 -2
  19. package/src/entities.ts +2 -2
  20. package/src/entity-schemas.ts +2 -2
  21. package/src/enums.ts +2 -2
  22. package/src/materials.ts +14 -14
  23. package/src/utilities.ts +2 -2
  24. package/tests/concentration-at-point-calculation/testCase116.test.ts +146 -0
  25. package/tests/concentration-at-point-calculation/testCase117.test.ts +142 -0
  26. package/tests/concentration-at-point-calculation/testCase118.test.ts +143 -0
  27. package/tests/concentration-at-point-calculation/testCase119.test.ts +149 -0
  28. package/tests/concentration-at-point-calculation/testCase120.test.ts +155 -0
  29. package/tests/constants/testConstants.test.ts +23 -0
  30. package/tests/convert-comp-mass-to-mole-calculation/testCase129.test.ts +74 -0
  31. package/tests/convert-comp-mass-to-mole-calculation/testCase130.test.ts +73 -0
  32. package/tests/convert-comp-mass-to-mole-calculation/testCase131.test.ts +73 -0
  33. package/tests/convert-comp-mass-to-mole-calculation/testCase132.test.ts +73 -0
  34. package/tests/convert-comp-mass-to-mole-calculation/testCase133.test.ts +73 -0
  35. package/tests/convert-comp-mole-to-mass-calculation/testCase134.test.ts +72 -0
  36. package/tests/convert-comp-mole-to-mass-calculation/testCase135.test.ts +72 -0
  37. package/tests/convert-comp-mole-to-mass-calculation/testCase136.test.ts +72 -0
  38. package/tests/convert-comp-mole-to-mass-calculation/testCase137.test.ts +72 -0
  39. package/tests/convert-comp-mole-to-mass-calculation/testCase138.test.ts +72 -0
  40. package/tests/distances-and-ellipses-to-radiation-levels-calculation/testCase64.test.ts +194 -0
  41. package/tests/distances-and-ellipses-to-radiation-levels-calculation/testCase65.test.ts +197 -0
  42. package/tests/distances-and-ellipses-to-radiation-levels-calculation/testCase66.test.ts +194 -0
  43. package/tests/distances-and-ellipses-to-radiation-levels-calculation/testCase67.test.ts +198 -0
  44. package/tests/distances-and-ellipses-to-radiation-levels-calculation/testCase68.test.ts +178 -0
  45. package/tests/distances-and-footprints-to-concentration-levels-calculation/testCase31a.test.ts +158 -0
  46. package/tests/distances-and-footprints-to-concentration-levels-calculation/testCase32a.test.ts +156 -0
  47. package/tests/distances-and-footprints-to-concentration-levels-calculation/testCase33a.test.ts +158 -0
  48. package/tests/distances-and-footprints-to-concentration-levels-calculation/testCase34a.test.ts +165 -0
  49. package/tests/distances-and-footprints-to-concentration-levels-calculation/testCase35a.test.ts +188 -0
  50. package/tests/distances-to-conc-levels-calculation/testCase121.test.ts +149 -0
  51. package/tests/distances-to-conc-levels-calculation/testCase122.test.ts +145 -0
  52. package/tests/distances-to-conc-levels-calculation/testCase123.test.ts +150 -0
  53. package/tests/distances-to-conc-levels-calculation/testCase124.test.ts +154 -0
  54. package/tests/distances-to-conc-levels-calculation/testCase125.test.ts +157 -0
  55. package/tests/entities/testVessel.test.ts +49 -0
  56. package/tests/fireball-calculation/testCase89.test.ts +151 -0
  57. package/tests/fireball-calculation/testCase90.test.ts +153 -0
  58. package/tests/fireball-calculation/testCase91.test.ts +152 -0
  59. package/tests/fireball-calculation/testCse92.test.ts +150 -0
  60. package/tests/flash-calculation/testCase26.test.ts +71 -0
  61. package/tests/flash-calculation/testCase27.test.ts +69 -0
  62. package/tests/flash-calculation/testCase28.test.ts +69 -0
  63. package/tests/flash-calculation/testCase29.test.ts +67 -0
  64. package/tests/flash-calculation/testCase30.test.ts +70 -0
  65. package/tests/general/operation-id-demo.test.ts +64 -0
  66. package/tests/get-component-by-id/get-component-by-id-METHANE.test.ts +35 -0
  67. package/tests/get-mass-from-vessel-calculation/testCase139.test.ts +65 -0
  68. package/tests/jet-fire-calculation/testCase36.test.ts +141 -0
  69. package/tests/jet-fire-calculation/testCase37.test.ts +148 -0
  70. package/tests/jet-fire-calculation/testCase38.test.ts +147 -0
  71. package/tests/jet-fire-calculation/testCase39.test.ts +146 -0
  72. package/tests/jet-fire-calculation/testCase40.test.ts +152 -0
  73. package/tests/late-explosion-calculation/testCase46.test.ts +157 -0
  74. package/tests/late-explosion-calculation/testCase47.test.ts +149 -0
  75. package/tests/late-explosion-calculation/testCase48.test.ts +176 -0
  76. package/tests/late-explosion-calculation/testCase49.test.ts +178 -0
  77. package/tests/late-explosion-calculation/testCase50.test.ts +176 -0
  78. package/tests/late-explosion-calculation/testCase74.test.ts +166 -0
  79. package/tests/late-explosion-calculation/testCase75.test.ts +163 -0
  80. package/tests/late-explosion-calculation/testCase76.test.ts +174 -0
  81. package/tests/late-explosion-calculation/testCase77.test.ts +175 -0
  82. package/tests/late-explosion-calculation/testCase78.test.ts +175 -0
  83. package/tests/lethality-distance-calculation/testCase60.test.ts +142 -0
  84. package/tests/linked-runners/user-defined-source-linked-run/test-uds-153.test.ts +121 -0
  85. package/tests/linked-runners/user-defined-source-linked-run/test-uds-154.test.ts +167 -0
  86. package/tests/linked-runners/user-defined-source-linked-run/test-uds-155.test.ts +202 -0
  87. package/tests/linked-runners/user-defined-source-linked-run/test-uds-156.test.ts +201 -0
  88. package/tests/linked-runners/vessel-leak-linked-run/test-vl-157.test.ts +182 -0
  89. package/tests/linked-runners/vessel-leak-linked-run/test-vl-158.test.ts +200 -0
  90. package/tests/linked-runners/vessel-leak-linked-run/test-vl-159.test.ts +158 -0
  91. package/tests/linked-runners/vessel-leak-linked-run/test-vl-160.test.ts +165 -0
  92. package/tests/linked-runners/vessel-line-rupture-linked-run/test-vlr-161.test.ts +161 -0
  93. package/tests/linked-runners/vessel-line-rupture-linked-run/test-vlr-162.test.ts +167 -0
  94. package/tests/linked-runners/vessel-line-rupture-linked-run/test-vlr-163.test.ts +177 -0
  95. package/tests/linked-runners/vessel-line-rupture-linked-run/test-vlr-164.test.ts +165 -0
  96. package/tests/linked-runners/vessel-relief-valve-linked-run/test-vrv-165.test.ts +166 -0
  97. package/tests/linked-runners/vessel-relief-valve-linked-run/test-vrv-166.test.ts +154 -0
  98. package/tests/linked-runners/vessel-relief-valve-linked-run/test-vrv-167.test.ts +157 -0
  99. package/tests/linked-runners/vessel-relief-valve-linked-run/test-vrv-168.test.ts +168 -0
  100. package/tests/load-mass-inventory-vessel-for-line-rupture-scenario-calculation/testCase126.test.ts +72 -0
  101. package/tests/load-mass-inventory-vessel-for-line-rupture-scenario-calculation/testCase127.test.ts +73 -0
  102. package/tests/load-mass-inventory-vessel-for-line-rupture-scenario-calculation/testCase128.test.ts +72 -0
  103. package/tests/load-mass-inventory-vessel-for-relief-valve-scenario-calculation/testCase103.test.ts +74 -0
  104. package/tests/load-mass-inventory-vessel-for-relief-valve-scenario-calculation/testCase104.test.ts +75 -0
  105. package/tests/load-mass-inventory-vessel-for-relief-valve-scenario-calculation/testCase105.test.ts +74 -0
  106. package/tests/long-pipe-calculation/testCase55.test.ts +88 -0
  107. package/tests/long-pipe-calculation/testCase56.test.ts +90 -0
  108. package/tests/long-pipe-calculation/testCase57.test.ts +88 -0
  109. package/tests/long-pipe-calculation/testCase58.test.ts +88 -0
  110. package/tests/long-pipe-calculation/testCase59.test.ts +88 -0
  111. package/tests/materials/test-get-component-by-cas-id-1-2-PROPYLENE-OXIDE.test.ts +23 -0
  112. package/tests/materials/test-get-component-by-cas-id-CARBON-MONOXIDE.test.ts +25 -0
  113. package/tests/materials/test-get-component-by-cas-id-METHANE.test.ts +22 -0
  114. package/tests/materials/test-get-component-by-id-1-2-PROPYLENE-OXIDE.test.ts +23 -0
  115. package/tests/materials/test-get-component-by-id-CARBON-MONOXIDE.test.ts +22 -0
  116. package/tests/materials/test-get-component-by-id-METHANE.test.ts +22 -0
  117. package/tests/materials/test-get-component-by-name-1-2-PROPYLENE-OXIDE.test.ts +24 -0
  118. package/tests/materials/test-get-component-by-name-CARBON-MONOXIDE.test.ts +23 -0
  119. package/tests/materials/test-get-component-by-name-METHANE.test.ts +25 -0
  120. package/tests/materials/test-get-components.test.ts +47 -0
  121. package/tests/materials/test-get-dippr-components.test.ts +28 -0
  122. package/tests/materials/test-get-dnv-components.test.ts +28 -0
  123. package/tests/materials/test-get-material-by-cas-id-1-2-PROPYLENE-OXIDE.test.ts +29 -0
  124. package/tests/materials/test-get-material-by-cas-id-CARBON-MONOXIDE.test.ts +31 -0
  125. package/tests/materials/test-get-material-by-cas-id-METHANE.test.ts +30 -0
  126. package/tests/materials/test-get-material-by-cas-id-ZERO.test.ts +31 -0
  127. package/tests/materials/test-get-material-by-id-1-2-PROPYLENE-OXIDE.test.ts +30 -0
  128. package/tests/materials/test-get-material-by-id-CARBON-MONOXIDE.test.ts +29 -0
  129. package/tests/materials/test-get-material-by-id-METHANE.test.ts +29 -0
  130. package/tests/materials/test-get-material-by-name-1-2-PROPYLENE-OXIDE.test.ts +29 -0
  131. package/tests/materials/test-get-material-by-name-CARBON-MONOXIDE.test.ts +29 -0
  132. package/tests/materials/test-get-material-by-name-METHANE.test.ts +29 -0
  133. package/tests/materials/test-get-materials.test.ts +32 -0
  134. package/tests/max-conc-distance-calculation/testCase106.test.ts +146 -0
  135. package/tests/max-conc-distance-calculation/testCase107.test.ts +148 -0
  136. package/tests/max-conc-distance-calculation/testCase108.test.ts +172 -0
  137. package/tests/max-conc-distance-calculation/testCase109.test.ts +146 -0
  138. package/tests/max-conc-distance-calculation/testCase110.test.ts +146 -0
  139. package/tests/max-conc-footprint-calculation/testCase31.test.ts +169 -0
  140. package/tests/max-conc-footprint-calculation/testCase32.test.ts +183 -0
  141. package/tests/max-conc-footprint-calculation/testCase33.test.ts +161 -0
  142. package/tests/max-conc-footprint-calculation/testCase34.test.ts +172 -0
  143. package/tests/max-conc-footprint-calculation/testCase35.test.ts +188 -0
  144. package/tests/max-distance-to-conc-calculation/testCase111.test.ts +138 -0
  145. package/tests/max-distance-to-conc-calculation/testCase112.test.ts +174 -0
  146. package/tests/max-distance-to-conc-calculation/testCase113.test.ts +153 -0
  147. package/tests/max-distance-to-conc-calculation/testCase114.test.ts +162 -0
  148. package/tests/max-distance-to-conc-calculation/testCase115.test.ts +167 -0
  149. package/tests/mixture-constant-properties-calculation/testCase97.test.ts +83 -0
  150. package/tests/mixture-constant-properties-calculation/testCase98.test.ts +90 -0
  151. package/tests/mixture-constant-properties-calculation/testCase99.test.ts +87 -0
  152. package/tests/pool-fire-calculation/testCase41.test.ts +153 -0
  153. package/tests/pool-fire-calculation/testCase41a.test.ts +141 -0
  154. package/tests/pool-fire-calculation/testCase42.test.ts +169 -0
  155. package/tests/pool-fire-calculation/testCase42a.test.ts +175 -0
  156. package/tests/pool-fire-calculation/testCase43.test.ts +161 -0
  157. package/tests/pool-fire-calculation/testCase43a.test.ts +157 -0
  158. package/tests/pool-fire-calculation/testCase44.test.ts +147 -0
  159. package/tests/pool-fire-calculation/testCase44a.test.ts +152 -0
  160. package/tests/pool-fire-calculation/testCase45.test.ts +176 -0
  161. package/tests/pool-fire-calculation/testCase45a.test.ts +182 -0
  162. package/tests/radiation-at-ponts/testCase69.test.ts +167 -0
  163. package/tests/radiation-at-ponts/testCase70.test.ts +179 -0
  164. package/tests/radiation-at-ponts/testCase71.test.ts +150 -0
  165. package/tests/radiation-at-ponts/testCase72.test.ts +166 -0
  166. package/tests/radiation-at-ponts/testCase73.test.ts +169 -0
  167. package/tests/radiation-contour-calculation/testCase51.test.ts +127 -0
  168. package/tests/radiation-contour-calculation/testCase52.test.ts +126 -0
  169. package/tests/radiation-contour-calculation/testCase53.test.ts +126 -0
  170. package/tests/radiation-contour-calculation/testCase54.test.ts +131 -0
  171. package/tests/relief-valve-min-temperature-calculation/testCase140.test.ts +49 -0
  172. package/tests/set-mixing-layer-height/testCase100.test.ts +36 -0
  173. package/tests/set-mixing-layer-height/testCase101.test.ts +36 -0
  174. package/tests/set-mixing-layer-height/testCase102.test.ts +36 -0
  175. package/tests/set-phase-to-be-released-for-leak-calculation/testCase150.test.ts +67 -0
  176. package/tests/set-phase-to-be-released-for-line-rupture-calculation/testCase151.test.ts +67 -0
  177. package/tests/set-phase-to-be-released-for-relief-valve-calculation/TestCase152.test.ts +61 -0
  178. package/tests/sideview/testCase31b.test.ts +150 -0
  179. package/tests/sideview/testCase32b.test.ts +145 -0
  180. package/tests/sideview/testCase33b.test.ts +130 -0
  181. package/tests/sideview/testCase34b.test.ts +153 -0
  182. package/tests/sideview/testCase35b.test.ts +140 -0
  183. package/tests/tank-fire-calculation/testCase79.test.ts +61 -0
  184. package/tests/tank-fire-calculation/testCase80.test.ts +67 -0
  185. package/tests/tank-fire-calculation/testCase81.test.ts +68 -0
  186. package/tests/tank-fire-calculation/testCase82.test.ts +68 -0
  187. package/tests/tank-fire-calculation/testCase83.test.ts +73 -0
  188. package/tests/utilities/convert-camel-case-to-snake-case.test.ts +7 -0
  189. package/tests/utilities/convert-snake-case-to-camel-case.test.ts +7 -0
  190. package/tests/vessel-catastrophic-rupture-calculation/testCase1.test.ts +83 -0
  191. package/tests/vessel-catastrophic-rupture-calculation/testCase2.test.ts +82 -0
  192. package/tests/vessel-catastrophic-rupture-calculation/testCase3.test.ts +91 -0
  193. package/tests/vessel-catastrophic-rupture-calculation/testCase4.test.ts +85 -0
  194. package/tests/vessel-catastrophic-rupture-calculation/testCase5.test.ts +84 -0
  195. package/tests/vessel-leak-calculation/testCase10.test.ts +108 -0
  196. package/tests/vessel-leak-calculation/testCase6.test.ts +113 -0
  197. package/tests/vessel-leak-calculation/testCase7.test.ts +123 -0
  198. package/tests/vessel-leak-calculation/testCase8.test.ts +102 -0
  199. package/tests/vessel-leak-calculation/testCase9.test.ts +106 -0
  200. package/tests/vessel-line-rupture-calculation/vlr-ammonia.test.ts +84 -0
  201. package/tests/vessel-line-rupture-calculation/vlr-ethaneMethane.test.ts +82 -0
  202. package/tests/vessel-line-rupture-calculation/vlr-nDecane.test.ts +79 -0
  203. package/tests/vessel-line-rupture-calculation/vlr-oxygen.test.ts +77 -0
  204. package/tests/vessel-line-rupture-calculation/vlr-propane.test.ts +77 -0
  205. package/tests/vessel-relief-valve-calculation/vrv-chlorine.test.ts +99 -0
  206. package/tests/vessel-relief-valve-calculation/vrv-hydrogen.test.ts +96 -0
  207. package/tests/vessel-relief-valve-calculation/vrv-methane.test.ts +80 -0
  208. package/tests/vessel-relief-valve-calculation/vrv-methaneH2s.test.ts +86 -0
  209. package/tests/vessel-relief-valve-calculation/vrv-nitrogen.test.ts +80 -0
  210. package/tests/vessel-state-calculation/vs-ammonia.test.ts +56 -0
  211. package/tests/vessel-state-calculation/vs-butane.test.ts +57 -0
  212. package/tests/vessel-state-calculation/vs-chlorine.test.ts +56 -0
  213. package/tests/vessel-state-calculation/vs-methane.test.ts +57 -0
  214. package/tests/vessel-state-calculation/vs-naturalGas.test.ts +59 -0
  215. package/tests/vessel-state-calculation/vs-nitrogenPentane.test.ts +58 -0
@@ -0,0 +1,77 @@
1
+ import { VesselLineRuptureCalculation, VesselStateCalculation } from "../../src/calculations/discharge";
2
+ import { Material, MaterialComponent, State, Vessel, LineRupture, DischargeParameters } from "../../src/entities";
3
+ import { ResultCode, 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
+ describe("Test Case - VLR PROPANE", () => {
13
+ test("Vessel line rupture calculation for PROPANE", async () => {
14
+ // Define the initial state of the vessel
15
+ const state = new State({
16
+ temperature: 250.0,
17
+ pressure: 3.0e5,
18
+ liquidFraction: 1.0
19
+ });
20
+
21
+ // Define the material contained by the vessel
22
+ const material = new Material({
23
+ name: "PROPANE",
24
+ components: [
25
+ new MaterialComponent({ name: "PROPANE", moleFraction: 1.0 })
26
+ ]
27
+ });
28
+
29
+ // Run the vessel state calculation
30
+ const vesselStateCalculation = new VesselStateCalculation(material, state);
31
+ const vesselStateResultCode = await vesselStateCalculation.run();
32
+
33
+ expect(vesselStateResultCode).toBe(ResultCode.SUCCESS);
34
+ console.log(`SUCCESS: vessel_state_calculation (${vesselStateCalculation.calculationElapsedTime}ms)`);
35
+
36
+ // Define the vessel (horizontal cylinder: 2m diameter, 5m length)
37
+ const vessel = new Vessel({
38
+ state: state,
39
+ material: material,
40
+ vesselConditions: vesselStateCalculation.vesselConditions,
41
+ liquidFillFractionByVolume: 0.7,
42
+ shape: VesselShape.HORIZONTAL_CYLINDER,
43
+ diameter: 2,
44
+ length: 5
45
+ });
46
+
47
+ // Define the line rupture (0.1m diameter, 5m length, height fraction 0.3)
48
+ const lineRupture = new LineRupture({
49
+ pipeDiameter: 0.1,
50
+ pipeLength: 5.0,
51
+ pipeHeightFraction: 0.3
52
+ });
53
+
54
+ // Run the vessel line rupture calculation
55
+ const vesselLineRuptureCalculation = new VesselLineRuptureCalculation(vessel, lineRupture, new DischargeParameters());
56
+ const resultCode = await vesselLineRuptureCalculation.run();
57
+
58
+ expect(resultCode).toBe(ResultCode.SUCCESS);
59
+
60
+ if (vesselLineRuptureCalculation.messages.length > 0) {
61
+ console.log("Messages:");
62
+ vesselLineRuptureCalculation.messages.forEach(msg => console.log(msg));
63
+ }
64
+
65
+ const dischargeRecords = vesselLineRuptureCalculation.dischargeRecords!;
66
+ const dischargeResult = vesselLineRuptureCalculation.dischargeResult!;
67
+
68
+ expect(dischargeRecords.length).toBe(2);
69
+ expect(Math.abs((dischargeRecords[0].massFlow! - 67.02362285598161) / 67.02362285598161)).toBeLessThan(1e-3);
70
+ expect(Math.abs((dischargeRecords[0].finalState.temperature! - 231.07970451768477) / 231.07970451768477)).toBeLessThan(1e-3);
71
+ expect(Math.abs((dischargeRecords[0].finalVelocity! - 63.51263298624852) / 63.51263298624852)).toBeLessThan(1e-3);
72
+ expect(Math.abs((dischargeResult.releaseMass! - 6149.058906744638) / 6149.058906744638)).toBeLessThan(1e-3);
73
+
74
+ console.log(`vessel_line_rupture_calculation.discharge_result.release_mass: ${dischargeResult.releaseMass} [kg]`);
75
+ console.log(`SUCCESS: vessel_line_rupture_calculation (${vesselLineRuptureCalculation.calculationElapsedTime}ms)`);
76
+ });
77
+ });
@@ -0,0 +1,99 @@
1
+ import { VesselReliefValveCalculation, VesselStateCalculation } from "../../src/calculations/discharge";
2
+ import { DischargeParameters, Material, MaterialComponent, ReliefValve, State, Vessel} from "../../src/entities";
3
+ import { ResultCode, VesselShape } from "../../src/enums";
4
+
5
+ import { setAccessToken } from "../../src/utilities";
6
+
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('Vessel Relief Valve Calculation - Chlorine', () => {
16
+ test('Vessel relief valve calculation for Chlorine', async () => {
17
+ // Set the case properties
18
+ const materialName = 'CHLORINE';
19
+ const stateTemperature = 320.0;
20
+ const statePressure = 1.0E+06;
21
+ const liquidFraction = 1.0;
22
+ const vesselShape = VesselShape.HORIZONTAL_CYLINDER;
23
+ const vesselDiameter = 2.0;
24
+ const vesselLength = 5.0;
25
+ const reliefValvePipeDiameter = 0.02;
26
+ const reliefValvePipeLength = 10.0;
27
+ const reliefValveConstrictionDiameter = 0.02;
28
+
29
+ // Define the initial state of the vessel
30
+ const state = new State({
31
+ temperature: stateTemperature,
32
+ pressure: statePressure,
33
+ liquidFraction: liquidFraction
34
+ });
35
+
36
+ // Define the material contained by the vessel
37
+ const material = new Material({
38
+ name: materialName,
39
+ components: [
40
+ new MaterialComponent({ name: materialName, moleFraction: 1.0 })
41
+ ]
42
+ });
43
+
44
+ // Create a vessel state calculation using the material and state
45
+ const vesselStateCalculation = new VesselStateCalculation(material, state);
46
+ const vesselStateResultCode = await vesselStateCalculation.run();
47
+
48
+ // Check vessel state calculation result
49
+ expect(vesselStateResultCode).toBe(ResultCode.SUCCESS);
50
+
51
+ // Create a vessel using the calculated state and material
52
+ const vessel = new Vessel({
53
+ state: vesselStateCalculation.outputState!,
54
+ material: vesselStateCalculation.material,
55
+ liquidFillFractionByVolume: 0.7,
56
+ shape: vesselShape,
57
+ diameter: vesselDiameter,
58
+ length: vesselLength,
59
+ vesselConditions: vesselStateCalculation.vesselConditions
60
+ });
61
+
62
+ // Create a relief valve to use in the vessel relief valve calculation
63
+ const reliefValve = new ReliefValve({
64
+ pipeDiameter: reliefValvePipeDiameter,
65
+ pipeLength: reliefValvePipeLength,
66
+ pipeHeightFraction: 1.0,
67
+ reliefValveConstrictionDiameter: reliefValveConstrictionDiameter
68
+ });
69
+
70
+ // Create a vessel relief valve calculation
71
+ const dischargeParameters = new DischargeParameters();
72
+ const vesselReliefValveCalculation = new VesselReliefValveCalculation(
73
+ vessel,
74
+ reliefValve,
75
+ dischargeParameters
76
+ );
77
+
78
+ // Run the vessel relief valve calculation
79
+ const vesselReliefValveResultCode = await vesselReliefValveCalculation.run();
80
+
81
+ // Check vessel relief valve calculation result
82
+ expect(vesselReliefValveResultCode).toBe(ResultCode.SUCCESS);
83
+
84
+ // Regression tests for discharge results
85
+ const expectedReleaseMass = 466.32195097490285;
86
+ const actualReleaseMass = vesselReliefValveCalculation.dischargeResult?.releaseMass ?? 0;
87
+ expect(Math.abs((actualReleaseMass - expectedReleaseMass) / expectedReleaseMass)).toBeLessThan(1e-3);
88
+
89
+ // Regression tests for discharge records
90
+ const dischargeRecords = vesselReliefValveCalculation.dischargeRecords!;
91
+ expect(dischargeRecords).toBeDefined();
92
+ expect(dischargeRecords.length).toBe(2);
93
+
94
+ expect(Math.abs((dischargeRecords[1].time! - 1075.2115493324122) / 1075.2115493324122)).toBeLessThan(1e-3);
95
+ expect(Math.abs((dischargeRecords[0].massFlow! - 0.43370251302121643) / 0.43370251302121643)).toBeLessThan(1e-3);
96
+ expect(Math.abs((dischargeRecords[0].orificeState.pressure! - 217541.03350332877) / 217541.03350332877)).toBeLessThan(1e-3);
97
+ expect(Math.abs((dischargeRecords[0].finalVelocity! - 276.4442859277149) / 276.4442859277149)).toBeLessThan(1e-3);
98
+ });
99
+ });
@@ -0,0 +1,96 @@
1
+ import { VesselReliefValveCalculation, VesselStateCalculation } from "../../src/calculations/discharge";
2
+ import { DischargeParameters, Material, MaterialComponent, ReliefValve, State, Vessel } from "../../src/entities";
3
+ import { ResultCode, VesselShape } from "../../src/enums";
4
+
5
+ import { setAccessToken } from "../../src/utilities";
6
+
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
+ describe('Vessel Relief Valve Calculation - Hydrogen', () => {
15
+ test('Vessel relief valve calculation for Hydrogen', async () => {
16
+ // Set the case properties
17
+ const materialName = 'HYDROGEN';
18
+ const stateTemperature = 270.0;
19
+ const statePressure = 8e6;
20
+ const liquidFraction = 1.0;
21
+ const vesselShape = VesselShape.VESSEL_SPHERE;
22
+ const vesselDiameter = 5.0;
23
+ const reliefValvePipeDiameter = 0.5;
24
+ const reliefValvePipeLength = 1.0;
25
+ const reliefValveConstrictionDiameter = 0.25;
26
+
27
+ // Define the initial state of the vessel
28
+ const state = new State({
29
+ temperature: stateTemperature,
30
+ pressure: statePressure,
31
+ liquidFraction: liquidFraction
32
+ });
33
+
34
+ // Define the material contained by the vessel
35
+ const material = new Material({
36
+ name: materialName,
37
+ components: [
38
+ new MaterialComponent({ name: materialName, moleFraction: 1.0 })
39
+ ]
40
+ });
41
+
42
+ // Create a vessel state calculation using the material and state
43
+ const vesselStateCalculation = new VesselStateCalculation(material, state);
44
+ const vesselStateResultCode = await vesselStateCalculation.run();
45
+
46
+ // Check vessel state calculation result
47
+ expect(vesselStateResultCode).toBe(ResultCode.SUCCESS);
48
+
49
+ // Create a vessel using the calculated state and material
50
+ const vessel = new Vessel({
51
+ state: vesselStateCalculation.outputState!,
52
+ material: vesselStateCalculation.material,
53
+ liquidFillFractionByVolume: 0.7,
54
+ shape: vesselShape,
55
+ diameter: vesselDiameter,
56
+ vesselConditions: vesselStateCalculation.vesselConditions
57
+ });
58
+
59
+ // Create a relief valve to use in the vessel relief valve calculation
60
+ const reliefValve = new ReliefValve({
61
+ pipeDiameter: reliefValvePipeDiameter,
62
+ pipeLength: reliefValvePipeLength,
63
+ pipeHeightFraction: 1.0,
64
+ reliefValveConstrictionDiameter: reliefValveConstrictionDiameter
65
+ });
66
+
67
+ // Create a vessel relief valve calculation
68
+ const dischargeParameters = new DischargeParameters();
69
+ const vesselReliefValveCalculation = new VesselReliefValveCalculation(
70
+ vessel,
71
+ reliefValve,
72
+ dischargeParameters
73
+ );
74
+
75
+ // Run the vessel relief valve calculation
76
+ const vesselReliefValveResultCode = await vesselReliefValveCalculation.run();
77
+
78
+ // Check vessel relief valve calculation result
79
+ expect(vesselReliefValveResultCode).toBe(ResultCode.SUCCESS);
80
+
81
+ // Regression tests for discharge results
82
+ const expectedReleaseMass = 442.9319348311668;
83
+ const actualReleaseMass = vesselReliefValveCalculation.dischargeResult?.releaseMass ?? 0;
84
+ expect(Math.abs((actualReleaseMass - expectedReleaseMass) / expectedReleaseMass)).toBeLessThan(1e-3);
85
+
86
+ // Regression tests for discharge records
87
+ const dischargeRecords = vesselReliefValveCalculation.dischargeRecords!;
88
+ expect(dischargeRecords).toBeDefined();
89
+ expect(dischargeRecords.length).toBe(2);
90
+
91
+ expect(Math.abs((dischargeRecords[1].time! - 1.6933094303236609) / 1.6933094303236609)).toBeLessThan(1e-3);
92
+ expect(Math.abs((dischargeRecords[0].massFlow! - 261.5776696799618) / 261.5776696799618)).toBeLessThan(1e-3);
93
+ expect(Math.abs((dischargeRecords[0].orificeState.pressure! - 1453253.4181444559) / 1453253.4181444559)).toBeLessThan(1e-3);
94
+ expect(Math.abs((dischargeRecords[0].finalVelocity! - 1947.6881413918381) / 1947.6881413918381)).toBeLessThan(1e-3);
95
+ });
96
+ });
@@ -0,0 +1,80 @@
1
+ import { VesselReliefValveCalculation, VesselStateCalculation } from "../../src/calculations/discharge";
2
+ import { DischargeParameters, Material, MaterialComponent, ReliefValve, State, Vessel } from "../../src/entities";
3
+ import { ResultCode, VesselShape } from "../../src/enums";
4
+
5
+ import { setAccessToken } from "../../src/utilities";
6
+
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('Vessel Relief Valve Calculation - Methane', () => {
16
+ test('Vessel relief valve calculation for Methane', async () => {
17
+ // Define the initial state of the vessel
18
+ const state = new State({ temperature: 240.0, pressure: 5e6, liquidFraction: 1.0 });
19
+
20
+ // Define the material contained by the vessel
21
+ const material = new Material({
22
+ name: "METHANE",
23
+ components: [new MaterialComponent({ name: "METHANE", moleFraction: 1.0 })]
24
+ });
25
+
26
+ // Create a vessel state calculation using the material and state
27
+ const vesselStateCalculation = new VesselStateCalculation(material, state);
28
+ const vesselStateResultCode = await vesselStateCalculation.run();
29
+
30
+ // Check vessel state calculation result
31
+ expect(vesselStateResultCode).toBe(ResultCode.SUCCESS);
32
+
33
+ // Create a vessel using the calculated state and material
34
+ const vessel = new Vessel({
35
+ state: vesselStateCalculation.outputState!,
36
+ material: vesselStateCalculation.material,
37
+ liquidFillFractionByVolume: 0.7,
38
+ shape: VesselShape.VESSEL_SPHERE,
39
+ diameter: 3,
40
+ vesselConditions: vesselStateCalculation.vesselConditions
41
+ });
42
+
43
+ // Create a relief valve
44
+ const reliefValve = new ReliefValve({
45
+ pipeDiameter: 0.1,
46
+ pipeLength: 5.0,
47
+ pipeHeightFraction: 1.0,
48
+ reliefValveConstrictionDiameter: 0.01
49
+ });
50
+
51
+ // Create a vessel relief valve calculation
52
+ const dischargeParameters = new DischargeParameters();
53
+ const vesselReliefValveCalculation = new VesselReliefValveCalculation(
54
+ vessel,
55
+ reliefValve,
56
+ dischargeParameters
57
+ );
58
+
59
+ // Run the vessel relief valve calculation
60
+ const vesselReliefValveResultCode = await vesselReliefValveCalculation.run();
61
+
62
+ // Check vessel relief valve calculation result
63
+ expect(vesselReliefValveResultCode).toBe(ResultCode.SUCCESS);
64
+
65
+ // Regression tests for discharge results
66
+ const expectedReleaseMass = 701.8787816018365;
67
+ const actualReleaseMass = vesselReliefValveCalculation.dischargeResult?.releaseMass ?? 0;
68
+ expect(Math.abs((actualReleaseMass - expectedReleaseMass) / expectedReleaseMass)).toBeLessThan(1e-3);
69
+
70
+ // Regression tests for discharge records
71
+ const dischargeRecords = vesselReliefValveCalculation.dischargeRecords!;
72
+ expect(dischargeRecords).toBeDefined();
73
+ expect(dischargeRecords.length).toBe(2);
74
+
75
+ expect(Math.abs((dischargeRecords[1].time! - 798.3770006929267) / 798.3770006929267)).toBeLessThan(1e-3);
76
+ expect(Math.abs((dischargeRecords[0].massFlow! - 0.8791320153169022) / 0.8791320153169022)).toBeLessThan(1e-3);
77
+ expect(Math.abs((dischargeRecords[0].orificeState.pressure! - 101325.0) / 101325.0)).toBeLessThan(1e-3);
78
+ expect(Math.abs((dischargeRecords[0].finalVelocity! - 112.52375086203219) / 112.52375086203219)).toBeLessThan(1e-3);
79
+ });
80
+ });
@@ -0,0 +1,86 @@
1
+ import { VesselReliefValveCalculation, VesselStateCalculation } from "../../src/calculations/discharge";
2
+ import { DischargeParameters, Material, MaterialComponent, ReliefValve, State, Vessel } from "../../src/entities";
3
+ import { ResultCode, VesselShape } from "../../src/enums";
4
+
5
+ import { setAccessToken } from "../../src/utilities";
6
+
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('Vessel Relief Valve Calculation - MET+H2S', () => {
16
+ test('Vessel relief valve calculation for MET+H2S', async () => {
17
+ // Define the initial state of the vessel
18
+ const state = new State({ temperature: 280.0, pressure: 2e6, liquidFraction: 1.0 });
19
+
20
+ // Define the material contained by the vessel
21
+ const material = new Material({
22
+ name: "MET+H2S",
23
+ components: [
24
+ new MaterialComponent({ name: "METHANE", moleFraction: 0.9 }),
25
+ new MaterialComponent({ name: "HYDROGEN SULFIDE", moleFraction: 0.1 })
26
+ ],
27
+ componentCount: 2
28
+ });
29
+
30
+ // Create a vessel state calculation using the material and state
31
+ const vesselStateCalculation = new VesselStateCalculation(material, state);
32
+ const vesselStateResultCode = await vesselStateCalculation.run();
33
+
34
+ // Check vessel state calculation result
35
+ expect(vesselStateResultCode).toBe(ResultCode.SUCCESS);
36
+
37
+ // Create a vessel using the calculated state and material
38
+ const vessel = new Vessel({
39
+ state: vesselStateCalculation.outputState!,
40
+ material: vesselStateCalculation.material,
41
+ liquidFillFractionByVolume: 0.7,
42
+ shape: VesselShape.VESSEL_CUBOID,
43
+ height: 2,
44
+ width: 1,
45
+ length: 3,
46
+ vesselConditions: vesselStateCalculation.vesselConditions
47
+ });
48
+
49
+ // Create a relief valve
50
+ const reliefValve = new ReliefValve({
51
+ pipeDiameter: 0.1,
52
+ pipeLength: 1.0,
53
+ pipeHeightFraction: 1.0,
54
+ reliefValveConstrictionDiameter: 0.05
55
+ });
56
+
57
+ // Create a vessel relief valve calculation
58
+ const dischargeParameters = new DischargeParameters();
59
+ const vesselReliefValveCalculation = new VesselReliefValveCalculation(
60
+ vessel,
61
+ reliefValve,
62
+ dischargeParameters
63
+ );
64
+
65
+ // Run the vessel relief valve calculation
66
+ const vesselReliefValveResultCode = await vesselReliefValveCalculation.run();
67
+
68
+ // Check vessel relief valve calculation result
69
+ expect(vesselReliefValveResultCode).toBe(ResultCode.SUCCESS);
70
+
71
+ // Regression tests for discharge results
72
+ const expectedReleaseMass = 97.16333722218255;
73
+ const actualReleaseMass = vesselReliefValveCalculation.dischargeResult?.releaseMass ?? 0;
74
+ expect(Math.abs((actualReleaseMass - expectedReleaseMass) / expectedReleaseMass)).toBeLessThan(1e-3);
75
+
76
+ // Regression tests for discharge records
77
+ const dischargeRecords = vesselReliefValveCalculation.dischargeRecords!;
78
+ expect(dischargeRecords).toBeDefined();
79
+ expect(dischargeRecords.length).toBe(2);
80
+
81
+ expect(Math.abs((dischargeRecords[1].time! - 12.434893609230256) / 12.434893609230256)).toBeLessThan(1e-3);
82
+ expect(Math.abs((dischargeRecords[0].massFlow! - 7.81376506109063) / 7.81376506109063)).toBeLessThan(1e-3);
83
+ expect(Math.abs((dischargeRecords[0].orificeState.pressure! - 391491.52234610944) / 391491.52234610944)).toBeLessThan(1e-3);
84
+ expect(Math.abs((dischargeRecords[0].finalVelocity! - 582.3607141206039) / 582.3607141206039)).toBeLessThan(1e-3);
85
+ });
86
+ });
@@ -0,0 +1,80 @@
1
+ import { VesselReliefValveCalculation, VesselStateCalculation } from "../../src/calculations/discharge";
2
+ import { DischargeParameters, Material, MaterialComponent, ReliefValve, State, Vessel } from "../../src/entities";
3
+ import { ResultCode, VesselShape } from "../../src/enums";
4
+ import { setAccessToken } from "../../src/utilities";
5
+
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('Vessel Relief Valve Calculation - Nitrogen', () => {
15
+ test('Vessel relief valve calculation for Nitrogen', async () => {
16
+ // Define the initial state of the vessel
17
+ const state = new State({ temperature: 300.0, pressure: 4e6, liquidFraction: 1.0 });
18
+
19
+ // Define the material contained by the vessel
20
+ const material = new Material({
21
+ name: "NITROGEN",
22
+ components: [new MaterialComponent({ name: "NITROGEN", moleFraction: 1.0 })]
23
+ });
24
+
25
+ // Create a vessel state calculation using the material and state
26
+ const vesselStateCalculation = new VesselStateCalculation(material, state);
27
+ const vesselStateResultCode = await vesselStateCalculation.run();
28
+
29
+ // Check vessel state calculation result
30
+ expect(vesselStateResultCode).toBe(ResultCode.SUCCESS);
31
+
32
+ // Create a vessel using the calculated state and material
33
+ const vessel = new Vessel({
34
+ state: vesselStateCalculation.outputState!,
35
+ material: vesselStateCalculation.material,
36
+ liquidFillFractionByVolume: 0.7,
37
+ shape: VesselShape.HORIZONTAL_CYLINDER,
38
+ diameter: 1.5,
39
+ height: 3,
40
+ vesselConditions: vesselStateCalculation.vesselConditions
41
+ });
42
+
43
+ // Create a relief valve
44
+ const reliefValve = new ReliefValve({
45
+ pipeDiameter: 0.5,
46
+ pipeLength: 10.0,
47
+ pipeHeightFraction: 1.0,
48
+ reliefValveConstrictionDiameter: 0.5
49
+ });
50
+
51
+ // Create a vessel relief valve calculation
52
+ const dischargeParameters = new DischargeParameters();
53
+ const vesselReliefValveCalculation = new VesselReliefValveCalculation(
54
+ vessel,
55
+ reliefValve,
56
+ dischargeParameters
57
+ );
58
+
59
+ // Run the vessel relief valve calculation
60
+ const vesselReliefValveResultCode = await vesselReliefValveCalculation.run();
61
+
62
+ // Check vessel relief valve calculation result
63
+ expect(vesselReliefValveResultCode).toBe(ResultCode.SUCCESS);
64
+
65
+ // Regression tests for discharge results
66
+ const expectedReleaseMass = 314.94879020959837;
67
+ const actualReleaseMass = vesselReliefValveCalculation.dischargeResult?.releaseMass ?? 0;
68
+ expect(Math.abs((actualReleaseMass - expectedReleaseMass) / expectedReleaseMass)).toBeLessThan(1e-3);
69
+
70
+ // Regression tests for discharge records
71
+ const dischargeRecords = vesselReliefValveCalculation.dischargeRecords!;
72
+ expect(dischargeRecords).toBeDefined();
73
+ expect(dischargeRecords.length).toBe(2);
74
+
75
+ expect(Math.abs((dischargeRecords[1].time! - 0.20034090677203503) / 0.20034090677203503)).toBeLessThan(1e-3);
76
+ expect(Math.abs((dischargeRecords[0].massFlow! - 1572.064314194075) / 1572.064314194075)).toBeLessThan(1e-3);
77
+ expect(Math.abs((dischargeRecords[0].orificeState.pressure! - 2165508.2851427207) / 2165508.2851427207)).toBeLessThan(1e-3);
78
+ expect(Math.abs((dischargeRecords[0].finalVelocity! - 554.7205461435867) / 554.7205461435867)).toBeLessThan(1e-3);
79
+ });
80
+ });
@@ -0,0 +1,56 @@
1
+ import { VesselStateCalculation } from "../../src/calculations/discharge";
2
+ import { Material, MaterialComponent, State } from "../../src/entities";
3
+ import { ResultCode } from "../../src/enums";
4
+ import { setAccessToken } from "../../src/utilities";
5
+
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('Vessel State Calculation - Test for Ammonia', () => {
15
+ test('Ammonia vessel state calculation', async () => {
16
+ // Define the initial state of the vessel
17
+ const state = new State({
18
+ temperature: 270.0,
19
+ pressure: 8.0e6,
20
+ liquidFraction: 0.8
21
+ });
22
+
23
+ // Define the material contained by the vessel
24
+ const material = new Material({
25
+ name: "AMMONIA",
26
+ components: [
27
+ new MaterialComponent({ name: "AMMONIA", moleFraction: 1.0 })
28
+ ]
29
+ });
30
+
31
+ // Create a vessel state calculation using the material and state
32
+ const vesselStateCalculation = new VesselStateCalculation(material, state);
33
+
34
+ // Run the vessel state calculation
35
+ console.log('Running vessel_state_calculation...');
36
+ const resultCode = await vesselStateCalculation.run();
37
+
38
+ // Print any messages
39
+ if (vesselStateCalculation.messages.length > 0) {
40
+ console.log('Messages:');
41
+ vesselStateCalculation.messages.forEach((message) => {
42
+ console.log(message);
43
+ });
44
+ }
45
+
46
+ // Check if the calculation was successful
47
+ if (resultCode === ResultCode.SUCCESS) {
48
+ // Regression test for vessel conditions
49
+ expect(vesselStateCalculation.vesselConditions).toBe(4);
50
+ console.log(`SUCCESS: vessel_state_calculation (${vesselStateCalculation.calculationElapsedTime}ms)`);
51
+ } else {
52
+ // Fail the test if the result code is not successful
53
+ throw new Error(`FAILED vessel_state_calculation with result code ${resultCode}`);
54
+ }
55
+ });
56
+ });
@@ -0,0 +1,57 @@
1
+ import { VesselStateCalculation } from "../../src/calculations/discharge";
2
+ import { Material, MaterialComponent, State } from "../../src/entities";
3
+ import { ResultCode } from "../../src/enums";
4
+
5
+ import { setAccessToken } from "../../src/utilities";
6
+
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('Vessel State Calculation - Test for Butane', () => {
16
+ test('Butane vessel state calculation', async () => {
17
+ // Define the initial state of the vessel
18
+ const state = new State({
19
+ temperature: 300.0,
20
+ pressure: 8.0e6,
21
+ liquidFraction: 0.8
22
+ });
23
+
24
+ // Define the material contained by the vessel
25
+ const material = new Material({
26
+ name: "N-BUTANE",
27
+ components: [
28
+ new MaterialComponent({ name: "N-BUTANE", moleFraction: 1.0 })
29
+ ]
30
+ });
31
+
32
+ // Create a vessel state calculation using the material and state
33
+ const vesselStateCalculation = new VesselStateCalculation(material, state);
34
+
35
+ // Run the vessel state calculation
36
+ console.log('Running vessel_state_calculation...');
37
+ const resultCode = await vesselStateCalculation.run();
38
+
39
+ // Print any messages
40
+ if (vesselStateCalculation.messages.length > 0) {
41
+ console.log('Messages:');
42
+ vesselStateCalculation.messages.forEach((message) => {
43
+ console.log(message);
44
+ });
45
+ }
46
+
47
+ // Check if the calculation was successful
48
+ if (resultCode === ResultCode.SUCCESS) {
49
+ // Regression test for vessel conditions
50
+ expect(vesselStateCalculation.vesselConditions).toBe(4);
51
+ console.log(`SUCCESS: vessel_state_calculation (${vesselStateCalculation.calculationElapsedTime}ms)`);
52
+ } else {
53
+ // Fail the test if the result code is not successful
54
+ throw new Error(`FAILED vessel_state_calculation with result code ${resultCode}`);
55
+ }
56
+ });
57
+ });