@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,123 @@
1
+ import { VesselLeakCalculation, VesselStateCalculation } from "../../src/calculations/discharge";
2
+ import { DischargeParameters, Leak, Material, MaterialComponent, State, Vessel } from "../../src/entities";
3
+ import { ResultCode, TimeVaryingOption, VesselShape } from "../../src/enums";
4
+
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
+ describe('Vessel Leak Calculation - Test Case 7', () => {
14
+ test('test case 7 - vessel leak calculation', async () => {
15
+ // Set the case properties
16
+ const materialName = 'TOLUENE';
17
+ const stateTemperature = 280.0;
18
+ const statePressure = 1.50E+05;
19
+ const vesselShape = VesselShape.HORIZONTAL_CYLINDER;
20
+ const vesselLength = 5.0;
21
+ const vesselDiameter = 2.0;
22
+ const leakHoleDiameter = 0.05;
23
+ const timeVaryingOption = TimeVaryingOption.TIME_VARYING_RATE;
24
+ const leakHoleHeightFraction = 0.0;
25
+
26
+ // Define the initial state of the vessel
27
+ const state = new State({
28
+ temperature: stateTemperature,
29
+ pressure: statePressure,
30
+ liquidFraction: 0.0
31
+ });
32
+
33
+ // Define the material contained by the vessel
34
+ const material = new Material({
35
+ name: materialName,
36
+ components: [new MaterialComponent({ name: materialName, moleFraction: 1.0 })]
37
+ });
38
+
39
+ // Create a vessel state calculation using the material and state
40
+ const vesselStateCalculation = new VesselStateCalculation(material, state);
41
+
42
+ // Run the vessel state calculation
43
+ console.log('Running vessel_state_calculation...');
44
+ const vesselStateResultCode = await vesselStateCalculation.run();
45
+
46
+ // Check vessel state calculation result
47
+ expect(vesselStateResultCode).toBe(ResultCode.SUCCESS);
48
+
49
+ // Optional: Log messages if any
50
+ if (vesselStateCalculation.messages.length > 0) {
51
+ vesselStateCalculation.messages.forEach(message => {
52
+ console.log(message);
53
+ });
54
+ }
55
+
56
+ // Create a vessel to use in the leak calculation
57
+ const vessel = new Vessel({
58
+ state: vesselStateCalculation.outputState!,
59
+ material: vesselStateCalculation.material,
60
+ diameter: vesselDiameter,
61
+ length: vesselLength,
62
+ shape: vesselShape,
63
+ vesselConditions: vesselStateCalculation.vesselConditions,
64
+ liquidFillFractionByVolume: 0.5
65
+ });
66
+
67
+ // Create a leak to use in the vessel leak calculation
68
+ const leak = new Leak({
69
+ holeDiameter: leakHoleDiameter,
70
+ timeVaryingOption: timeVaryingOption,
71
+ holeHeightFraction: leakHoleHeightFraction,
72
+ });
73
+
74
+ // Create discharge parameters to use in the vessel leak calculation
75
+ const dischargeParameters = new DischargeParameters();
76
+
77
+ // Create a vessel leak calculation using the vessel, leak, and discharge parameters
78
+ const vesselLeakCalculation = new VesselLeakCalculation(
79
+ vessel,
80
+ leak,
81
+ dischargeParameters
82
+ );
83
+
84
+ // Run the vessel leak calculation
85
+ console.log('Running vessel_leak_calculation...');
86
+ const vesselLeakResultCode = await vesselLeakCalculation.run();
87
+
88
+ // Check vessel leak calculation result
89
+ expect(vesselLeakResultCode).toBe(ResultCode.SUCCESS);
90
+
91
+ // Optional: Log messages if any
92
+ if (vesselLeakCalculation.messages.length > 0) {
93
+ vesselLeakCalculation.messages.forEach(message => {
94
+ console.log(message);
95
+ });
96
+ }
97
+
98
+ // Regression tests for discharge records
99
+ const dischargeRecords = vesselLeakCalculation.dischargeRecords;
100
+
101
+ // Check number of discharge records
102
+ expect(dischargeRecords).toBeDefined();
103
+ expect(dischargeRecords!.length).toBe(900);
104
+
105
+ // Check mass flow regression
106
+ const expectedMassFlow = 12.605655881613954;
107
+ const actualMassFlow = dischargeRecords ? dischargeRecords[0].massFlow : undefined;
108
+ expect(actualMassFlow).toBeDefined();
109
+ expect(Math.abs(((actualMassFlow as number) - expectedMassFlow) / expectedMassFlow)).toBeLessThan(1e-3);
110
+
111
+ // Check final velocity regression
112
+ const expectedFinalVelocity = 12.154668210488419;
113
+ const actualFinalVelocity = dischargeRecords ? dischargeRecords[0].finalVelocity : undefined;
114
+ expect(actualFinalVelocity).toBeDefined();
115
+ expect(Math.abs(((actualFinalVelocity as number) - expectedFinalVelocity) / expectedFinalVelocity)).toBeLessThan(1e-3);
116
+
117
+ // Check droplet diameter regression
118
+ const expectedDropletDiameter = 0.002048354602442208;
119
+ const actualDropletDiameter = dischargeRecords ? dischargeRecords[0].dropletDiameter : undefined;
120
+ expect(actualDropletDiameter).toBeDefined();
121
+ expect(Math.abs(((actualDropletDiameter as number) - expectedDropletDiameter) / expectedDropletDiameter)).toBeLessThan(1e-3);
122
+ });
123
+ });
@@ -0,0 +1,102 @@
1
+ import { VesselLeakCalculation, VesselStateCalculation } from "../../src/calculations/discharge";
2
+ import { DischargeParameters, Leak, Material, MaterialComponent, State, Vessel } from "../../src/entities";
3
+ import { ResultCode, TimeVaryingOption, VesselShape } from "../../src/enums";
4
+
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('Vessel Leak Calculation - Test Case 8', () => {
15
+ test('Vessel leak calculation for Carbon Dioxide (Toxic)', async () => {
16
+ // Set the case properties
17
+ const materialName = 'CARBON DIOXIDE (TOXIC)';
18
+ const stateTemperature = 280.0;
19
+ const statePressure = 8.0E+06;
20
+ const vesselShape = VesselShape.VESSEL_SPHERE;
21
+ const vesselDiameter = 5.0;
22
+ const leakHoleDiameter = 0.008;
23
+ const timeVaryingOption = TimeVaryingOption.INITIAL_RATE;
24
+ const leakHoleHeightFraction = 0.5;
25
+
26
+ // Define the initial state of the vessel
27
+ const state = new State({
28
+ temperature: stateTemperature,
29
+ pressure: statePressure,
30
+ liquidFraction: 0.0
31
+ });
32
+
33
+ // Define the material contained by the vessel
34
+ const material = new Material({
35
+ name: materialName,
36
+ components: [new MaterialComponent({ name: materialName, moleFraction: 1.0 })]
37
+ });
38
+
39
+ // Create a vessel state calculation using the material and state
40
+ const vesselStateCalculation = new VesselStateCalculation(material, state);
41
+ const vesselStateResultCode = await vesselStateCalculation.run();
42
+
43
+ // Check vessel state calculation result
44
+ expect(vesselStateResultCode).toBe(ResultCode.SUCCESS);
45
+
46
+ // Create a vessel to use in the leak calculation
47
+ const vessel = new Vessel({
48
+ state: vesselStateCalculation.outputState!,
49
+ material: vesselStateCalculation.material,
50
+ diameter: vesselDiameter,
51
+ shape: vesselShape,
52
+ liquidFillFractionByVolume: 0.8,
53
+ vesselConditions: vesselStateCalculation.vesselConditions
54
+ });
55
+
56
+ // Create a leak to use in the vessel leak calculation
57
+ const leak = new Leak({
58
+ holeDiameter: leakHoleDiameter,
59
+ timeVaryingOption: timeVaryingOption,
60
+ holeHeightFraction: leakHoleHeightFraction,
61
+ });
62
+
63
+ // Create discharge parameters to use in the vessel leak calculation
64
+ const dischargeParameters = new DischargeParameters();
65
+
66
+ // Create a vessel leak calculation using the vessel, leak, and discharge parameters
67
+ const vesselLeakCalculation = new VesselLeakCalculation(
68
+ vessel,
69
+ leak,
70
+ dischargeParameters
71
+ );
72
+
73
+ // Run the vessel leak calculation
74
+ const vesselLeakResultCode = await vesselLeakCalculation.run();
75
+
76
+ // Check vessel leak calculation result
77
+ expect(vesselLeakResultCode).toBe(ResultCode.SUCCESS);
78
+
79
+ // Regression tests for discharge records
80
+ const dischargeRecords = vesselLeakCalculation.dischargeRecords;
81
+ expect(dischargeRecords).toBeDefined();
82
+ expect(dischargeRecords!.length).toBe(2);
83
+
84
+ // Check mass flow regression
85
+ const expectedMassFlow = 4.015328433666382;
86
+ const actualMassFlow = dischargeRecords ? dischargeRecords[0].massFlow : undefined;
87
+ expect(actualMassFlow).toBeDefined();
88
+ expect(Math.abs(((actualMassFlow as number) - expectedMassFlow) / expectedMassFlow)).toBeLessThan(1e-3);
89
+
90
+ // Check final velocity regression
91
+ const expectedFinalVelocity = 141.10842725286392;
92
+ const actualFinalVelocity = dischargeRecords ? dischargeRecords[0].finalVelocity : undefined;
93
+ expect(actualFinalVelocity).toBeDefined();
94
+ expect(Math.abs(((actualFinalVelocity as number) - expectedFinalVelocity) / expectedFinalVelocity)).toBeLessThan(1e-3);
95
+
96
+ // Check droplet diameter regression
97
+ const expectedDropletDiameter = 1.1446905156710795e-05;
98
+ const actualDropletDiameter = dischargeRecords ? dischargeRecords[0].dropletDiameter : undefined;
99
+ expect(actualDropletDiameter).toBeDefined();
100
+ expect(Math.abs(((actualDropletDiameter as number) - expectedDropletDiameter) / expectedDropletDiameter)).toBeLessThan(1e-3);
101
+ });
102
+ });
@@ -0,0 +1,106 @@
1
+ import { VesselLeakCalculation, VesselStateCalculation } from "../../src/calculations/discharge";
2
+ import { DischargeParameters, Leak, Material, MaterialComponent, State, Vessel } from "../../src/entities";
3
+ import { ResultCode, TimeVaryingOption, VesselShape } from "../../src/enums";
4
+
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
+ describe('Vessel Leak Calculation - Test Case 9', () => {
14
+ test('Vessel leak calculation for N-Octane + N-Heptane', async () => {
15
+ // Set the case properties
16
+ const stateTemperature = 250.0;
17
+ const statePressure = 5.00E+05;
18
+ const vesselShape = VesselShape.VERTICAL_CYLINDER;
19
+ const vesselHeight = 3.0;
20
+ const vesselDiameter = 1.5;
21
+ const leakHoleDiameter = 0.1;
22
+ const timeVaryingOption = TimeVaryingOption.TIME_VARYING_RATE;
23
+ const leakHoleHeightFraction = 0.0;
24
+
25
+ // Define the initial state of the vessel
26
+ const state = new State({
27
+ temperature: stateTemperature,
28
+ pressure: statePressure,
29
+ liquidFraction: 0.0
30
+ });
31
+
32
+ // Define the material contained by the vessel
33
+ const material = new Material({
34
+ name: 'N-OCTANE+N-HEPTANE',
35
+ components: [
36
+ new MaterialComponent({ name: 'N-OCTANE', moleFraction: 0.5 }),
37
+ new MaterialComponent({ name: 'N-HEPTANE', moleFraction: 0.5 })
38
+ ],
39
+ componentCount: 2
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 to use in the leak calculation
50
+ const vessel = new Vessel({
51
+ state: vesselStateCalculation.outputState!,
52
+ material: vesselStateCalculation.material,
53
+ diameter: vesselDiameter,
54
+ height: vesselHeight,
55
+ shape: vesselShape,
56
+ liquidFillFractionByVolume: 0.8,
57
+ vesselConditions: vesselStateCalculation.vesselConditions
58
+ });
59
+
60
+ // Create a leak to use in the vessel leak calculation
61
+ const leak = new Leak({
62
+ holeDiameter: leakHoleDiameter,
63
+ timeVaryingOption: timeVaryingOption,
64
+ holeHeightFraction: leakHoleHeightFraction,
65
+ });
66
+
67
+ // Create discharge parameters to use in the vessel leak calculation
68
+ const dischargeParameters = new DischargeParameters();
69
+
70
+ // Create a vessel leak calculation using the vessel, leak, and discharge parameters
71
+ const vesselLeakCalculation = new VesselLeakCalculation(
72
+ vessel,
73
+ leak,
74
+ dischargeParameters
75
+ );
76
+
77
+ // Run the vessel leak calculation
78
+ const vesselLeakResultCode = await vesselLeakCalculation.run();
79
+
80
+ // Check vessel leak calculation result
81
+ expect(vesselLeakResultCode).toBe(ResultCode.SUCCESS);
82
+
83
+ // Regression tests for discharge records
84
+ const dischargeRecords = vesselLeakCalculation.dischargeRecords;
85
+ expect(dischargeRecords).toBeDefined();
86
+ expect(dischargeRecords!.length).toBe(698);
87
+
88
+ // Check mass flow regression
89
+ const expectedMassFlow = 125.74564365679295;
90
+ const actualMassFlow = dischargeRecords ? dischargeRecords[0].massFlow : undefined;
91
+ expect(actualMassFlow).toBeDefined();
92
+ expect(Math.abs(((actualMassFlow as number) - expectedMassFlow) / expectedMassFlow)).toBeLessThan(1e-3);
93
+
94
+ // Check final velocity regression
95
+ const expectedFinalVelocity = 36.48936892716285;
96
+ const actualFinalVelocity = dischargeRecords ? dischargeRecords[0].finalVelocity : undefined;
97
+ expect(actualFinalVelocity).toBeDefined();
98
+ expect(Math.abs(((actualFinalVelocity as number) - expectedFinalVelocity) / expectedFinalVelocity)).toBeLessThan(1e-3);
99
+
100
+ // Check droplet diameter regression
101
+ const expectedDropletDiameter = 0.0001917147651424711;
102
+ const actualDropletDiameter = dischargeRecords ? dischargeRecords[0].dropletDiameter : undefined;
103
+ expect(actualDropletDiameter).toBeDefined();
104
+ expect(Math.abs(((actualDropletDiameter as number) - expectedDropletDiameter) / expectedDropletDiameter)).toBeLessThan(1e-3);
105
+ });
106
+ });
@@ -0,0 +1,84 @@
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
+
13
+ describe('Test Case - VLR AMMONIA', () => {
14
+ test('Vessel line rupture calculation for AMMONIA', async () => {
15
+
16
+ // Define the initial state of the vessel
17
+ const state = new State({
18
+ temperature: 290.0,
19
+ pressure: 7.0e6,
20
+ liquidFraction: 1.0
21
+ });
22
+
23
+ // Define the material contained by the vessel
24
+ const material = new Material({
25
+ name: "AMMONIA",
26
+ components: [new MaterialComponent({ name: "AMMONIA", moleFraction: 1.0 })]
27
+ });
28
+
29
+ // Create a vessel state calculation using the material and state
30
+ const vesselStateCalculation = new VesselStateCalculation(material, state);
31
+ const vesselStateResultCode = await vesselStateCalculation.run();
32
+
33
+ // Check the result of vessel state calculation
34
+ expect(vesselStateResultCode).toBe(ResultCode.SUCCESS);
35
+ console.log(`SUCCESS: vessel_state_calculation (${vesselStateCalculation.calculationElapsedTime}ms)`);
36
+
37
+ // Create a vessel for the line rupture calculation (cuboid: 2m height, 1m width, 3m length)
38
+ const vessel = new Vessel({
39
+ state: state,
40
+ material: material,
41
+ vesselConditions: vesselStateCalculation.vesselConditions,
42
+ liquidFillFractionByVolume: 0.7,
43
+ shape: VesselShape.VESSEL_CUBOID,
44
+ height: 2,
45
+ width: 1,
46
+ length: 3
47
+ });
48
+
49
+ // Create a line rupture
50
+ const lineRupture = new LineRupture({
51
+ pipeDiameter: 0.1,
52
+ pipeLength: 1.0,
53
+ pipeHeightFraction: 0.1
54
+ });
55
+
56
+ // Create the vessel line rupture calculation
57
+ const vesselLineRuptureCalculation = new VesselLineRuptureCalculation(vessel, lineRupture, new DischargeParameters());
58
+
59
+ // Run the calculation
60
+ const lineRuptureResultCode = await vesselLineRuptureCalculation.run();
61
+
62
+ // Check result
63
+ expect(lineRuptureResultCode).toBe(ResultCode.SUCCESS);
64
+
65
+ // Output messages
66
+ if (vesselLineRuptureCalculation.messages.length > 0) {
67
+ console.log('Messages:');
68
+ vesselLineRuptureCalculation.messages.forEach(msg => console.log(msg));
69
+ }
70
+
71
+ // Validate output values
72
+ const dischargeRecords = vesselLineRuptureCalculation.dischargeRecords!;
73
+ const dischargeResult = vesselLineRuptureCalculation.dischargeResult!;
74
+
75
+ expect(dischargeRecords.length).toBe(2);
76
+ expect(Math.abs((dischargeRecords[0].massFlow! - 489.84382051168984) / 489.84382051168984)).toBeLessThan(1e-3);
77
+ expect(Math.abs((dischargeRecords[0].finalState.temperature! - 239.747566488825) / 239.747566488825)).toBeLessThan(1e-3);
78
+ expect(Math.abs((dischargeRecords[0].finalVelocity! - 242.1191558154253) / 242.1191558154253)).toBeLessThan(1e-3);
79
+ expect(Math.abs((dischargeResult.releaseMass! - 2578.8221114859684) / 2578.8221114859684)).toBeLessThan(1e-3);
80
+
81
+ console.log(`vessel_line_rupture_calculation.discharge_result.release_mass: ${dischargeResult.releaseMass} [kg]`);
82
+ console.log(`SUCCESS: vessel_line_rupture_calculation (${vesselLineRuptureCalculation.calculationElapsedTime}ms)`);
83
+ });
84
+ });
@@ -0,0 +1,82 @@
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 ETHANE + METHANE + HYDROGEN", () => {
13
+ test("Vessel line rupture calculation for ETHANE_METHANE_HY", async () => {
14
+
15
+ // Define the initial state of the vessel
16
+ const state = new State({
17
+ temperature: 260.0,
18
+ pressure: 5e5,
19
+ liquidFraction: 1.0
20
+ });
21
+
22
+ // Define the material composition
23
+ const material = new Material({
24
+ name: "ETHANE_METHANE_HY",
25
+ components: [
26
+ new MaterialComponent({ name: "ETHANE", moleFraction: 0.15 }),
27
+ new MaterialComponent({ name: "METHANE", moleFraction: 0.8 }),
28
+ new MaterialComponent({ name: "HYDROGEN", moleFraction: 0.05 })
29
+ ],
30
+ componentCount: 3
31
+ });
32
+
33
+ // Run the vessel state calculation
34
+ const vesselStateCalculation = new VesselStateCalculation(material, state);
35
+ const vesselStateResultCode = await vesselStateCalculation.run();
36
+
37
+ expect(vesselStateResultCode).toBe(ResultCode.SUCCESS);
38
+ console.log(`SUCCESS: vessel_state_calculation (${vesselStateCalculation.calculationElapsedTime}ms)`);
39
+
40
+ // Define the vessel (sphere with 3m diameter)
41
+ const vessel = new Vessel({
42
+ state: state,
43
+ material: material,
44
+ vesselConditions: vesselStateCalculation.vesselConditions,
45
+ liquidFillFractionByVolume: 0.7,
46
+ shape: VesselShape.VESSEL_SPHERE,
47
+ diameter: 3
48
+ });
49
+
50
+ // Define line rupture (0.5m diameter, 1m length, height fraction 0.5)
51
+ const lineRupture = new LineRupture({
52
+ pipeDiameter: 0.5,
53
+ pipeLength: 1.0,
54
+ pipeHeightFraction: 0.5
55
+ });
56
+
57
+ // Run the vessel line rupture calculation
58
+ const vesselLineRuptureCalculation = new VesselLineRuptureCalculation(vessel, lineRupture, new DischargeParameters());
59
+ const lineRuptureResultCode = await vesselLineRuptureCalculation.run();
60
+
61
+ expect(lineRuptureResultCode).toBe(ResultCode.SUCCESS);
62
+
63
+ // Output messages
64
+ if (vesselLineRuptureCalculation.messages.length > 0) {
65
+ console.log("Messages:");
66
+ vesselLineRuptureCalculation.messages.forEach(msg => console.log(msg));
67
+ }
68
+
69
+ // Validate outputs
70
+ const dischargeRecords = vesselLineRuptureCalculation.dischargeRecords!;
71
+ const dischargeResult = vesselLineRuptureCalculation.dischargeResult!;
72
+
73
+ expect(dischargeRecords.length).toBe(2);
74
+ expect(Math.abs((dischargeRecords[0].massFlow! - 158.64730421749067) / 158.64730421749067)).toBeLessThan(1e-3);
75
+ expect(Math.abs((dischargeRecords[0].finalState.temperature! - 190.35560483348553) / 190.35560483348553)).toBeLessThan(1e-3);
76
+ expect(Math.abs((dischargeRecords[0].finalVelocity! - 556.7861619546059) / 556.7861619546059)).toBeLessThan(1e-3);
77
+ expect(Math.abs((dischargeResult.releaseMass! - 58.02291202254755) / 58.02291202254755)).toBeLessThan(1e-3);
78
+
79
+ console.log(`vessel_line_rupture_calculation.discharge_result.release_mass: ${dischargeResult.releaseMass} [kg]`);
80
+ console.log(`SUCCESS: vessel_line_rupture_calculation (${vesselLineRuptureCalculation.calculationElapsedTime}ms)`);
81
+ });
82
+ });
@@ -0,0 +1,79 @@
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 N-DECANE", () => {
13
+ test("Vessel line rupture calculation for N-DECANE", async () => {
14
+
15
+ // Define the initial state of the vessel
16
+ const state = new State({
17
+ temperature: 280.0,
18
+ pressure: 1.5e5,
19
+ liquidFraction: 1.0
20
+ });
21
+
22
+ // Define the material contained by the vessel
23
+ const material = new Material({
24
+ name: "N-DECANE",
25
+ components: [
26
+ new MaterialComponent({ name: "N-DECANE", moleFraction: 1.0 })
27
+ ]
28
+ });
29
+
30
+ // Run the vessel state calculation
31
+ const vesselStateCalculation = new VesselStateCalculation(material, state);
32
+ const vesselStateResultCode = await vesselStateCalculation.run();
33
+
34
+ expect(vesselStateResultCode).toBe(ResultCode.SUCCESS);
35
+ console.log(`SUCCESS: vessel_state_calculation (${vesselStateCalculation.calculationElapsedTime}ms)`);
36
+
37
+ // Define the vessel (vertical cylinder, 3m height, 1.5m diameter)
38
+ const vessel = new Vessel({
39
+ state: state,
40
+ material: material,
41
+ vesselConditions: vesselStateCalculation.vesselConditions,
42
+ liquidFillFractionByVolume: 0.7,
43
+ shape: VesselShape.VERTICAL_CYLINDER,
44
+ height: 3,
45
+ diameter: 1.5
46
+ });
47
+
48
+ // Define the line rupture (0.02m diameter, 10m length, height fraction 0)
49
+ const lineRupture = new LineRupture({
50
+ pipeDiameter: 0.02,
51
+ pipeLength: 10.0,
52
+ pipeHeightFraction: 0
53
+ });
54
+
55
+ // Run the vessel line rupture calculation
56
+ const vesselLineRuptureCalculation = new VesselLineRuptureCalculation(vessel, lineRupture, new DischargeParameters());
57
+ const lineRuptureResultCode = await vesselLineRuptureCalculation.run();
58
+
59
+ expect(lineRuptureResultCode).toBe(ResultCode.SUCCESS);
60
+
61
+ if (vesselLineRuptureCalculation.messages.length > 0) {
62
+ console.log("Messages:");
63
+ vesselLineRuptureCalculation.messages.forEach(msg => console.log(msg));
64
+ }
65
+
66
+ const dischargeRecords = vesselLineRuptureCalculation.dischargeRecords!;
67
+ const dischargeResult = vesselLineRuptureCalculation.dischargeResult!;
68
+
69
+ expect(dischargeRecords.length).toBe(2);
70
+ expect(Math.abs((dischargeRecords[0].massFlow! - 0.8312460349563479) / 0.8312460349563479)).toBeLessThan(1e-3);
71
+ expect(Math.abs((dischargeRecords[0].finalState.temperature! - 280.0421759165028) / 280.0421759165028)).toBeLessThan(1e-3);
72
+ expect(Math.abs((dischargeRecords[0].finalVelocity! - 3.569757805283587) / 3.569757805283587)).toBeLessThan(1e-3);
73
+ expect(Math.abs((dischargeResult.releaseMass! - 2750.746981948948) / 2750.746981948948)).toBeLessThan(1e-3);
74
+
75
+ console.log(`vessel_line_rupture_calculation.discharge_result.release_mass: ${dischargeResult.releaseMass} [kg]`);
76
+ console.log(`SUCCESS: vessel_line_rupture_calculation (${vesselLineRuptureCalculation.calculationElapsedTime}ms)`);
77
+ console.log(`final velocity = ${dischargeRecords[0].finalVelocity}`);
78
+ });
79
+ });
@@ -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 OXYGEN", () => {
13
+ test("Vessel line rupture calculation for OXYGEN", async () => {
14
+
15
+ // Define the initial state of the vessel
16
+ const state = new State({
17
+ temperature: 300.0,
18
+ pressure: 1e7,
19
+ liquidFraction: 1.0
20
+ });
21
+
22
+ // Define the material contained by the vessel
23
+ const material = new Material({
24
+ name: "OXYGEN",
25
+ components: [
26
+ new MaterialComponent({ name: "OXYGEN", moleFraction: 1.0 })
27
+ ]
28
+ });
29
+
30
+ // Run the vessel state calculation
31
+ const vesselStateCalculation = new VesselStateCalculation(material, state);
32
+ const vesselStateResultCode = await vesselStateCalculation.run();
33
+
34
+ expect(vesselStateResultCode).toBe(ResultCode.SUCCESS);
35
+ console.log(`SUCCESS: vessel_state_calculation (${vesselStateCalculation.calculationElapsedTime}ms)`);
36
+
37
+ // Define the vessel (sphere with 5m diameter)
38
+ const vessel = new Vessel({
39
+ state: state,
40
+ material: material,
41
+ vesselConditions: vesselStateCalculation.vesselConditions,
42
+ liquidFillFractionByVolume: 0.7,
43
+ shape: VesselShape.VESSEL_SPHERE,
44
+ diameter: 5
45
+ });
46
+
47
+ // Define the line rupture (0.5m diameter, 10m length, pipe height fraction 1)
48
+ const lineRupture = new LineRupture({
49
+ pipeDiameter: 0.5,
50
+ pipeLength: 10.0,
51
+ pipeHeightFraction: 1
52
+ });
53
+
54
+ // Run the vessel line rupture calculation
55
+ const vesselLineRuptureCalculation = new VesselLineRuptureCalculation(vessel, lineRupture, new DischargeParameters());
56
+ const lineRuptureResultCode = await vesselLineRuptureCalculation.run();
57
+
58
+ expect(lineRuptureResultCode).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! - 4351.317585307134) / 4351.317585307134)).toBeLessThan(1e-3);
70
+ expect(Math.abs((dischargeRecords[0].finalState.temperature! - 147.19547540940934) / 147.19547540940934)).toBeLessThan(1e-3);
71
+ expect(Math.abs((dischargeRecords[0].finalVelocity! - 510.5081623160129) / 510.5081623160129)).toBeLessThan(1e-3);
72
+ expect(Math.abs((dischargeResult.releaseMass! - 8699.938240300542) / 8699.938240300542)).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
+ });