SaturationVaporPressure
Saturation vapor pressure of water over liquid water as a function of temperature: p_sat = p_std * exp(c1*a - c2*a^2 - c3*a^3 - c4*a^4) with a = 1 - T_boil/T (Seinfeld & Pandis Eq. 1.10). An empirical fit valid for liquid water (T > 273 K). Migrated from AtmosphericDynamics.jl@816cc391 src/seinfeld_pandis_ch1.jl:351 (`SaturationVaporPressure` @component). Algebraic (observed-only): T is an input parameter; a and p_sat are algebraic state outputs fixed by two explicit equations. Pressure is reported in Pa (the upstream module uses P_0 = 101325 Pa = 1013.25 mbar).
Description
Saturation vapor pressure of water over liquid water as a function of temperature: p_sat = p_std * exp(c1a - c2a^2 - c3a^3 - c4a^4) with a = 1 - T_boil/T (Seinfeld & Pandis Eq. 1.10). An empirical fit valid for liquid water (T > 273 K). Migrated from AtmosphericDynamics.jl@816cc391 src/seinfeld_pandis_ch1.jl:351 (SaturationVaporPressure @component). Algebraic (observed-only): T is an input parameter; a and p_sat are algebraic state outputs fixed by two explicit equations. Pressure is reported in Pa (the upstream module uses P_0 = 101325 Pa = 1013.25 mbar).
Reference
_source_ref: AtmosphericDynamics.jl@816cc391:src/seinfeld_pandis_ch1.jl:351
Upstream SaturationVaporPressure is an MTK @component with T(t), a(t), p_sat(t) as @variables and T_boil, p_std, c1-c4 as @constants. For standalone serialization (and to make the component well-posed in isolation), the input temperature T and the six @constants are declared as parameters here — matching the (S, observed-only) classification in docs/migration-tracker.md. The two non-input unknowns a and p_sat remain algebraic state outputs, each fixed by one explicit equation (matching upstream length(eqs) == 2); system_kind is left unset (zero differential states), consistent with siblings ideal_gas.esm / scale_height.esm. Constant values T_boil = 373.15 K and p_std = 101325 Pa come from the upstream module’s T_BOIL and P_0; the upstream module returns p_sat in Pa (P_0 = 101325 Pa = 1013.25 mbar).
Tolerance rationale (model-level rel=1e-6): observed-only triangular algebraic system (no ODE integration); 1e-6 covers float64 roundoff in the exp-of-quartic-polynomial expression across the liquid-water temperature range (273-373 K). The boiling-point assertion a = 0 uses a per-assertion abs=1e-9 bound because a relative bound is undefined at expected zero._
Parameters
| Name | Units | Default | Description |
|---|---|---|---|
T | K | 298.15 | Temperature (room-temperature reference 298.15 K) |
T_boil | K | 373.15 | Boiling point of water (upstream constant T_BOIL) |
p_std | Pa | 101325.0 | Standard pressure (upstream constant P_0; 101325 Pa = 1013.25 mbar) |
c1 | 1 | 13.3185 | Empirical coefficient 1 (dimensionless) |
c2 | 1 | 1.976 | Empirical coefficient 2 (dimensionless) |
c3 | 1 | 0.6445 | Empirical coefficient 3 (dimensionless) |
c4 | 1 | 0.1299 | Empirical coefficient 4 (dimensionless) |
Observed
| Name | Units | Default | Description |
|---|---|---|---|
a | 1 | Dimensionless temperature parameter a = 1 - T_boil/T | |
p_sat | Pa | Saturation vapor pressure of water over liquid water |
Observed expressions
$$ a = 1 - \frac{T_{boil}}{T} $$Dimensionless temperature parameter a = 1 - T_boil/T
$$ p_{sat} = p_{std} \cdot e^{c1 \cdot a - c2 \cdot a^{2} - c3 \cdot a^{3} - c4 \cdot a^{4}} $$Saturation vapor pressure of water over liquid water
Analyses
saturation_vapor_pressure_vs_temperature
Reproduces the saturation vapor pressure curve p_sat(T) over the liquid-water validity range (273.15-373.15 K). p_sat rises steeply and near-exponentially with temperature, from ~611 Pa at the freezing point to 101325 Pa (1013.25 mbar) at the boiling point — the classical Seinfeld & Pandis Eq. 1.10 curve.
Time span: 0.0 → 1.0
Swept over: T

Raw .esm
Raw .esm JSON (this component)
{
"reference": {
"notes": "source_ref: AtmosphericDynamics.jl@816cc391:src/seinfeld_pandis_ch1.jl:351\nUpstream `SaturationVaporPressure` is an MTK `@component` with T(t), a(t), p_sat(t) as `@variables` and T_boil, p_std, c1-c4 as `@constants`. For standalone serialization (and to make the component well-posed in isolation), the input temperature T and the six `@constants` are declared as `parameter`s here — matching the (S, observed-only) classification in docs/migration-tracker.md. The two non-input unknowns a and p_sat remain algebraic `state` outputs, each fixed by one explicit equation (matching upstream `length(eqs) == 2`); `system_kind` is left unset (zero differential states), consistent with siblings ideal_gas.esm / scale_height.esm. Constant values T_boil = 373.15 K and p_std = 101325 Pa come from the upstream module's `T_BOIL` and `P_0`; the upstream module returns p_sat in Pa (P_0 = 101325 Pa = 1013.25 mbar).\n\nTolerance rationale (model-level rel=1e-6): observed-only triangular algebraic system (no ODE integration); 1e-6 covers float64 roundoff in the exp-of-quartic-polynomial expression across the liquid-water temperature range (273-373 K). The boiling-point assertion a = 0 uses a per-assertion abs=1e-9 bound because a relative bound is undefined at expected zero."
},
"tolerance": {
"rel": 1e-06
},
"variables": {
"T": {
"type": "parameter",
"units": "K",
"default": 298.15,
"description": "Temperature (room-temperature reference 298.15 K)"
},
"T_boil": {
"type": "parameter",
"units": "K",
"default": 373.15,
"description": "Boiling point of water (upstream constant T_BOIL)"
},
"p_std": {
"type": "parameter",
"units": "Pa",
"default": 101325.0,
"description": "Standard pressure (upstream constant P_0; 101325 Pa = 1013.25 mbar)"
},
"c1": {
"type": "parameter",
"units": "1",
"default": 13.3185,
"description": "Empirical coefficient 1 (dimensionless)"
},
"c2": {
"type": "parameter",
"units": "1",
"default": 1.976,
"description": "Empirical coefficient 2 (dimensionless)"
},
"c3": {
"type": "parameter",
"units": "1",
"default": 0.6445,
"description": "Empirical coefficient 3 (dimensionless)"
},
"c4": {
"type": "parameter",
"units": "1",
"default": 0.1299,
"description": "Empirical coefficient 4 (dimensionless)"
},
"a": {
"type": "unknown",
"units": "1",
"description": "Dimensionless temperature parameter a = 1 - T_boil/T"
},
"p_sat": {
"type": "unknown",
"units": "Pa",
"description": "Saturation vapor pressure of water over liquid water"
}
},
"equations": [
{
"_comment": "Eq. 1.10 - dimensionless temperature parameter a = 1 - T_boil/T",
"lhs": "a",
"rhs": {
"op": "-",
"args": [
1,
{
"op": "/",
"args": [
"T_boil",
"T"
]
}
]
}
},
{
"_comment": "Eq. 1.10 - saturation vapor pressure p_sat = p_std * exp(c1*a - c2*a^2 - c3*a^3 - c4*a^4)",
"lhs": "p_sat",
"rhs": {
"op": "*",
"args": [
"p_std",
{
"op": "exp",
"args": [
{
"op": "-",
"args": [
{
"op": "-",
"args": [
{
"op": "-",
"args": [
{
"op": "*",
"args": [
"c1",
"a"
]
},
{
"op": "*",
"args": [
"c2",
{
"op": "^",
"args": [
"a",
2
]
}
]
}
]
},
{
"op": "*",
"args": [
"c3",
{
"op": "^",
"args": [
"a",
3
]
}
]
}
]
},
{
"op": "*",
"args": [
"c4",
{
"op": "^",
"args": [
"a",
4
]
}
]
}
]
}
]
}
]
}
}
],
"tests": [
{
"id": "freezing_273K",
"description": "Freezing-point reference (T = 273.15 K). Seinfeld & Pandis specification value: p_sat ≈ 6.1 mbar. Computed: 610.72 Pa (6.107 mbar). Also checks the temperature-parameter equation a = 1 - T_boil/T.",
"parameter_overrides": {
"T": 273.15
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "a",
"time": 0.0,
"expected": -0.3660992128866922
},
{
"variable": "p_sat",
"time": 0.0,
"expected": 610.7246516599952
}
]
},
{
"id": "sea_level_288K",
"description": "U.S. Standard Atmosphere sea-level temperature (T = 288.15 K). Computed: p_sat = 1704.36 Pa (17.04 mbar).",
"parameter_overrides": {
"T": 288.15
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "p_sat",
"time": 0.0,
"expected": 1704.356615592015
}
]
},
{
"id": "room_temp_298K",
"description": "Room-temperature reference (T = 298.15 K). Seinfeld & Pandis specification value: p_sat ≈ 31.7 mbar. Computed: 3166.89 Pa (31.67 mbar).",
"parameter_overrides": {
"T": 298.15
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "p_sat",
"time": 0.0,
"expected": 3166.888339996289
}
]
},
{
"id": "warm_310K",
"description": "Warm reference (T = 310.15 K, ~37 °C). Computed: p_sat = 6275.35 Pa (62.75 mbar).",
"parameter_overrides": {
"T": 310.15
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "p_sat",
"time": 0.0,
"expected": 6275.345406686616
}
]
},
{
"id": "hot_343K",
"description": "Hot reference (T = 343.15 K, ~70 °C) — upper-mid point on the strongly-curved p_sat(T) rise. Computed: p_sat = 31164.48 Pa (311.6 mbar).",
"parameter_overrides": {
"T": 343.15
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "p_sat",
"time": 0.0,
"expected": 31164.484389870606
}
]
},
{
"id": "boiling_373K",
"description": "Boiling-point anchor (T = T_boil = 373.15 K). At T = T_boil the temperature parameter a vanishes exactly, so p_sat = p_std * exp(0) = 101325 Pa (1013.25 mbar) — the defining calibration point of the empirical formula.",
"parameter_overrides": {
"T": 373.15
},
"time_span": {
"start": 0.0,
"end": 1.0
},
"assertions": [
{
"variable": "a",
"time": 0.0,
"expected": 0.0,
"tolerance": {
"abs": 1e-09
}
},
{
"variable": "p_sat",
"time": 0.0,
"expected": 101325.0
}
]
}
],
"analyses": [
{
"id": "saturation_vapor_pressure_vs_temperature",
"description": "Reproduces the saturation vapor pressure curve p_sat(T) over the liquid-water validity range (273.15-373.15 K). p_sat rises steeply and near-exponentially with temperature, from ~611 Pa at the freezing point to 101325 Pa (1013.25 mbar) at the boiling point — the classical Seinfeld & Pandis Eq. 1.10 curve.",
"initial_state": {},
"parameters": {},
"time_span": {
"start": 0.0,
"end": 1.0
},
"parameter_sweep": {
"type": "cartesian",
"dimensions": [
{
"parameter": "T",
"range": {
"start": 273.15,
"stop": 373.15,
"count": 25,
"scale": "linear"
}
}
]
},
"plots": [
{
"id": "p_sat_vs_T",
"type": "line",
"description": "Saturation vapor pressure p_sat as a function of temperature T (Eq. 1.10).",
"x": {
"variable": "T",
"label": "Temperature (K)"
},
"y": {
"variable": "p_sat",
"label": "Saturation vapor pressure (Pa)"
}
}
]
}
]
}