@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,69 @@
1
+ import { Material, MaterialComponent, State } from "../../src/entities";
2
+ import { FlashCalculation } from "../../src/calculations/properties";
3
+ import { ResultCode } from "../../src/enums";
4
+ import { setAccessToken } from "../../src/utilities";
5
+ const accessToken = process.env.PWS_ACCESS_TOKEN;
6
+
7
+ if (!accessToken) {
8
+ throw new Error("ACCESS_TOKEN environment variable is not set.");
9
+ }
10
+
11
+ setAccessToken(accessToken);
12
+
13
+ describe("Flash Calculation Scenario - Test Case 27", () => {
14
+ test("should run the flash calculation and perform regression check", async () => {
15
+ // Set the case properties
16
+ const stateTemperature = 270.0;
17
+ const statePressure = 1.5e5;
18
+ const stateLiquidFraction = 0.7;
19
+
20
+ // Define the initial state of the vessel
21
+ const state = new State({
22
+ temperature: stateTemperature,
23
+ pressure: statePressure,
24
+ liquidFraction: stateLiquidFraction
25
+ });
26
+
27
+ // Define the material (AMMONIA+TRIMETHYLAMINE+WATER)
28
+ const material = new Material({
29
+ name: "Case27_Material",
30
+ components: [
31
+ new MaterialComponent({ name: "AMMONIA", moleFraction: 0.333 }),
32
+ new MaterialComponent({ name: "TRIMETHYLAMINE", moleFraction: 0.333 }),
33
+ new MaterialComponent({ name: "WATER", moleFraction: 0.334 })
34
+ ],
35
+ componentCount: 3
36
+ });
37
+
38
+ // Create and run flash calculation
39
+ const flashCalc = new FlashCalculation(material, state);
40
+
41
+ console.log("Running flashCalculation...");
42
+ const resultCode = await flashCalc.run();
43
+
44
+ if (flashCalc.messages.length > 0) {
45
+ console.log("Messages:");
46
+ flashCalc.messages.forEach((msg) => console.log(msg));
47
+ }
48
+
49
+ expect(resultCode).toBe(ResultCode.SUCCESS);
50
+
51
+ // Regression checks
52
+ const totalFluidDensityError = Math.abs(
53
+ (flashCalc.flashResult!.totalFluidDensity! - 96.46994608249469) / 96.46994608249469
54
+ );
55
+ const bubblePointTempError = Math.abs(
56
+ (flashCalc.flashResult!.bubblePointTemperature! - 269.42243315914885) / 269.42243315914885
57
+ );
58
+ const bubblePointPressureError = Math.abs(
59
+ (flashCalc.flashResult!.bubblePointPressure! - 153386.54309610242) / 153386.54309610242
60
+ );
61
+
62
+ expect(totalFluidDensityError).toBeLessThan(1e-3);
63
+ expect(flashCalc.flashResult!.fluidPhase).toBe(2);
64
+ expect(bubblePointTempError).toBeLessThan(1e-3);
65
+ expect(bubblePointPressureError).toBeLessThan(1e-3);
66
+
67
+ console.log(`SUCCESS: flashCalculation (${flashCalc.calculationElapsedTime}ms)`);
68
+ });
69
+ });
@@ -0,0 +1,69 @@
1
+ import { Material, MaterialComponent, State } from "../../src/entities";
2
+ import { FlashCalculation } from "../../src/calculations/properties";
3
+ import { ResultCode } from "../../src/enums";
4
+ import { setAccessToken } from "../../src/utilities";
5
+ const accessToken = process.env.PWS_ACCESS_TOKEN;
6
+
7
+ if (!accessToken) {
8
+ throw new Error("ACCESS_TOKEN environment variable is not set.");
9
+ }
10
+
11
+ setAccessToken(accessToken);
12
+
13
+ describe("Flash Calculation Scenario - Test Case 28", () => {
14
+ test("should run the flash calculation and perform regression check", async () => {
15
+ // Set the case properties
16
+ const stateTemperature = 350.0;
17
+ const statePressure = 2.0e5;
18
+ const stateLiquidFraction = 0.7;
19
+
20
+ // Define the initial state of the vessel
21
+ const state = new State({
22
+ temperature: stateTemperature,
23
+ pressure: statePressure,
24
+ liquidFraction: stateLiquidFraction
25
+ });
26
+
27
+ // Define the material
28
+ const material = new Material({
29
+ name: "Case28_Material",
30
+ components: [
31
+ new MaterialComponent({ name: "N-DECANE", moleFraction: 0.333 }),
32
+ new MaterialComponent({ name: "N-UNDECANE", moleFraction: 0.333 }),
33
+ new MaterialComponent({ name: "WATER", moleFraction: 0.334 })
34
+ ],
35
+ componentCount: 3
36
+ });
37
+
38
+ // Create and run flash calculation
39
+ const flashCalc = new FlashCalculation(material, state);
40
+
41
+ console.log("Running flashCalculation...");
42
+ const resultCode = await flashCalc.run();
43
+
44
+ if (flashCalc.messages.length > 0) {
45
+ console.log("Messages:");
46
+ flashCalc.messages.forEach((msg) => console.log(msg));
47
+ }
48
+
49
+ expect(resultCode).toBe(ResultCode.SUCCESS);
50
+
51
+ // Regression checks
52
+ const totalFluidDensityError = Math.abs(
53
+ (flashCalc.flashResult!.totalFluidDensity! - 705.2670016215116) / 705.2670016215116
54
+ );
55
+ const bubblePointTempError = Math.abs(
56
+ (flashCalc.flashResult!.bubblePointTemperature! - 425.9402358853448) / 425.9402358853448
57
+ );
58
+ const bubblePointPressureError = Math.abs(
59
+ (flashCalc.flashResult!.bubblePointPressure! - 15560.140921506196) / 15560.140921506196
60
+ );
61
+
62
+ expect(totalFluidDensityError).toBeLessThan(1e-3);
63
+ expect(flashCalc.flashResult!.fluidPhase).toBe(3);
64
+ expect(bubblePointTempError).toBeLessThan(1e-3);
65
+ expect(bubblePointPressureError).toBeLessThan(1e-3);
66
+
67
+ console.log(`SUCCESS: flashCalculation (${flashCalc.calculationElapsedTime}ms)`);
68
+ });
69
+ });
@@ -0,0 +1,67 @@
1
+ import { Material, MaterialComponent, State } from "../../src/entities";
2
+ import { FlashCalculation } from "../../src/calculations/properties";
3
+ import { ResultCode } from "../../src/enums";
4
+ import { setAccessToken } from "../../src/utilities";
5
+ const accessToken = process.env.PWS_ACCESS_TOKEN;
6
+
7
+ if (!accessToken) {
8
+ throw new Error("ACCESS_TOKEN environment variable is not set.");
9
+ }
10
+
11
+ setAccessToken(accessToken);
12
+
13
+ describe("Flash Calculation Scenario - Test Case 29", () => {
14
+ test("should run the flash calculation and perform regression check", async () => {
15
+ // Set the case properties
16
+ const stateTemperature = 300.0;
17
+ const statePressure = 2.0e5;
18
+ const stateLiquidFraction = 0.8;
19
+
20
+ // Define the initial state of the vessel
21
+ const state = new State({
22
+ temperature: stateTemperature,
23
+ pressure: statePressure,
24
+ liquidFraction: stateLiquidFraction
25
+ });
26
+
27
+ // Define the material
28
+ const material = new Material({
29
+ name: "N-BUTANE",
30
+ components: [
31
+ new MaterialComponent({ name: "N-BUTANE", moleFraction: 1.0 })
32
+ ],
33
+ componentCount: 1
34
+ });
35
+
36
+ // Create and run flash calculation
37
+ const flashCalc = new FlashCalculation(material, state);
38
+
39
+ console.log("Running flashCalculation...");
40
+ const resultCode = await flashCalc.run();
41
+
42
+ if (flashCalc.messages.length > 0) {
43
+ console.log("Messages:");
44
+ flashCalc.messages.forEach((msg) => console.log(msg));
45
+ }
46
+
47
+ expect(resultCode).toBe(ResultCode.SUCCESS);
48
+
49
+ // Regression checks
50
+ const totalFluidDensityError = Math.abs(
51
+ (flashCalc.flashResult!.totalFluidDensity! - 4.922619520710173) / 4.922619520710173
52
+ );
53
+ const bubblePointTempError = Math.abs(
54
+ (flashCalc.flashResult!.bubblePointTemperature! - 291.9424041360644) / 291.9424041360644
55
+ );
56
+ const bubblePointPressureError = Math.abs(
57
+ (flashCalc.flashResult!.bubblePointPressure! - 258003.82350284143) / 258003.82350284143
58
+ );
59
+
60
+ expect(totalFluidDensityError).toBeLessThan(1e-3);
61
+ expect(flashCalc.flashResult!.fluidPhase).toBe(1);
62
+ expect(bubblePointTempError).toBeLessThan(1e-3);
63
+ expect(bubblePointPressureError).toBeLessThan(1e-3);
64
+
65
+ console.log(`SUCCESS: flashCalculation (${flashCalc.calculationElapsedTime}ms)`);
66
+ });
67
+ });
@@ -0,0 +1,70 @@
1
+ import { Material, MaterialComponent, State } from "../../src/entities";
2
+ import { FlashCalculation } from "../../src/calculations/properties";
3
+ import { ResultCode } from "../../src/enums";
4
+ import { setAccessToken } from "../../src/utilities";
5
+ const accessToken = process.env.PWS_ACCESS_TOKEN;
6
+
7
+ if (!accessToken) {
8
+ throw new Error("ACCESS_TOKEN environment variable is not set.");
9
+ }
10
+
11
+ setAccessToken(accessToken);
12
+
13
+ describe("Flash Calculation Scenario - Test Case 30", () => {
14
+ test("should run the flash calculation and perform regression check", async () => {
15
+ // Set the case properties
16
+ const stateTemperature = 290.0;
17
+ const statePressure = 1.0e6;
18
+ const stateLiquidFraction = 0.8;
19
+
20
+ // Define the initial state of the vessel
21
+ const state = new State({
22
+ temperature: stateTemperature,
23
+ pressure: statePressure,
24
+ liquidFraction: stateLiquidFraction
25
+ });
26
+
27
+ // Define the material
28
+ const material = new Material({
29
+ name: "Case30_Material",
30
+ components: [
31
+ new MaterialComponent({ name: "METHANE", moleFraction: 0.25 }),
32
+ new MaterialComponent({ name: "ETHANE", moleFraction: 0.25 }),
33
+ new MaterialComponent({ name: "HYDROGEN", moleFraction: 0.25 }),
34
+ new MaterialComponent({ name: "HYDROGEN SULFIDE", moleFraction: 0.25 })
35
+ ],
36
+ componentCount: 4
37
+ });
38
+
39
+ // Create and run flash calculation
40
+ const flashCalc = new FlashCalculation(material, state);
41
+
42
+ console.log("Running flashCalculation...");
43
+ const resultCode = await flashCalc.run();
44
+
45
+ if (flashCalc.messages.length > 0) {
46
+ console.log("Messages:");
47
+ flashCalc.messages.forEach((msg) => console.log(msg));
48
+ }
49
+
50
+ expect(resultCode).toBe(ResultCode.SUCCESS);
51
+
52
+ // Regression checks
53
+ const totalFluidDensityError = Math.abs(
54
+ (flashCalc.flashResult!.totalFluidDensity! - 8.777167721290303) / 8.777167721290303
55
+ );
56
+ const bubblePointTempError = Math.abs(
57
+ (flashCalc.flashResult!.bubblePointTemperature! - 45.7498568184341) / 45.7498568184341
58
+ );
59
+ const bubblePointPressureError = Math.abs(
60
+ (flashCalc.flashResult!.bubblePointPressure! - 13803578.156685727) / 13803578.156685727
61
+ );
62
+
63
+ expect(totalFluidDensityError).toBeLessThan(1e-3);
64
+ expect(flashCalc.flashResult!.fluidPhase).toBe(1);
65
+ expect(bubblePointTempError).toBeLessThan(1e-3);
66
+ expect(bubblePointPressureError).toBeLessThan(1e-3);
67
+
68
+ console.log(`SUCCESS: flashCalculation (${flashCalc.calculationElapsedTime}ms)`);
69
+ });
70
+ });
@@ -0,0 +1,64 @@
1
+ import { Material, MaterialComponent, State, Vessel } from "../../src/entities";
2
+ import { GetMassFromVesselCalculation } from "../../src/calculations/utilities";
3
+ import { ResultCode, VesselConditions, VesselShape } from "../../src/enums";
4
+ import { setAccessToken } from "../../src/utilities";
5
+ const accessToken = process.env.PWS_ACCESS_TOKEN;
6
+
7
+ if (!accessToken) {
8
+ throw new Error("ACCESS_TOKEN environment variable is not set.");
9
+ }
10
+
11
+ setAccessToken(accessToken);
12
+
13
+ describe("Get Mass From Vessel Calculation - Demo Test", () => {
14
+ test("should calculate mass from vessel with carbon dioxide", async () => {
15
+ // Define test case properties
16
+ const materialName = "CARBON DIOXIDE (TOXIC)";
17
+ const stateTemperature = 280.0;
18
+ const statePressure = 8.0e6;
19
+ const vesselShape = VesselShape.VESSEL_SPHERE;
20
+ const vesselDiameter = 5.0;
21
+
22
+ // Define the initial state
23
+ const state = new State({
24
+ temperature: stateTemperature,
25
+ pressure: statePressure,
26
+ liquidFraction: 0.8
27
+ });
28
+
29
+ // Define the material
30
+ const material = new Material({
31
+ name: materialName,
32
+ components: [new MaterialComponent({ name: materialName, moleFraction: 1.0 })]
33
+ });
34
+
35
+ // Create vessel
36
+ const vessel = new Vessel({
37
+ state: state,
38
+ material: material,
39
+ diameter: vesselDiameter,
40
+ shape: vesselShape,
41
+ vesselConditions: VesselConditions.PRESSURIZED_LIQUID_VESSEL,
42
+ liquidFillFractionByVolume: 0.6
43
+ });
44
+
45
+ // Create and run get mass from vessel calculation
46
+ const getMassFromVesselCalc = new GetMassFromVesselCalculation(vessel);
47
+
48
+ console.log("Running getMassFromVesselCalculation...");
49
+ const resultCode = await getMassFromVesselCalc.run();
50
+
51
+ // Log operation ID
52
+ console.log(`operation_id: ${getMassFromVesselCalc.operationId}`);
53
+
54
+ // Log any messages
55
+ if (getMassFromVesselCalc.messages.length > 0) {
56
+ console.log("Messages:");
57
+ getMassFromVesselCalc.messages.forEach((msg) => console.log(msg));
58
+ }
59
+
60
+ // Assertions
61
+ expect(resultCode).toBe(ResultCode.SUCCESS);
62
+ console.log(`SUCCESS: getMassFromVesselCalculation (${getMassFromVesselCalc.calculationElapsedTime}ms)`);
63
+ });
64
+ });
@@ -0,0 +1,35 @@
1
+ import { MaterialComponent } from "../../src/entities";
2
+ import { getComponentById } from "../../src/materials"; // Assuming this is where the function would live in TS
3
+ import { setAccessToken } from "../../src/utilities";
4
+ const accessToken = process.env.PWS_ACCESS_TOKEN;
5
+
6
+ if (!accessToken) {
7
+ throw new Error("ACCESS_TOKEN environment variable is not set.");
8
+ }
9
+
10
+ setAccessToken(accessToken);
11
+
12
+ describe("Material Component Retrieval - Test Case", () => {
13
+ test("should get material component data by ID for METHANE", async () => {
14
+ // Test description
15
+ /**
16
+ * Test to get the material component data by id for METHANE.
17
+ * METHANE entity id = 9ad96d64-098e-4079-b604-a432145eba99.
18
+ */
19
+
20
+ // Define the methane component ID
21
+ const methaneId = "9ad96d64-098e-4079-b604-a432145eba99";
22
+
23
+ console.log("Running getComponentById...");
24
+
25
+ // Invoke the method
26
+ const materialComponentData = await getComponentById(methaneId);
27
+
28
+ console.log("Material Component Data:", materialComponentData);
29
+
30
+ // Basic assertions - adjust these based on expected MaterialComponent properties
31
+ expect(materialComponentData).toBeDefined();
32
+ expect(materialComponentData.name).toBe("METHANE"); // Assuming name is a property
33
+ expect(materialComponentData.id).toBe(methaneId); // Assuming id is a property
34
+ });
35
+ });
@@ -0,0 +1,65 @@
1
+ import { Material, MaterialComponent, State, Vessel } from "../../src/entities";
2
+ import { GetMassFromVesselCalculation } from "../../src/calculations/utilities";
3
+ import { ResultCode, VesselConditions, VesselShape } from "../../src/enums";
4
+ import { setAccessToken } from "../../src/utilities";
5
+ const accessToken = process.env.PWS_ACCESS_TOKEN;
6
+
7
+ if (!accessToken) {
8
+ throw new Error("ACCESS_TOKEN environment variable is not set.");
9
+ }
10
+
11
+ setAccessToken(accessToken);
12
+
13
+ describe("Get Mass From Vessel - Test Case 139", () => {
14
+ test("should calculate mass from vessel and perform regression check", async () => {
15
+ // Define the case properties
16
+ const materialName = "CARBON DIOXIDE (TOXIC)";
17
+ const stateTemperature = 280.0;
18
+ const statePressure = 8.0e6;
19
+ const vesselShape = VesselShape.VESSEL_SPHERE;
20
+ const vesselDiameter = 5.0;
21
+
22
+ // Define the material
23
+ const material = new Material({
24
+ name: materialName,
25
+ components: [new MaterialComponent({ name: materialName, moleFraction: 1.0 })]
26
+ });
27
+
28
+ // Create vessel
29
+ const vessel = new Vessel({
30
+ state: new State({
31
+ temperature: stateTemperature,
32
+ pressure: statePressure,
33
+ liquidFraction: 0.8
34
+ }),
35
+ material: material,
36
+ diameter: vesselDiameter,
37
+ shape: vesselShape,
38
+ vesselConditions: VesselConditions.PRESSURIZED_LIQUID_VESSEL,
39
+ liquidFillFractionByVolume: 0.6
40
+ });
41
+
42
+ // Create and run get mass from vessel calculation
43
+ const getMassFromVesselCalc = new GetMassFromVesselCalculation(vessel);
44
+
45
+ console.log("Running getMassFromVesselCalculation...");
46
+ const resultCode = await getMassFromVesselCalc.run();
47
+
48
+ if (getMassFromVesselCalc.messages.length > 0) {
49
+ console.log("Messages:");
50
+ getMassFromVesselCalc.messages.forEach((msg) => console.log(msg));
51
+ }
52
+
53
+ expect(resultCode).toBe(ResultCode.SUCCESS);
54
+
55
+ // Regression check
56
+ const massError = Math.abs(
57
+ (getMassFromVesselCalc.massInventory! - 34659.76615856555) / 34659.76615856555
58
+ );
59
+
60
+ expect(massError).toBeLessThan(1e-3);
61
+
62
+ console.log(`SUCCESS: getMassFromVesselCalculation (${getMassFromVesselCalc.calculationElapsedTime}ms)`);
63
+ console.log(`Mass from vessel = ${getMassFromVesselCalc.massInventory}`);
64
+ });
65
+ });
@@ -0,0 +1,141 @@
1
+ import { Material, MaterialComponent, State, Leak, Vessel, FlammableParameters, Weather, Substrate, DischargeParameters } from "../../src/entities";
2
+ import { VesselStateCalculation, VesselLeakCalculation } from "../../src/calculations/discharge";
3
+ import { JetFireCalculation} from "../../src/calculations/jetFire";
4
+ import { ResultCode, AtmosphericStabilityClass, VesselShape, TimeVaryingOption } from "../../src/enums";
5
+ import { setAccessToken } from "../../src/utilities";
6
+ const accessToken = process.env.PWS_ACCESS_TOKEN;
7
+
8
+ if (!accessToken) {
9
+ throw new Error("ACCESS_TOKEN environment variable is not set.");
10
+ }
11
+
12
+ setAccessToken(accessToken);
13
+
14
+ describe("Integrated Jet Fire Scenario - Test Case 36", () => {
15
+ test("should run the full jet fire scenario and perform regression check", async () => {
16
+ // Set the case properties
17
+ const materialName = "METHANE";
18
+ const stateTemperature = 280.0;
19
+ const statePressure = 1.0e6;
20
+ const vesselShape = VesselShape.VESSEL_SPHERE;
21
+ const vesselDiameter = 3.0;
22
+ const leakHoleDiameter = 0.1;
23
+ const timeVaryingOption = TimeVaryingOption.INITIAL_RATE;
24
+ const leakHoleHeightFraction = 0.5;
25
+ const windSpeed = 2.0;
26
+ const stabilityClass = AtmosphericStabilityClass.STABILITY_F;
27
+ const surfaceRoughness = 0.18;
28
+ const timeOfInterest = 10.0;
29
+
30
+ // Define the initial state of the vessel
31
+ const state = new State({
32
+ temperature: stateTemperature,
33
+ pressure: statePressure,
34
+ liquidFraction: 0.0
35
+ });
36
+
37
+ // Define the material contained by the vessel
38
+ const material = new Material({
39
+ name: materialName,
40
+ components: [new MaterialComponent({ name: materialName, moleFraction: 1.0 })]
41
+ });
42
+
43
+ // Create and run vessel state calculation
44
+ const vesselStateCalc = new VesselStateCalculation(material, state);
45
+
46
+ console.log("Running vesselStateCalculation...");
47
+ let resultCode = await vesselStateCalc.run();
48
+
49
+ if (vesselStateCalc.messages.length > 0) {
50
+ console.log("Messages:");
51
+ vesselStateCalc.messages.forEach((msg) => console.log(msg));
52
+ }
53
+
54
+ expect(resultCode).toBe(ResultCode.SUCCESS);
55
+ console.log(`SUCCESS: vesselStateCalculation (${vesselStateCalc.calculationElapsedTime}ms)`);
56
+
57
+ // Create vessel
58
+ const vessel = new Vessel({
59
+ state: vesselStateCalc.outputState,
60
+ material: vesselStateCalc.material,
61
+ vesselConditions: vesselStateCalc.vesselConditions,
62
+ diameter: vesselDiameter,
63
+ shape: vesselShape,
64
+ liquidFillFractionByVolume: 0.0
65
+ });
66
+
67
+ // Create leak
68
+ const leak = new Leak({
69
+ holeDiameter: leakHoleDiameter,
70
+ holeHeightFraction: leakHoleHeightFraction,
71
+ timeVaryingOption: timeVaryingOption
72
+ });
73
+
74
+ // Create and run vessel leak calculation
75
+ const vesselLeakCalc = new VesselLeakCalculation(
76
+ vessel,
77
+ leak,
78
+ new DischargeParameters()
79
+ );
80
+
81
+ console.log("Running vesselLeakCalculation...");
82
+ resultCode = await vesselLeakCalc.run();
83
+
84
+ if (vesselLeakCalc.messages.length > 0) {
85
+ console.log("Messages:");
86
+ vesselLeakCalc.messages.forEach((msg) => console.log(msg));
87
+ }
88
+
89
+ expect(resultCode).toBe(ResultCode.SUCCESS);
90
+ console.log(`SUCCESS: vesselLeakCalculation (${vesselLeakCalc.calculationElapsedTime}ms)`);
91
+
92
+ // Define weather and substrate
93
+ const weather = new Weather({
94
+ windSpeed: windSpeed,
95
+ stabilityClass: stabilityClass
96
+ });
97
+
98
+ const substrate = new Substrate({
99
+ surfaceRoughness: surfaceRoughness
100
+ });
101
+
102
+ // Create and run jet fire calculation
103
+ const flammableParams = new FlammableParameters({
104
+ timeOfInterest: timeOfInterest
105
+ });
106
+
107
+ const jetFireCalc = new JetFireCalculation(
108
+ vesselLeakCalc.exitMaterial!,
109
+ vesselLeakCalc.dischargeRecords!,
110
+ vesselLeakCalc.dischargeRecords!.length,
111
+ vesselLeakCalc.dischargeResult!,
112
+ weather,
113
+ substrate,
114
+ flammableParams
115
+ );
116
+
117
+ console.log("Running jetFireCalculation...");
118
+ resultCode = await jetFireCalc.run();
119
+
120
+ if (jetFireCalc.messages.length > 0) {
121
+ console.log("Messages:");
122
+ jetFireCalc.messages.forEach((msg) => console.log(msg));
123
+ }
124
+
125
+ expect(resultCode).toBe(ResultCode.SUCCESS);
126
+
127
+ // Regression checks
128
+ const flameLengthError = Math.abs(
129
+ (jetFireCalc.flameResult!.flameLength! - 33.750426875730376) / 33.750426875730376
130
+ );
131
+ const surfaceEmissivePowerError = Math.abs(
132
+ (jetFireCalc.flameResult!.surfaceEmissivePower! - 309079.19061404973) / 309079.19061404973
133
+ );
134
+
135
+ expect(flameLengthError).toBeLessThan(1e-3);
136
+ expect(surfaceEmissivePowerError).toBeLessThan(1e-3);
137
+ expect(jetFireCalc.flameRecords!.length).toBe(2);
138
+
139
+ console.log(`SUCCESS: jetFireCalculation (${jetFireCalc.calculationElapsedTime}ms)`);
140
+ });
141
+ });