iapws-if97 1.0.0

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 (95) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +113 -0
  3. package/dist/backward/hs.d.ts +16 -0
  4. package/dist/backward/hs.d.ts.map +1 -0
  5. package/dist/backward/hs.js +234 -0
  6. package/dist/backward/hs.js.map +1 -0
  7. package/dist/backward/ph.d.ts +21 -0
  8. package/dist/backward/ph.d.ts.map +1 -0
  9. package/dist/backward/ph.js +231 -0
  10. package/dist/backward/ph.js.map +1 -0
  11. package/dist/backward/ps.d.ts +13 -0
  12. package/dist/backward/ps.d.ts.map +1 -0
  13. package/dist/backward/ps.js +189 -0
  14. package/dist/backward/ps.js.map +1 -0
  15. package/dist/constants.d.ts +65 -0
  16. package/dist/constants.d.ts.map +1 -0
  17. package/dist/constants.js +74 -0
  18. package/dist/constants.js.map +1 -0
  19. package/dist/core/region-detector.d.ts +24 -0
  20. package/dist/core/region-detector.d.ts.map +1 -0
  21. package/dist/core/region-detector.js +409 -0
  22. package/dist/core/region-detector.js.map +1 -0
  23. package/dist/core/solver.d.ts +19 -0
  24. package/dist/core/solver.d.ts.map +1 -0
  25. package/dist/core/solver.js +92 -0
  26. package/dist/core/solver.js.map +1 -0
  27. package/dist/index.d.ts +24 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +28 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/regions/boundaries.d.ts +50 -0
  32. package/dist/regions/boundaries.d.ts.map +1 -0
  33. package/dist/regions/boundaries.js +98 -0
  34. package/dist/regions/boundaries.js.map +1 -0
  35. package/dist/regions/region1.d.ts +18 -0
  36. package/dist/regions/region1.d.ts.map +1 -0
  37. package/dist/regions/region1.js +95 -0
  38. package/dist/regions/region1.js.map +1 -0
  39. package/dist/regions/region2.d.ts +18 -0
  40. package/dist/regions/region2.d.ts.map +1 -0
  41. package/dist/regions/region2.js +134 -0
  42. package/dist/regions/region2.js.map +1 -0
  43. package/dist/regions/region3-data-am.d.ts +19 -0
  44. package/dist/regions/region3-data-am.d.ts.map +1 -0
  45. package/dist/regions/region3-data-am.js +53 -0
  46. package/dist/regions/region3-data-am.js.map +1 -0
  47. package/dist/regions/region3-data-nz.d.ts +18 -0
  48. package/dist/regions/region3-data-nz.d.ts.map +1 -0
  49. package/dist/regions/region3-data-nz.js +53 -0
  50. package/dist/regions/region3-data-nz.js.map +1 -0
  51. package/dist/regions/region3-eval.d.ts +30 -0
  52. package/dist/regions/region3-eval.d.ts.map +1 -0
  53. package/dist/regions/region3-eval.js +25 -0
  54. package/dist/regions/region3-eval.js.map +1 -0
  55. package/dist/regions/region3-subregions.d.ts +5 -0
  56. package/dist/regions/region3-subregions.d.ts.map +1 -0
  57. package/dist/regions/region3-subregions.js +164 -0
  58. package/dist/regions/region3-subregions.js.map +1 -0
  59. package/dist/regions/region3.d.ts +18 -0
  60. package/dist/regions/region3.d.ts.map +1 -0
  61. package/dist/regions/region3.js +112 -0
  62. package/dist/regions/region3.js.map +1 -0
  63. package/dist/regions/region4.d.ts +27 -0
  64. package/dist/regions/region4.d.ts.map +1 -0
  65. package/dist/regions/region4.js +62 -0
  66. package/dist/regions/region4.js.map +1 -0
  67. package/dist/regions/region5.d.ts +18 -0
  68. package/dist/regions/region5.d.ts.map +1 -0
  69. package/dist/regions/region5.js +92 -0
  70. package/dist/regions/region5.js.map +1 -0
  71. package/dist/saturation/common.d.ts +12 -0
  72. package/dist/saturation/common.d.ts.map +1 -0
  73. package/dist/saturation/common.js +75 -0
  74. package/dist/saturation/common.js.map +1 -0
  75. package/dist/saturation/two-phase.d.ts +22 -0
  76. package/dist/saturation/two-phase.d.ts.map +1 -0
  77. package/dist/saturation/two-phase.js +44 -0
  78. package/dist/saturation/two-phase.js.map +1 -0
  79. package/dist/solvers/nelder-mead.d.ts +21 -0
  80. package/dist/solvers/nelder-mead.d.ts.map +1 -0
  81. package/dist/solvers/nelder-mead.js +99 -0
  82. package/dist/solvers/nelder-mead.js.map +1 -0
  83. package/dist/solvers/newton-raphson.d.ts +25 -0
  84. package/dist/solvers/newton-raphson.d.ts.map +1 -0
  85. package/dist/solvers/newton-raphson.js +44 -0
  86. package/dist/solvers/newton-raphson.js.map +1 -0
  87. package/dist/transport/properties.d.ts +47 -0
  88. package/dist/transport/properties.d.ts.map +1 -0
  89. package/dist/transport/properties.js +205 -0
  90. package/dist/transport/properties.js.map +1 -0
  91. package/dist/types.d.ts +161 -0
  92. package/dist/types.d.ts.map +1 -0
  93. package/dist/types.js +56 -0
  94. package/dist/types.js.map +1 -0
  95. package/package.json +62 -0
@@ -0,0 +1,74 @@
1
+ /**
2
+ * IAPWS-IF97 Constants
3
+ *
4
+ * Physical constants, critical point properties, and range limits
5
+ * for the IAPWS Industrial Formulation 1997.
6
+ */
7
+ // ─── Fundamental Constants ──────────────────────────────────────────────────
8
+ /** Specific gas constant for water [kJ/(kg·K)] */
9
+ export const R = 0.461526;
10
+ // ─── Critical Point ─────────────────────────────────────────────────────────
11
+ /** Critical temperature [K] */
12
+ export const Tc = 647.096;
13
+ /** Critical pressure [MPa] */
14
+ export const Pc = 22.064;
15
+ /** Critical density [kg/m³] */
16
+ export const RHOc = 322;
17
+ // ─── Triple Point ───────────────────────────────────────────────────────────
18
+ /** Triple point pressure [MPa] */
19
+ export const Pt = 0.000611657;
20
+ // ─── Overall Validity Ranges ────────────────────────────────────────────────
21
+ /** Minimum pressure [MPa] */
22
+ export const P_MIN = 0.000611212677444;
23
+ /** Maximum pressure [MPa] */
24
+ export const P_MAX = 100.0;
25
+ /** Minimum temperature [K] (273.15 K = 0 °C) */
26
+ export const T_MIN = 273.15;
27
+ /** Maximum temperature [K] (2273.15 K = 2000 °C) */
28
+ export const T_MAX = 2273.15;
29
+ /** Minimum specific entropy [kJ/(kg·K)] */
30
+ export const S_MIN = -0.00015454959194;
31
+ /** Maximum specific entropy [kJ/(kg·K)] */
32
+ export const S_MAX = 8.668866265157533;
33
+ /** Minimum specific enthalpy [kJ/kg] */
34
+ export const H_MIN = -0.041587825987;
35
+ /** Maximum specific enthalpy [kJ/kg] */
36
+ export const H_MAX = 7365.802234015646;
37
+ // ─── Region 2 Boundaries ───────────────────────────────────────────────────
38
+ /** Region 2 minimum temperature for high-P subregions [K] (623.15 K = 350 °C) */
39
+ export const R2_T_MIN = 623.15;
40
+ /** Region 2 maximum temperature for backward eqs [K] (1073.15 K = 800 °C) */
41
+ export const R2_T_MAX = 1073.15;
42
+ /** Region 2 critical entropy boundary [kJ/(kg·K)] */
43
+ export const R2_S_CRT = 5.85;
44
+ /** Region 2 critical pressure boundary [MPa] */
45
+ export const R2_P_CRT = 4.0;
46
+ // ─── Region 2-3 Boundary ───────────────────────────────────────────────────
47
+ /** B23 minimum pressure [MPa] */
48
+ export const B23_P_MIN = 16.5291642526;
49
+ /** B23 maximum temperature [K] */
50
+ export const B23_T_MAX = 863.15;
51
+ // ─── Region 3 Boundaries ───────────────────────────────────────────────────
52
+ /** Region 3 minimum temperature [K] */
53
+ export const R3_T_MIN = 623.15;
54
+ /** Region 3 critical entropy [kJ/(kg·K)] */
55
+ export const R3_S_CRT = 4.41202148223476;
56
+ /** Region 3 critical enthalpy [kJ/kg] */
57
+ export const R3_H_CRT = 2087.5468451171537;
58
+ // ─── Region 5 Boundaries ───────────────────────────────────────────────────
59
+ /** Region 5 minimum temperature [K] */
60
+ export const R5_T_MIN = 1073.15;
61
+ /** Region 5 maximum pressure [MPa] */
62
+ export const R5_P_MAX = 50;
63
+ /** Region 5 maximum temperature [K] */
64
+ export const R5_T_MAX = 2273.15;
65
+ // ─── B23 Entropy/Enthalpy Boundaries ────────────────────────────────────────
66
+ /** B23 minimum entropy [kJ/(kg·K)] */
67
+ export const B23_S_MIN = 5.048096828;
68
+ /** B23 maximum entropy [kJ/(kg·K)] */
69
+ export const B23_S_MAX = 5.260578707;
70
+ /** B23 minimum enthalpy [kJ/kg] */
71
+ export const B23_H_MIN = 2563.592004;
72
+ /** B23 maximum enthalpy [kJ/kg] */
73
+ export const B23_H_MAX = 2812.942061;
74
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+EAA+E;AAE/E,kDAAkD;AAClD,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;AAE1B,+EAA+E;AAE/E,+BAA+B;AAC/B,MAAM,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC;AAE1B,8BAA8B;AAC9B,MAAM,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC;AAEzB,+BAA+B;AAC/B,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC;AAExB,+EAA+E;AAE/E,kCAAkC;AAClC,MAAM,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC;AAE9B,+EAA+E;AAE/E,6BAA6B;AAC7B,MAAM,CAAC,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAEvC,6BAA6B;AAC7B,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,CAAC;AAE3B,gDAAgD;AAChD,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC;AAE5B,oDAAoD;AACpD,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAC;AAE7B,2CAA2C;AAC3C,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,gBAAgB,CAAC;AAEvC,2CAA2C;AAC3C,MAAM,CAAC,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAEvC,wCAAwC;AACxC,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,cAAc,CAAC;AAErC,wCAAwC;AACxC,MAAM,CAAC,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAEvC,8EAA8E;AAE9E,iFAAiF;AACjF,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE/B,6EAA6E;AAC7E,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC;AAEhC,qDAAqD;AACrD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC;AAE7B,gDAAgD;AAChD,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAE5B,8EAA8E;AAE9E,iCAAiC;AACjC,MAAM,CAAC,MAAM,SAAS,GAAG,aAAa,CAAC;AAEvC,kCAAkC;AAClC,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC;AAEhC,8EAA8E;AAE9E,uCAAuC;AACvC,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE/B,4CAA4C;AAC5C,MAAM,CAAC,MAAM,QAAQ,GAAG,gBAAgB,CAAC;AAEzC,yCAAyC;AACzC,MAAM,CAAC,MAAM,QAAQ,GAAG,kBAAkB,CAAC;AAE3C,8EAA8E;AAE9E,uCAAuC;AACvC,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC;AAEhC,sCAAsC;AACtC,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,CAAC;AAE3B,uCAAuC;AACvC,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC;AAEhC,+EAA+E;AAE/E,sCAAsC;AACtC,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;AAErC,sCAAsC;AACtC,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;AAErC,mCAAmC;AACnC,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;AAErC,mCAAmC;AACnC,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { Region } from '../types.js';
2
+ /**
3
+ * Detect the IAPWS-IF97 region for given P and T.
4
+ * @returns Region number (1–5) or -1 if out of range
5
+ */
6
+ export declare function detectRegionPT(p: number, T: number): Region | -1;
7
+ /**
8
+ * Detect region for P-H inputs.
9
+ */
10
+ export declare function detectRegionPH(p: number, h: number): Region | -1;
11
+ /**
12
+ * Detect region for P-S inputs.
13
+ */
14
+ export declare function detectRegionPS(p: number, s: number): Region | -1;
15
+ /**
16
+ * Detect the IAPWS-IF97 region for given H and S.
17
+ * Implements the zone-based detection from the IAPWS supplementary release.
18
+ *
19
+ * @param h - Specific enthalpy [kJ/kg]
20
+ * @param s - Specific entropy [kJ/(kg·K)]
21
+ * @returns Region number (1–5) or -1 if out of range
22
+ */
23
+ export declare function detectRegionHS(h: number, s: number): Region | -1;
24
+ //# sourceMappingURL=region-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"region-detector.d.ts","sourceRoot":"","sources":["../../src/core/region-detector.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CAehE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CAwBhE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CAwBhE;AAsKD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CA8IhE"}
@@ -0,0 +1,409 @@
1
+ /**
2
+ * Region detection for various input modes.
3
+ */
4
+ import * as C from '../constants.js';
5
+ import { saturationTemperature } from '../regions/region4.js';
6
+ import { boundary23_P_to_T, boundary23_T_to_P } from '../regions/boundaries.js';
7
+ import { region1 } from '../regions/region1.js';
8
+ import { region2 } from '../regions/region2.js';
9
+ import { region5 } from '../regions/region5.js';
10
+ import { Region } from '../types.js';
11
+ /**
12
+ * Detect the IAPWS-IF97 region for given P and T.
13
+ * @returns Region number (1–5) or -1 if out of range
14
+ */
15
+ export function detectRegionPT(p, T) {
16
+ if (T > 1073.15 && T <= 2273.15 && p >= C.P_MIN && p <= 50) {
17
+ return Region.Region5;
18
+ }
19
+ if (p >= C.P_MIN && p <= C.B23_P_MIN) {
20
+ const Tsat = saturationTemperature(p);
21
+ if (T >= 273.15 && T <= Tsat)
22
+ return Region.Region1;
23
+ if (T > Tsat && T <= 1073.15)
24
+ return Region.Region2;
25
+ }
26
+ else if (p > C.B23_P_MIN && p <= 100) {
27
+ const Tb23 = boundary23_P_to_T(p);
28
+ if (T >= 273.15 && T <= 623.15)
29
+ return Region.Region1;
30
+ if (T > 623.15 && T < Tb23)
31
+ return Region.Region3;
32
+ if (T >= Tb23 && T <= 1073.15)
33
+ return Region.Region2;
34
+ }
35
+ return -1;
36
+ }
37
+ /**
38
+ * Detect region for P-H inputs.
39
+ */
40
+ export function detectRegionPH(p, h) {
41
+ if (p >= C.P_MIN && p <= C.B23_P_MIN) {
42
+ const Tsat = saturationTemperature(p);
43
+ const h14 = region1(p, Tsat).enthalpy;
44
+ const h24 = region2(p, Tsat).enthalpy;
45
+ const h25 = region2(p, 1073.15).enthalpy;
46
+ const hmin = region1(p, 273.15).enthalpy;
47
+ if (hmin <= h && h <= h14)
48
+ return Region.Region1;
49
+ if (h14 < h && h < h24)
50
+ return Region.Region4;
51
+ if (h24 <= h && h <= h25)
52
+ return Region.Region2;
53
+ if (h25 < h && p <= 50)
54
+ return Region.Region5;
55
+ }
56
+ else if (p > C.B23_P_MIN && p <= 100) {
57
+ const hmin = region1(p, 273.15).enthalpy;
58
+ const h13 = region1(p, 623.15).enthalpy;
59
+ const h32 = region2(p, boundary23_P_to_T(p)).enthalpy;
60
+ const h25 = region2(p, 1073.15).enthalpy;
61
+ if (hmin <= h && h <= h13)
62
+ return Region.Region1;
63
+ if (h13 < h && h < h32)
64
+ return p < C.Pc ? Region.Region4 : Region.Region3;
65
+ if (h32 <= h && h <= h25)
66
+ return Region.Region2;
67
+ if (h25 < h && p <= 50)
68
+ return Region.Region5;
69
+ }
70
+ return -1;
71
+ }
72
+ /**
73
+ * Detect region for P-S inputs.
74
+ */
75
+ export function detectRegionPS(p, s) {
76
+ if (p >= C.P_MIN && p <= C.B23_P_MIN) {
77
+ const Tsat = saturationTemperature(p);
78
+ const smin = region1(p, 273.15).entropy;
79
+ const s14 = region1(p, Tsat).entropy;
80
+ const s24 = region2(p, Tsat).entropy;
81
+ const s25 = region2(p, 1073.15).entropy;
82
+ if (smin <= s && s <= s14)
83
+ return Region.Region1;
84
+ if (s14 < s && s < s24)
85
+ return Region.Region4;
86
+ if (s24 <= s && s <= s25)
87
+ return Region.Region2;
88
+ if (s25 < s && p <= 50)
89
+ return Region.Region5;
90
+ }
91
+ else if (p > C.B23_P_MIN && p <= 100) {
92
+ const smin = region1(p, 273.15).entropy;
93
+ const s13 = region1(p, 623.15).entropy;
94
+ const s32 = region2(p, boundary23_P_to_T(p)).entropy;
95
+ const s25 = region2(p, 1073.15).entropy;
96
+ if (smin <= s && s <= s13)
97
+ return Region.Region1;
98
+ if (s13 < s && s < s32)
99
+ return p < C.Pc ? Region.Region4 : Region.Region3;
100
+ if (s32 <= s && s <= s25)
101
+ return Region.Region2;
102
+ if (s25 < s && p <= 50)
103
+ return Region.Region5;
104
+ }
105
+ return -1;
106
+ }
107
+ // ─── H-S Boundary Helper Functions ──────────────────────────────────────────
108
+ // From IAPWS Supplementary Release on backward equations p(h,s)
109
+ /**
110
+ * Saturated liquid enthalpy boundary for Region 1 (Eq. 3).
111
+ * h'_1(s)
112
+ */
113
+ function h1Sat(s) {
114
+ const TABLE = [
115
+ [0, 14, 0.332171191705237], [0, 36, 6.11217706323497e-4], [1, 3, -8.82092478906822],
116
+ [1, 16, -0.45562819254325], [2, 0, -2.63483840850452e-5], [2, 5, -22.3949661148062],
117
+ [3, 4, -4.28398660164013], [3, 36, -0.616679338856916], [4, 4, -14.68230311044],
118
+ [4, 16, 284.523138727299], [4, 24, -113.398503195444], [5, 18, 1156.71380760859],
119
+ [5, 24, 395.551267359325], [7, 1, -1.54891257229285], [8, 4, 19.4486637751291],
120
+ [12, 2, -3.57915139457043], [12, 4, -3.35369414148819], [14, 1, -0.66442679633246],
121
+ [14, 22, 32332.1885383934], [16, 10, 3317.66744667084], [20, 12, -22350.1257931087],
122
+ [20, 28, 5739538.75852936], [22, 8, 173.226193407919], [24, 3, -0.0363968822121321],
123
+ [28, 0, 8.34596332878346e-7], [32, 6, 5.03611916682674], [32, 8, 65.5444787064505],
124
+ ];
125
+ const sig = s / 3.8;
126
+ let h = 0;
127
+ for (const [I, J, N] of TABLE) {
128
+ h += N * Math.pow(sig - 1.09, I) * Math.pow(sig + 0.0000366, J);
129
+ }
130
+ return 1700 * h;
131
+ }
132
+ /**
133
+ * Region 1 / Region 3 boundary enthalpy (Eq. 1, B13).
134
+ * h_13(s)
135
+ */
136
+ function h13Boundary(s) {
137
+ const TABLE = [
138
+ [0, 0, 0.913965547600543], [1, -2, -0.0000430944856041991], [1, 2, 60.3235694765419],
139
+ [3, -12, 1.17518273082168e-18], [5, -4, 0.220000904781292], [6, -3, -69.0815545851641],
140
+ ];
141
+ const sig = s / 3.8;
142
+ let h = 0;
143
+ for (const [I, J, N] of TABLE) {
144
+ h += N * Math.pow(sig - 0.884, I) * Math.pow(sig - 0.864, J);
145
+ }
146
+ return 1700 * h;
147
+ }
148
+ /**
149
+ * Region 3a / Region 4 saturation boundary (Eq. 4).
150
+ * h'_3a(s)
151
+ */
152
+ function h3aSat(s) {
153
+ const TABLE = [
154
+ [0, 1, 0.822673364673336], [0, 4, 0.181977213534479], [0, 10, -0.0112000260313624],
155
+ [0, 16, -7.46778287048033e-4], [2, 1, -0.179046263257381], [3, 36, 0.0424220110836657],
156
+ [4, 3, -0.341355823438768], [4, 16, -2.09881740853565], [5, 20, -8.22477343323596],
157
+ [5, 36, -4.99684082076008], [6, 4, 0.191413958471069], [7, 2, 0.0581062241093136],
158
+ [7, 28, -1655.05498701029], [7, 32, 1588.70443421201], [10, 14, -85.0623535172818],
159
+ [10, 32, -31771.4386511207], [10, 36, -94589.0406632871], [32, 0, -1.3927384708869e-6],
160
+ [32, 6, 0.63105253224098],
161
+ ];
162
+ const sig = s / 3.8;
163
+ let h = 0;
164
+ for (const [I, J, N] of TABLE) {
165
+ h += N * Math.pow(sig - 1.09, I) * Math.pow(sig + 0.0000366, J);
166
+ }
167
+ return 1700 * h;
168
+ }
169
+ /**
170
+ * Region 2ab / Region 4 saturation boundary (Eq. 5).
171
+ * h"_2ab(s)
172
+ */
173
+ function h2abSat(s) {
174
+ const TABLE = [
175
+ [1, 8, -524.581170928788], [1, 24, -9269471.88142218], [2, 4, -237.385107491666],
176
+ [2, 32, 2.10770155812776e10], [4, 1, -23.9494562010986], [4, 2, 221.802480294197],
177
+ [7, 7, -5104725.33393438], [8, 5, 1249813.96109147], [8, 12, 2.00008436996201e9],
178
+ [10, 1, -815.158509791035], [12, 0, -157.612685637523], [12, 7, -1.14200422332791e10],
179
+ [18, 10, 6.62364680776872e15], [20, 12, -2.27622818296144e18], [24, 32, -1.71048081348406e31],
180
+ [28, 8, 6.60788766938091e15], [28, 12, 1.66320055886021e22], [28, 20, -2.18003784381501e29],
181
+ [28, 22, -7.87276140295618e29], [28, 24, 1.51062329700346e31], [32, 2, 7.95732170300541e6],
182
+ [32, 7, 1.31957647355347e15], [32, 12, -3.2509706829914e23], [32, 14, -4.18600611419248e25],
183
+ [32, 24, 2.97478906557467e34], [36, 10, -9.53588761745473e19], [36, 12, 1.66957699620939e24],
184
+ [36, 20, -1.75407764869978e32], [36, 22, 3.47581490626396e34], [36, 28, -7.10971318427851e38],
185
+ ];
186
+ const sig1 = s / 5.21;
187
+ const sig2 = s / 9.2;
188
+ let h = 0;
189
+ for (const [I, J, N] of TABLE) {
190
+ h += N * Math.pow(1 / sig1 - 0.513, I) * Math.pow(sig2 - 0.524, J);
191
+ }
192
+ return 2800 * Math.exp(h);
193
+ }
194
+ /**
195
+ * Region 2c / Region 3b saturation boundary (Eq. 6).
196
+ * h"_2c3b(s)
197
+ */
198
+ function h2c3bSat(s) {
199
+ const TABLE = [
200
+ [0, 0, 1.04351280732769], [0, 3, -2.27807912708513], [0, 4, 1.80535256723202],
201
+ [1, 0, 0.420440834792042], [1, 12, -1.0572124483466e5], [5, 36, 4.36911607493884e24],
202
+ [6, 12, -3.28032702839753e11], [7, 16, -6.7868676080427e15], [8, 2, 7.43957464645363e3],
203
+ [8, 20, -3.56896445355761e19], [12, 32, 1.67590585186801e31], [16, 36, -3.55028625419105e37],
204
+ [22, 2, 3.96611982166538e11], [22, 32, -4.14716268484468e40], [24, 7, 3.59080103867382e18],
205
+ [36, 20, -1.16994334851995e40],
206
+ ];
207
+ const sig = s / 5.9;
208
+ let h = 0;
209
+ for (const [I, J, N] of TABLE) {
210
+ h += N * Math.pow(sig - 1.02, I) * Math.pow(sig - 0.726, J);
211
+ }
212
+ return 2800 * h * h * h * h;
213
+ }
214
+ /**
215
+ * Region 2/3 boundary temperature from h,s (Eq. 8).
216
+ * T_B23(h,s)
217
+ */
218
+ function tB23hs(h, s) {
219
+ const TABLE = [
220
+ [-12, 10, 6.2909626082981e-4], [-10, 8, -8.23453502583165e-4], [-8, 3, 5.15446951519474e-8],
221
+ [-4, 4, -1.17565945784945], [-3, 3, 3.48519684726192], [-2, -6, -5.07837382408313e-12],
222
+ [-2, 2, -2.84637670005479], [-2, 3, -2.36092263939673], [-2, 4, 6.01492324973779],
223
+ [0, 0, 1.48039650824546], [1, -3, 3.60075182221907e-4], [1, -2, -1.26700045009952e-2],
224
+ [1, 10, -1.22184332521413e6], [3, -2, 1.49276502463272e-1], [3, -1, 6.98733471798484e-1],
225
+ [5, -5, -2.52207040114321e-2], [6, -6, 1.47151930985213e-2], [6, -3, -1.08618917681849],
226
+ [8, -8, -9.36875039816322e-4], [8, -2, 8.19877897570217e1], [8, -1, -1.82041861521835e2],
227
+ [12, -12, 2.61907376402688e-6], [12, -1, -2.91626417025961e4], [14, -12, 1.40660774926165e-5],
228
+ [14, 1, 7.83237062349385e6],
229
+ ];
230
+ const mu = h / 3000;
231
+ const sig = s / 5.3;
232
+ let T = 0;
233
+ for (const [I, J, N] of TABLE) {
234
+ T += N * Math.pow(mu - 0.727, I) * Math.pow(sig - 0.864, J);
235
+ }
236
+ return 900 * T;
237
+ }
238
+ /**
239
+ * Backward equation P(h,s) for Region 2c (used for R2/R3 discrimination).
240
+ */
241
+ function backward2cPhs(h, s) {
242
+ const TABLE = [
243
+ [0, 0, 0.112225607199012], [0, 1, -3.39005953606712], [0, 2, -32.0503911730094],
244
+ [0, 3, -197.5973051049], [0, 4, -407.693861553446], [0, 8, 13294.3775222331],
245
+ [1, 0, 1.70846839774007], [1, 2, 37.3694198142245], [1, 5, 3581.44365815434],
246
+ [1, 8, 423014.446424664], [1, 14, -751071025.760063], [2, 2, 52.3446127607898],
247
+ [2, 3, -228.351290812417], [2, 7, -960652.417056937], [2, 10, -80705929.2526074],
248
+ [2, 18, 1626980172256.69], [3, 0, 0.772465073604171], [3, 5, 46392.9973837746],
249
+ [3, 8, -13731788.5134128], [3, 16, 1704703926305.12], [3, 18, -25110462818730.8],
250
+ [4, 18, 31774883083552.0], [5, 1, 53.8685623675312], [5, 4, -55308.9094625169],
251
+ [5, 6, -1028615.22421405], [5, 14, 2042494187562.34], [6, 8, 273918446.626977],
252
+ [6, 18, -2.63963146312685e15], [10, 7, -1078908541.08088], [12, 7, -29649262098.0124],
253
+ [16, 10, -1.11754907323424e15],
254
+ ];
255
+ const mu = h / 3500;
256
+ const sig = s / 5.9;
257
+ let P = 0;
258
+ for (const [I, J, N] of TABLE) {
259
+ P += N * Math.pow(mu - 0.7, I) * Math.pow(sig - 1.1, J);
260
+ }
261
+ return 100 * P * P * P * P;
262
+ }
263
+ /**
264
+ * Detect the IAPWS-IF97 region for given H and S.
265
+ * Implements the zone-based detection from the IAPWS supplementary release.
266
+ *
267
+ * @param h - Specific enthalpy [kJ/kg]
268
+ * @param s - Specific entropy [kJ/(kg·K)]
269
+ * @returns Region number (1–5) or -1 if out of range
270
+ */
271
+ export function detectRegionHS(h, s) {
272
+ // Pre-compute boundary reference points
273
+ const s13 = region1(100, 623.15).entropy;
274
+ const s13s = region1(C.B23_P_MIN, 623.15).entropy;
275
+ const sTPmax = region2(100, 1073.15).entropy;
276
+ const s2ab = region2(4, 1073.15).entropy;
277
+ const _sL = region1(C.P_MIN, 273.15);
278
+ const h4l = _sL.enthalpy;
279
+ const s4l = _sL.entropy;
280
+ const _sV = region2(C.P_MIN, 273.15);
281
+ const h4v = _sV.enthalpy;
282
+ const s4v = _sV.entropy;
283
+ const _Pmax = region2(C.P_MIN, 1073.15);
284
+ const smax = _Pmax.entropy;
285
+ // Check Region 5 first (before R2 overlap zones)
286
+ const r5lo = region5(50, 1073.15);
287
+ const r5hi = region5(C.P_MIN, 2273.15);
288
+ if (r5lo.entropy < s && s <= r5hi.entropy &&
289
+ r5lo.enthalpy < h && h <= r5hi.enthalpy) {
290
+ return Region.Region5;
291
+ }
292
+ // Helper: linear interpolation for saturation lower bound
293
+ const hSatLow = (sVal) => h4l + (sVal - s4l) / (s4v - s4l) * (h4v - h4l);
294
+ // Zone 1: smin <= s <= s13 (Region 1 / Region 4)
295
+ if (s >= _sL.entropy && s <= s13) {
296
+ const hmin = hSatLow(s);
297
+ const hs = h1Sat(s);
298
+ const hmax = region1(100, 623.15).enthalpy;
299
+ if (h >= hmin && h < hs)
300
+ return Region.Region4;
301
+ if (h >= hs && h <= hmax)
302
+ return Region.Region1;
303
+ }
304
+ // Zone 2: s13 < s <= s13s (Region 1 / Region 3 / Region 4)
305
+ else if (s > s13 && s <= s13s) {
306
+ const hmin = hSatLow(s);
307
+ const hs = h1Sat(s);
308
+ const h13 = h13Boundary(s);
309
+ const hmax = region1(100, 623.15).enthalpy * 1.1; // generous upper bound
310
+ if (h >= hmin && h < hs)
311
+ return Region.Region4;
312
+ if (h >= hs && h < h13)
313
+ return Region.Region1;
314
+ if (h >= h13 && h <= hmax)
315
+ return Region.Region3;
316
+ }
317
+ // Zone 3: s13s < s <= R3_CRT_S (Region 3 / Region 4)
318
+ else if (s > s13s && s <= C.R3_S_CRT) {
319
+ const hmin = hSatLow(s);
320
+ const hs = h3aSat(s);
321
+ const hmax = 2800; // generous upper bound for R3
322
+ if (h >= hmin && h < hs)
323
+ return Region.Region4;
324
+ if (h >= hs && h <= hmax)
325
+ return Region.Region3;
326
+ }
327
+ // Zone 4: R3_CRT_S < s < B23_S_MIN (Region 3 / Region 4)
328
+ else if (s > C.R3_S_CRT && s < C.B23_S_MIN) {
329
+ const hmin = hSatLow(s);
330
+ const hs = h2c3bSat(s);
331
+ const hmax = 2800; // generous upper bound for R3
332
+ if (h >= hmin && h < hs)
333
+ return Region.Region4;
334
+ if (h >= hs && h <= hmax)
335
+ return Region.Region3;
336
+ }
337
+ // Zone 5: B23_S_MIN <= s < B23_S_MAX (Region 2 / Region 3 / Region 4)
338
+ else if (s >= C.B23_S_MIN && s < C.B23_S_MAX) {
339
+ const hmin = hSatLow(s);
340
+ const hs = h2c3bSat(s);
341
+ const h23max = region2(100, 863.15).enthalpy;
342
+ const h23min = region2(C.B23_P_MIN, 623.15).enthalpy;
343
+ const hmax = region2(100, 1073.15).enthalpy;
344
+ if (hmin <= h && h < hs)
345
+ return Region.Region4;
346
+ if (hs <= h && h < h23min)
347
+ return Region.Region3;
348
+ if (h23min <= h && h < h23max) {
349
+ // Discriminate R2 vs R3 using B23 boundary
350
+ const Tb23 = tB23hs(h, s);
351
+ const Pb23 = boundary23_T_to_P(Tb23);
352
+ const Phs = backward2cPhs(h, s);
353
+ if (Phs <= Pb23)
354
+ return Region.Region2;
355
+ return Region.Region3;
356
+ }
357
+ if (h23max <= h && h <= hmax)
358
+ return Region.Region2;
359
+ }
360
+ // Zone 6: B23_S_MAX <= s < 5.85 (Region 2 / Region 4)
361
+ else if (s >= C.B23_S_MAX && s < 5.85) {
362
+ const hmin = hSatLow(s);
363
+ const hs = h2c3bSat(s);
364
+ const hmax = region2(100, 1073.15).enthalpy;
365
+ if (hmin <= h && h < hs)
366
+ return Region.Region4;
367
+ if (hs <= h && h <= hmax)
368
+ return Region.Region2;
369
+ }
370
+ // Zone 7: 5.85 <= s < sTPmax (Region 2 / Region 4, use h2abSat)
371
+ else if (s >= 5.85 && s < sTPmax) {
372
+ const hmin = hSatLow(s);
373
+ const hs = h2abSat(s);
374
+ const hmax = region2(100, 1073.15).enthalpy;
375
+ if (hmin <= h && h < hs)
376
+ return Region.Region4;
377
+ if (hs <= h && h <= hmax)
378
+ return Region.Region2;
379
+ }
380
+ // Zone 8: sTPmax <= s < s2ab (Region 2 / Region 4)
381
+ else if (s >= sTPmax && s < s2ab) {
382
+ const hmin = hSatLow(s);
383
+ const hs = h2abSat(s);
384
+ const hmax = region2(C.P_MIN, 1073.15).enthalpy;
385
+ if (hmin <= h && h < hs)
386
+ return Region.Region4;
387
+ if (hs <= h && h <= hmax)
388
+ return Region.Region2;
389
+ }
390
+ // Zone 9: s2ab <= s < s4v (Region 2 / Region 4)
391
+ else if (s >= s2ab && s < s4v) {
392
+ const hmin = hSatLow(s);
393
+ const hs = h2abSat(s);
394
+ const hmax = region2(C.P_MIN, 1073.15).enthalpy;
395
+ if (hmin <= h && h < hs)
396
+ return Region.Region4;
397
+ if (hs <= h && h <= hmax)
398
+ return Region.Region2;
399
+ }
400
+ // Zone 10: s4v <= s <= smax (Region 2 only, superheated low-P)
401
+ else if (s >= s4v && s <= smax) {
402
+ const hmin = region2(C.P_MIN, 273.15).enthalpy;
403
+ const hmax = region2(C.P_MIN, 1073.15).enthalpy;
404
+ if (hmin <= h && h <= hmax)
405
+ return Region.Region2;
406
+ }
407
+ return -1;
408
+ }
409
+ //# sourceMappingURL=region-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"region-detector.js","sourceRoot":"","sources":["../../src/core/region-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Main IF97 solve dispatcher.
3
+ * Computes full thermodynamic state including transport properties.
4
+ */
5
+ import type { SteamState, SolveInput } from '../types.js';
6
+ /**
7
+ * Solve for full thermodynamic state given pressure and temperature.
8
+ *
9
+ * @param p - Pressure [MPa]
10
+ * @param T - Temperature [K]
11
+ * @returns Complete steam state with transport properties
12
+ */
13
+ export declare function solvePT(p: number, T: number): SteamState;
14
+ /**
15
+ * Unified solver: compute full thermodynamic state from any supported input pair.
16
+ * Routes to the correct solver based on input mode, enriches with transport properties.
17
+ */
18
+ export declare function solve(input: SolveInput): SteamState;
19
+ //# sourceMappingURL=solver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solver.d.ts","sourceRoot":"","sources":["../../src/core/solver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAmB,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAqD3E;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CA6BxD;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CASnD"}