iapws-if97 2.0.2 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/README.md +33 -65
- package/dist/backward/hs.d.ts.map +1 -1
- package/dist/backward/hs.js +28 -42
- package/dist/backward/hs.js.map +1 -1
- package/dist/backward/ph.d.ts.map +1 -1
- package/dist/backward/ph.js +24 -5
- package/dist/backward/ph.js.map +1 -1
- package/dist/backward/ps.d.ts.map +1 -1
- package/dist/backward/ps.js +24 -5
- package/dist/backward/ps.js.map +1 -1
- package/dist/backward/solution-validation.d.ts +13 -0
- package/dist/backward/solution-validation.d.ts.map +1 -0
- package/dist/backward/solution-validation.js +85 -0
- package/dist/backward/solution-validation.js.map +1 -0
- package/dist/backward/th.d.ts.map +1 -1
- package/dist/backward/th.js +35 -5
- package/dist/backward/th.js.map +1 -1
- package/dist/backward/tolerances.d.ts +6 -0
- package/dist/backward/tolerances.d.ts.map +1 -0
- package/dist/backward/tolerances.js +21 -0
- package/dist/backward/tolerances.js.map +1 -0
- package/dist/backward/ts.d.ts.map +1 -1
- package/dist/backward/ts.js +35 -5
- package/dist/backward/ts.js.map +1 -1
- package/dist/constants.d.ts +34 -12
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +43 -13
- package/dist/constants.js.map +1 -1
- package/dist/core/region-detector.d.ts.map +1 -1
- package/dist/core/region-detector.js +56 -12
- package/dist/core/region-detector.js.map +1 -1
- package/dist/core/solver.d.ts.map +1 -1
- package/dist/core/solver.js +10 -4
- package/dist/core/solver.js.map +1 -1
- package/dist/regions/region3-subregions.d.ts +6 -2
- package/dist/regions/region3-subregions.d.ts.map +1 -1
- package/dist/regions/region3-subregions.js +15 -10
- package/dist/regions/region3-subregions.js.map +1 -1
- package/dist/regions/region3.d.ts.map +1 -1
- package/dist/regions/region3.js +3 -0
- package/dist/regions/region3.js.map +1 -1
- package/dist/regions/region4.d.ts +3 -1
- package/dist/regions/region4.d.ts.map +1 -1
- package/dist/regions/region4.js +9 -6
- package/dist/regions/region4.js.map +1 -1
- package/dist/saturation/common.d.ts.map +1 -1
- package/dist/saturation/common.js +23 -11
- package/dist/saturation/common.js.map +1 -1
- package/dist/saturation/region4-boundaries.d.ts +14 -0
- package/dist/saturation/region4-boundaries.d.ts.map +1 -0
- package/dist/saturation/region4-boundaries.js +79 -0
- package/dist/saturation/region4-boundaries.js.map +1 -0
- package/dist/saturation/region4-hs.d.ts +3 -0
- package/dist/saturation/region4-hs.d.ts.map +1 -0
- package/dist/saturation/region4-hs.js +82 -0
- package/dist/saturation/region4-hs.js.map +1 -0
- package/dist/saturation/two-phase.d.ts.map +1 -1
- package/dist/saturation/two-phase.js +4 -9
- package/dist/saturation/two-phase.js.map +1 -1
- package/dist/saturation.d.ts +6 -1
- package/dist/saturation.d.ts.map +1 -1
- package/dist/saturation.js +6 -1
- package/dist/saturation.js.map +1 -1
- package/dist/types.d.ts +8 -8
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { Region } from '../types.js';
|
|
2
|
-
import { Pc, R2_T_MIN, RHOc } from '../constants.js';
|
|
2
|
+
import { Pc, R2_T_MIN, RHOc, Tt } from '../constants.js';
|
|
3
3
|
import { region1 } from '../regions/region1.js';
|
|
4
4
|
import { region2 } from '../regions/region2.js';
|
|
5
5
|
import { region3ByRhoT } from '../regions/region3.js';
|
|
6
6
|
import { saturationPressure, saturationTemperature } from '../regions/region4.js';
|
|
7
7
|
import { region3SatVolume } from '../regions/region3-subregions.js';
|
|
8
8
|
import { newtonRaphson } from '../solvers/newton-raphson.js';
|
|
9
|
+
import { normalizeRegion4Pressure, normalizeRegion4Temperature, } from './region4-boundaries.js';
|
|
9
10
|
/** Tag a single-phase state as Region 4 with the given vapour quality. */
|
|
10
11
|
function withRegion4Metadata(state, quality) {
|
|
11
12
|
return { ...state, region: Region.Region4, quality };
|
|
@@ -38,24 +39,25 @@ function clampQuality(x) {
|
|
|
38
39
|
* @param p - Saturation pressure [MPa]
|
|
39
40
|
*/
|
|
40
41
|
export function saturationEndpointsAtPressure(p) {
|
|
41
|
-
const
|
|
42
|
-
|
|
42
|
+
const pressure = normalizeRegion4Pressure(p);
|
|
43
|
+
const temperature = normalizeRegion4Temperature(saturationTemperature(pressure));
|
|
44
|
+
if (pressure === Pc) {
|
|
43
45
|
const state = region3ByRhoT(RHOc, temperature);
|
|
44
|
-
return { pressure
|
|
46
|
+
return { pressure, temperature, liquid: state, vapor: state };
|
|
45
47
|
}
|
|
46
48
|
if (temperature > R2_T_MIN) {
|
|
47
49
|
return {
|
|
48
|
-
pressure
|
|
50
|
+
pressure,
|
|
49
51
|
temperature,
|
|
50
|
-
liquid: region3ByRhoT(solveR3Density(
|
|
51
|
-
vapor: region3ByRhoT(solveR3Density(
|
|
52
|
+
liquid: region3ByRhoT(solveR3Density(pressure, temperature, 0), temperature),
|
|
53
|
+
vapor: region3ByRhoT(solveR3Density(pressure, temperature, 1), temperature),
|
|
52
54
|
};
|
|
53
55
|
}
|
|
54
56
|
return {
|
|
55
|
-
pressure
|
|
57
|
+
pressure,
|
|
56
58
|
temperature,
|
|
57
|
-
liquid: region1(
|
|
58
|
-
vapor: region2(
|
|
59
|
+
liquid: region1(pressure, temperature),
|
|
60
|
+
vapor: region2(pressure, temperature),
|
|
59
61
|
};
|
|
60
62
|
}
|
|
61
63
|
/**
|
|
@@ -63,7 +65,17 @@ export function saturationEndpointsAtPressure(p) {
|
|
|
63
65
|
* @param T - Saturation temperature [K]
|
|
64
66
|
*/
|
|
65
67
|
export function saturationEndpointsAtTemperature(T) {
|
|
66
|
-
|
|
68
|
+
const temperature = normalizeRegion4Temperature(T);
|
|
69
|
+
const pressure = normalizeRegion4Pressure(saturationPressure(temperature));
|
|
70
|
+
if (temperature < Tt) {
|
|
71
|
+
return {
|
|
72
|
+
pressure,
|
|
73
|
+
temperature,
|
|
74
|
+
liquid: region1(pressure, temperature),
|
|
75
|
+
vapor: region2(pressure, temperature),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
return saturationEndpointsAtPressure(pressure);
|
|
67
79
|
}
|
|
68
80
|
/**
|
|
69
81
|
* Compute vapour quality from any extensive saturation property.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/saturation/common.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/saturation/common.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare function normalizeRegion4Pressure(p: number): number;
|
|
2
|
+
export declare function normalizeRegion4Temperature(T: number): number;
|
|
3
|
+
export declare function clampRegion4TemperatureBelowCritical(T: number): number;
|
|
4
|
+
export declare function isRegion4CriticalPressure(p: number): boolean;
|
|
5
|
+
export declare function isRegion4CriticalTemperature(T: number): boolean;
|
|
6
|
+
export declare function assertRegion4PressureStateInput(p: number, solverName: string): number;
|
|
7
|
+
export declare function assertRegion4TemperatureStateInput(T: number, solverName: string): number;
|
|
8
|
+
export declare function assertRegion4StateAllowed(pressure: number, temperature: number, solverName: string): void;
|
|
9
|
+
export declare function isCriticalRegion4Enthalpy(h: number): boolean;
|
|
10
|
+
export declare function isCriticalRegion4Entropy(s: number): boolean;
|
|
11
|
+
export declare function assertCriticalRegion4PHInput(p: number, h: number, solverName: string): void;
|
|
12
|
+
export declare function assertCriticalRegion4PSInput(p: number, s: number, solverName: string): void;
|
|
13
|
+
export declare function assertCriticalRegion4HSInput(h: number, s: number, solverName: string): void;
|
|
14
|
+
//# sourceMappingURL=region4-boundaries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"region4-boundaries.d.ts","sourceRoot":"","sources":["../../src/saturation/region4-boundaries.ts"],"names":[],"mappings":"AAGA,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK7D;AAED,wBAAgB,oCAAoC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE/D;AAMD,wBAAgB,+BAA+B,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CASrF;AAED,wBAAgB,kCAAkC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CASxF;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,IAAI,CAIN;AAED,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAI3F;AAED,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAI3F;AAED,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAI3F"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import * as C from '../constants.js';
|
|
2
|
+
import { IF97Error, OutOfRangeError } from '../types.js';
|
|
3
|
+
export function normalizeRegion4Pressure(p) {
|
|
4
|
+
if (Math.abs(p - C.P_MIN) <= C.REGION4_PRESSURE_TOLERANCE)
|
|
5
|
+
return C.P_MIN;
|
|
6
|
+
if (Math.abs(p - C.Pt) <= C.REGION4_PRESSURE_TOLERANCE)
|
|
7
|
+
return C.Pt;
|
|
8
|
+
if (Math.abs(p - C.Pc) <= C.REGION4_PRESSURE_TOLERANCE)
|
|
9
|
+
return C.Pc;
|
|
10
|
+
return p;
|
|
11
|
+
}
|
|
12
|
+
export function normalizeRegion4Temperature(T) {
|
|
13
|
+
if (Math.abs(T - C.T_MIN) <= C.REGION4_TEMPERATURE_TOLERANCE)
|
|
14
|
+
return C.T_MIN;
|
|
15
|
+
if (Math.abs(T - C.Tt) <= C.REGION4_TEMPERATURE_TOLERANCE)
|
|
16
|
+
return C.Tt;
|
|
17
|
+
if (Math.abs(T - C.Tc) <= C.REGION4_TEMPERATURE_TOLERANCE)
|
|
18
|
+
return C.Tc;
|
|
19
|
+
return T;
|
|
20
|
+
}
|
|
21
|
+
export function clampRegion4TemperatureBelowCritical(T) {
|
|
22
|
+
return Math.max(C.Tt, Math.min(T, C.Tc - C.REGION4_SUBCRITICAL_TEMPERATURE_MARGIN));
|
|
23
|
+
}
|
|
24
|
+
export function isRegion4CriticalPressure(p) {
|
|
25
|
+
return normalizeRegion4Pressure(p) === C.Pc;
|
|
26
|
+
}
|
|
27
|
+
export function isRegion4CriticalTemperature(T) {
|
|
28
|
+
return normalizeRegion4Temperature(T) === C.Tc;
|
|
29
|
+
}
|
|
30
|
+
function criticalPointMessage(solverName) {
|
|
31
|
+
return `${solverName} does not support the critical point P=${C.Pc} MPa, T=${C.Tc} K as a Region 4 saturation state`;
|
|
32
|
+
}
|
|
33
|
+
export function assertRegion4PressureStateInput(p, solverName) {
|
|
34
|
+
const pressure = normalizeRegion4Pressure(p);
|
|
35
|
+
if (pressure < C.Pt || pressure > C.Pc) {
|
|
36
|
+
throw new OutOfRangeError('Pressure', p, C.Pt, C.Pc);
|
|
37
|
+
}
|
|
38
|
+
if (pressure === C.Pc) {
|
|
39
|
+
throw new IF97Error(criticalPointMessage(solverName));
|
|
40
|
+
}
|
|
41
|
+
return pressure;
|
|
42
|
+
}
|
|
43
|
+
export function assertRegion4TemperatureStateInput(T, solverName) {
|
|
44
|
+
const temperature = normalizeRegion4Temperature(T);
|
|
45
|
+
if (temperature < C.Tt || temperature > C.Tc) {
|
|
46
|
+
throw new OutOfRangeError('Temperature', T, C.Tt, C.Tc);
|
|
47
|
+
}
|
|
48
|
+
if (temperature === C.Tc) {
|
|
49
|
+
throw new IF97Error(criticalPointMessage(solverName));
|
|
50
|
+
}
|
|
51
|
+
return temperature;
|
|
52
|
+
}
|
|
53
|
+
export function assertRegion4StateAllowed(pressure, temperature, solverName) {
|
|
54
|
+
if (isRegion4CriticalPressure(pressure) || isRegion4CriticalTemperature(temperature)) {
|
|
55
|
+
throw new IF97Error(criticalPointMessage(solverName));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export function isCriticalRegion4Enthalpy(h) {
|
|
59
|
+
return Math.abs(h - C.R3_H_CRT) <= C.REGION4_CRITICAL_HS_TOLERANCE;
|
|
60
|
+
}
|
|
61
|
+
export function isCriticalRegion4Entropy(s) {
|
|
62
|
+
return Math.abs(s - C.R3_S_CRT) <= C.REGION4_CRITICAL_HS_TOLERANCE;
|
|
63
|
+
}
|
|
64
|
+
export function assertCriticalRegion4PHInput(p, h, solverName) {
|
|
65
|
+
if (isRegion4CriticalPressure(p) && isCriticalRegion4Enthalpy(h)) {
|
|
66
|
+
throw new IF97Error(criticalPointMessage(solverName));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
export function assertCriticalRegion4PSInput(p, s, solverName) {
|
|
70
|
+
if (isRegion4CriticalPressure(p) && isCriticalRegion4Entropy(s)) {
|
|
71
|
+
throw new IF97Error(criticalPointMessage(solverName));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export function assertCriticalRegion4HSInput(h, s, solverName) {
|
|
75
|
+
if (isCriticalRegion4Enthalpy(h) && isCriticalRegion4Entropy(s)) {
|
|
76
|
+
throw new IF97Error(criticalPointMessage(solverName));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=region4-boundaries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"region4-boundaries.js","sourceRoot":"","sources":["../../src/saturation/region4-boundaries.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"region4-hs.d.ts","sourceRoot":"","sources":["../../src/saturation/region4-hs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAkFnD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAkD9E"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import * as C from '../constants.js';
|
|
2
|
+
import { bracketedNewton } from '../solvers/bracketed-newton.js';
|
|
3
|
+
import { mixSaturationState, saturationEndpointsAtTemperature } from './common.js';
|
|
4
|
+
import { assertRegion4StateAllowed, clampRegion4TemperatureBelowCritical, } from './region4-boundaries.js';
|
|
5
|
+
const REGION4_QUALITY_TOLERANCE = 1e-6;
|
|
6
|
+
function isClose(a, b) {
|
|
7
|
+
return Math.abs(a - b) <= 1e-9 * Math.max(1, Math.abs(a), Math.abs(b));
|
|
8
|
+
}
|
|
9
|
+
function rawQualityFromSaturationProperty(liquidValue, vaporValue, mixtureValue) {
|
|
10
|
+
return (mixtureValue - liquidValue) / (vaporValue - liquidValue);
|
|
11
|
+
}
|
|
12
|
+
function isAdmissibleQuality(quality) {
|
|
13
|
+
return Number.isFinite(quality)
|
|
14
|
+
&& quality >= -REGION4_QUALITY_TOLERANCE
|
|
15
|
+
&& quality <= 1 + REGION4_QUALITY_TOLERANCE;
|
|
16
|
+
}
|
|
17
|
+
function entropyResidual(h, s, temperatureGuess) {
|
|
18
|
+
const endpoints = saturationEndpointsAtTemperature(clampRegion4TemperatureBelowCritical(temperatureGuess));
|
|
19
|
+
const quality = rawQualityFromSaturationProperty(endpoints.liquid.enthalpy, endpoints.vapor.enthalpy, h);
|
|
20
|
+
if (!Number.isFinite(quality)) {
|
|
21
|
+
return Number.NaN;
|
|
22
|
+
}
|
|
23
|
+
return endpoints.liquid.entropy * (1 - quality) + endpoints.vapor.entropy * quality - s;
|
|
24
|
+
}
|
|
25
|
+
function finalizeRegion4HSState(h, s, temperature) {
|
|
26
|
+
const endpoints = saturationEndpointsAtTemperature(temperature);
|
|
27
|
+
const qualityFromEnthalpy = rawQualityFromSaturationProperty(endpoints.liquid.enthalpy, endpoints.vapor.enthalpy, h);
|
|
28
|
+
const qualityFromEntropy = rawQualityFromSaturationProperty(endpoints.liquid.entropy, endpoints.vapor.entropy, s);
|
|
29
|
+
if (!isAdmissibleQuality(qualityFromEnthalpy) || !isAdmissibleQuality(qualityFromEntropy)) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
if (Math.abs(qualityFromEnthalpy - qualityFromEntropy) > REGION4_QUALITY_TOLERANCE) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
if (Math.abs(entropyResidual(h, s, temperature)) > C.REGION4_HS_RESIDUAL_TOLERANCE) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
assertRegion4StateAllowed(endpoints.pressure, endpoints.temperature, 'Region4HS');
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
return mixSaturationState(endpoints, qualityFromEnthalpy);
|
|
45
|
+
}
|
|
46
|
+
export function tryRegion4HSState(h, s) {
|
|
47
|
+
const lower = C.Tt;
|
|
48
|
+
const upper = clampRegion4TemperatureBelowCritical(C.Tc);
|
|
49
|
+
const lowerState = finalizeRegion4HSState(h, s, lower);
|
|
50
|
+
if (lowerState !== null) {
|
|
51
|
+
return lowerState;
|
|
52
|
+
}
|
|
53
|
+
const upperState = finalizeRegion4HSState(h, s, upper);
|
|
54
|
+
if (upperState !== null) {
|
|
55
|
+
return upperState;
|
|
56
|
+
}
|
|
57
|
+
let previousTemperature = lower;
|
|
58
|
+
let previousResidual = entropyResidual(h, s, lower);
|
|
59
|
+
for (let i = 1; i <= C.REGION4_HS_BRACKET_SEGMENTS; i++) {
|
|
60
|
+
const temperature = lower + (upper - lower) * (i / C.REGION4_HS_BRACKET_SEGMENTS);
|
|
61
|
+
const residual = entropyResidual(h, s, temperature);
|
|
62
|
+
if (!Number.isFinite(previousResidual) || !Number.isFinite(residual)) {
|
|
63
|
+
previousTemperature = temperature;
|
|
64
|
+
previousResidual = residual;
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (isClose(previousResidual, 0)) {
|
|
68
|
+
return finalizeRegion4HSState(h, s, previousTemperature);
|
|
69
|
+
}
|
|
70
|
+
if (isClose(residual, 0)) {
|
|
71
|
+
return finalizeRegion4HSState(h, s, temperature);
|
|
72
|
+
}
|
|
73
|
+
if (previousResidual * residual < 0) {
|
|
74
|
+
const root = bracketedNewton((candidateTemperature) => entropyResidual(h, s, candidateTemperature), previousTemperature, temperature, (previousTemperature + temperature) / 2, { tolerance: C.REGION4_HS_RESIDUAL_TOLERANCE });
|
|
75
|
+
return finalizeRegion4HSState(h, s, root);
|
|
76
|
+
}
|
|
77
|
+
previousTemperature = temperature;
|
|
78
|
+
previousResidual = residual;
|
|
79
|
+
}
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=region4-hs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"region4-hs.js","sourceRoot":"","sources":["../../src/saturation/region4-hs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"two-phase.d.ts","sourceRoot":"","sources":["../../src/saturation/two-phase.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"two-phase.d.ts","sourceRoot":"","sources":["../../src/saturation/two-phase.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAYnD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,eAAe,CAS7D;AAID;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,eAAe,CAQ7D"}
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
* Reference: IAPWS-IF97, Region 4 (Saturation Line)
|
|
8
8
|
*/
|
|
9
9
|
import { OutOfRangeError } from '../types.js';
|
|
10
|
-
import { Pc, Tc, Pt, T_MIN } from '../constants.js';
|
|
11
10
|
import { saturationPressure } from '../regions/region4.js';
|
|
12
11
|
import { mixSaturationState, saturationEndpointsAtPressure } from './common.js';
|
|
12
|
+
import { assertRegion4PressureStateInput, assertRegion4TemperatureStateInput, normalizeRegion4Pressure, } from './region4-boundaries.js';
|
|
13
13
|
// ─── solvePx ────────────────────────────────────────────────────────────────
|
|
14
14
|
/**
|
|
15
15
|
* Solve for thermodynamic state given pressure and vapour quality.
|
|
@@ -20,10 +20,7 @@ export function solvePx(p, x) {
|
|
|
20
20
|
if (x < 0 || x > 1) {
|
|
21
21
|
throw new OutOfRangeError('Quality', x, 0, 1);
|
|
22
22
|
}
|
|
23
|
-
|
|
24
|
-
throw new OutOfRangeError('Pressure', p, Pt, Pc);
|
|
25
|
-
}
|
|
26
|
-
return mixSaturationState(saturationEndpointsAtPressure(p), x);
|
|
23
|
+
return mixSaturationState(saturationEndpointsAtPressure(assertRegion4PressureStateInput(p, 'solvePx')), x);
|
|
27
24
|
}
|
|
28
25
|
// ─── solveTx ────────────────────────────────────────────────────────────────
|
|
29
26
|
/**
|
|
@@ -35,10 +32,8 @@ export function solveTx(T, x) {
|
|
|
35
32
|
if (x < 0 || x > 1) {
|
|
36
33
|
throw new OutOfRangeError('Quality', x, 0, 1);
|
|
37
34
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
const p = saturationPressure(T);
|
|
35
|
+
const temperature = assertRegion4TemperatureStateInput(T, 'solveTx');
|
|
36
|
+
const p = normalizeRegion4Pressure(saturationPressure(temperature));
|
|
42
37
|
return solvePx(p, x);
|
|
43
38
|
}
|
|
44
39
|
//# sourceMappingURL=two-phase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"two-phase.js","sourceRoot":"","sources":["../../src/saturation/two-phase.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"two-phase.js","sourceRoot":"","sources":["../../src/saturation/two-phase.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EACL,+BAA+B,EAC/B,kCAAkC,EAClC,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AAEjC,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,CAAS,EAAE,CAAS;IAC1C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,kBAAkB,CACvB,6BAA6B,CAAC,+BAA+B,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAC5E,CAAC,CACF,CAAC;AACJ,CAAC;AAED,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,CAAS,EAAE,CAAS;IAC1C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,WAAW,GAAG,kCAAkC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACrE,MAAM,CAAC,GAAG,wBAAwB,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC;IACpE,OAAO,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvB,CAAC"}
|
package/dist/saturation.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Public saturation helper exports.
|
|
2
|
+
* Public low-level saturation helper exports.
|
|
3
|
+
*
|
|
4
|
+
* These functions expose the mathematical Region 4 boundary relations.
|
|
5
|
+
* They normalize values near Pt/Pc/Tt/Tc, but they are not state constructors:
|
|
6
|
+
* high-level solvers such as solvePx/solveTx apply stricter triple-point and
|
|
7
|
+
* critical-point rules.
|
|
3
8
|
*/
|
|
4
9
|
export { saturationPressure, saturationTemperature } from './regions/region4.js';
|
|
5
10
|
//# sourceMappingURL=saturation.d.ts.map
|
package/dist/saturation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saturation.d.ts","sourceRoot":"","sources":["../src/saturation.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"saturation.d.ts","sourceRoot":"","sources":["../src/saturation.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/saturation.js
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Public saturation helper exports.
|
|
2
|
+
* Public low-level saturation helper exports.
|
|
3
|
+
*
|
|
4
|
+
* These functions expose the mathematical Region 4 boundary relations.
|
|
5
|
+
* They normalize values near Pt/Pc/Tt/Tc, but they are not state constructors:
|
|
6
|
+
* high-level solvers such as solvePx/solveTx apply stricter triple-point and
|
|
7
|
+
* critical-point rules.
|
|
3
8
|
*/
|
|
4
9
|
export { saturationPressure, saturationTemperature } from './regions/region4.js';
|
|
5
10
|
//# sourceMappingURL=saturation.js.map
|
package/dist/saturation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saturation.js","sourceRoot":"","sources":["../src/saturation.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"saturation.js","sourceRoot":"","sources":["../src/saturation.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export declare enum Region {
|
|
|
12
12
|
Region2 = 2,
|
|
13
13
|
/** Supercritical fluid */
|
|
14
14
|
Region3 = 3,
|
|
15
|
-
/** Two-phase (wet steam / saturation line) */
|
|
15
|
+
/** Two-phase (wet steam / saturation line, excluding the exact critical point) */
|
|
16
16
|
Region4 = 4,
|
|
17
17
|
/** High-temperature steam (T > 1073.15 K) */
|
|
18
18
|
Region5 = 5
|
|
@@ -44,16 +44,16 @@ export interface SteamState {
|
|
|
44
44
|
cv: number | null;
|
|
45
45
|
/** Speed of sound [m/s] */
|
|
46
46
|
speedOfSound: number | null;
|
|
47
|
-
/** Vapour quality (0–1), only defined
|
|
47
|
+
/** Vapour quality (0–1), only defined on accepted Region 4 saturation states */
|
|
48
48
|
quality: number | null;
|
|
49
|
-
/** Dynamic viscosity [Pa·s] */
|
|
50
|
-
viscosity: number;
|
|
51
|
-
/** Thermal conductivity [W/(m·K)] */
|
|
52
|
-
thermalConductivity: number;
|
|
49
|
+
/** Dynamic viscosity [Pa·s], null for two-phase mixtures */
|
|
50
|
+
viscosity: number | null;
|
|
51
|
+
/** Thermal conductivity [W/(m·K)], null for two-phase mixtures */
|
|
52
|
+
thermalConductivity: number | null;
|
|
53
53
|
/** Surface tension [N/m], only meaningful at saturation */
|
|
54
54
|
surfaceTension: number | null;
|
|
55
|
-
/** Static dielectric constant [dimensionless] */
|
|
56
|
-
dielectricConstant: number;
|
|
55
|
+
/** Static dielectric constant [dimensionless], null for two-phase mixtures */
|
|
56
|
+
dielectricConstant: number | null;
|
|
57
57
|
/** Ionization constant pKw [dimensionless], null outside released validity range */
|
|
58
58
|
ionizationConstant: number | null;
|
|
59
59
|
/** Isobaric cubic expansion coefficient [1/K] */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,uCAAuC;AACvC,oBAAY,MAAM;IAChB,0CAA0C;IAC1C,OAAO,IAAI;IACX,wBAAwB;IACxB,OAAO,IAAI;IACX,0BAA0B;IAC1B,OAAO,IAAI;IACX,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -14,7 +14,7 @@ export var Region;
|
|
|
14
14
|
Region[Region["Region2"] = 2] = "Region2";
|
|
15
15
|
/** Supercritical fluid */
|
|
16
16
|
Region[Region["Region3"] = 3] = "Region3";
|
|
17
|
-
/** Two-phase (wet steam / saturation line) */
|
|
17
|
+
/** Two-phase (wet steam / saturation line, excluding the exact critical point) */
|
|
18
18
|
Region[Region["Region4"] = 4] = "Region4";
|
|
19
19
|
/** High-temperature steam (T > 1073.15 K) */
|
|
20
20
|
Region[Region["Region5"] = 5] = "Region5";
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+EAA+E;AAE/E,uCAAuC;AACvC,MAAM,CAAN,IAAY,MAWX;AAXD,WAAY,MAAM;IAChB,0CAA0C;IAC1C,yCAAW,CAAA;IACX,wBAAwB;IACxB,yCAAW,CAAA;IACX,0BAA0B;IAC1B,yCAAW,CAAA;IACX,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+EAA+E;AAE/E,uCAAuC;AACvC,MAAM,CAAN,IAAY,MAWX;AAXD,WAAY,MAAM;IAChB,0CAA0C;IAC1C,yCAAW,CAAA;IACX,wBAAwB;IACxB,yCAAW,CAAA;IACX,0BAA0B;IAC1B,yCAAW,CAAA;IACX,kFAAkF;IAClF,yCAAW,CAAA;IACX,6CAA6C;IAC7C,yCAAW,CAAA;AACb,CAAC,EAXW,MAAM,KAAN,MAAM,QAWjB;AA6ID,+EAA+E;AAE/E,uDAAuD;AACvD,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,mEAAmE;AACnE,MAAM,OAAO,eAAgB,SAAQ,SAAS;IAE1B;IACA;IACA;IACA;IAJlB,YACkB,SAAiB,EACjB,KAAa,EACb,GAAW,EACX,GAAW;QAE3B,KAAK,CACH,GAAG,SAAS,MAAM,KAAK,qBAAqB,GAAG,KAAK,GAAG,GAAG,CAC3D,CAAC;QAPc,cAAS,GAAT,SAAS,CAAQ;QACjB,UAAK,GAAL,KAAK,CAAQ;QACb,QAAG,GAAH,GAAG,CAAQ;QACX,QAAG,GAAH,GAAG,CAAQ;QAK3B,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,uDAAuD;AACvD,MAAM,OAAO,gBAAiB,SAAQ,SAAS;IAE3B;IACA;IAFlB,YACkB,MAAc,EACd,UAAkB;QAElC,KAAK,CAAC,GAAG,MAAM,6BAA6B,UAAU,aAAa,CAAC,CAAC;QAHrD,WAAM,GAAN,MAAM,CAAQ;QACd,eAAU,GAAV,UAAU,CAAQ;QAGlC,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iapws-if97",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "TypeScript implementation of IAPWS-IF97 for water and steam properties, including forward/backward solvers, saturation states, and transport properties.",
|
|
5
5
|
"author": "jltonghui",
|
|
6
6
|
"repository": {
|