Version: dev

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).

.esm schema
1.0.0
Source
components/atmospheric_dynamics/sp_ch1/sat_vapor_pressure.esm

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

NameUnitsDefaultDescription
TK298.15Temperature (room-temperature reference 298.15 K)
T_boilK373.15Boiling point of water (upstream constant T_BOIL)
p_stdPa101325.0Standard pressure (upstream constant P_0; 101325 Pa = 1013.25 mbar)
c1113.3185Empirical coefficient 1 (dimensionless)
c211.976Empirical coefficient 2 (dimensionless)
c310.6445Empirical coefficient 3 (dimensionless)
c410.1299Empirical coefficient 4 (dimensionless)

Observed

NameUnitsDefaultDescription
a1Dimensionless temperature parameter a = 1 - T_boil/T
p_satPaSaturation 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

Saturation vapor pressure p_sat as a function of temperature T (Eq. 1.10).

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)"
          }
        }
      ]
    }
  ]
}