@@ -1507,7 +1507,7 @@ def saturation_vapor_pressure(temperature):
1507
1507
>>> from metpy.calc import saturation_vapor_pressure
1508
1508
>>> from metpy.units import units
1509
1509
>>> saturation_vapor_pressure(25 * units.degC).to('hPa')
1510
- <Quantity(31.6742944 , 'hectopascal')>
1510
+ <Quantity(31.623456 , 'hectopascal')>
1511
1511
1512
1512
See Also
1513
1513
--------
@@ -1518,14 +1518,21 @@ def saturation_vapor_pressure(temperature):
1518
1518
Instead of temperature, dewpoint may be used in order to calculate
1519
1519
the actual (ambient) water vapor (partial) pressure.
1520
1520
1521
- The formula used is that from [Bolton1980]_ for T in degrees Celsius:
1522
-
1523
- .. math:: 6.112 e^ \frac{17.67T}{T + 243.5 }
1521
+ Implemented solution from [Ambaum2020]_, Eq. 13,
1522
+ .. math:: e = e_{s0} \frac{T_0}{T}^{(c_{pl} - c_{pv}) / R_v} \exp{
1523
+ \frac{L_0}{R_v T_0} - \frac{L}{R_v T} }
1524
1524
1525
1525
"""
1526
- # Converted from original in terms of C to use kelvin.
1527
- return mpconsts .nounit .sat_pressure_0c * np .exp (
1528
- 17.67 * (temperature - 273.15 ) / (temperature - 29.65 )
1526
+ latent_heat = water_latent_heat_vaporization ._nounit (temperature )
1527
+ temp_ratio = mpconsts .nounit .T0 / temperature
1528
+ heat_power = (mpconsts .nounit .Cp_l - mpconsts .nounit .Cp_v ) / mpconsts .nounit .Rv
1529
+ exp_term = ((mpconsts .nounit .Lv / mpconsts .nounit .T0 - latent_heat / temperature )
1530
+ / mpconsts .nounit .Rv )
1531
+
1532
+ return (
1533
+ mpconsts .nounit .sat_pressure_0c
1534
+ * temp_ratio ** heat_power
1535
+ * np .exp (exp_term )
1529
1536
)
1530
1537
1531
1538
0 commit comments