# Water vapor in hot air

How much water vapour the air holds: the usual saturation formula, or the classic reference's smaller amount above 80 °F.

## Generated table

**Setting:** Water vapor in hot air

| Choice | Used by |
|---|---|
| Usual formula (Standard) | Standard, Physics, Spin |
| Classic (less vapor above 80 °F) | Classic |

## What it does

Humid air holds water vapour, and water vapour is lighter than the air it replaces, so humid air drags the bullet a little less. This setting decides how much vapour a given temperature and humidity contain.

- **Usual formula (Standard):** the vapour comes from the usual saturation formula at every temperature. This is physics. Every model except Classic uses it.
- **Classic (less vapor above 80 °F):** the same formula, but above 80 °F the amount of vapour is cut by 0.7 % of the formula's value for every degree Fahrenheit past 80, so 21 % less at 110 °F. The air is then a little denser, the bullet a little slower, and, where the humid speed of sound is used (`soundSpeed` `'moist'`), the speed of sound a little lower. The Classic model does it this way, so this value exists to match it.

At or below 80 °F, or in air with 0 % humidity, the two values give exactly the same numbers.

## When to choose it

Leave it on the model's own choice. Pick `'classic'` only to reproduce the Classic model's numbers in hot, humid air. In cool or dry air there is nothing to choose.

## How to picture it

Draw a graph with the air temperature across the bottom and, up the side, how much of the saturation formula's vapour the setting keeps (1 means all of it).

- `'standard'` is a flat line at 1 across the whole graph.
- `'classic'` is the same flat line up to 80 °F, then a straight line sloping down. It is at about 0.9 by 95 °F and at about 0.8 by 110 °F.

Next to it, draw the saturation formula itself: a curve that climbs steeply with temperature. At 60 °F it holds little vapour, so cutting it by any fraction changes nothing visible; at 100 °F and 100 % humidity it holds a lot, so the cut matters. The shaded gap between the curve and the sloping line, scaled by the humidity, is the vapour that `'classic'` removes from the air.

## The math

The option scales the saturation vapour pressure. Everything else about the air is owned by other options.

| Symbol | Meaning | Unit |
|---|---|---|
| $T_F$ | air temperature at the rifle (the zero's own air for the zero) | °F |
| $T_C$ | the same temperature | °C |
| $T$ | the same temperature | K |
| $RH$ | relative humidity, 0 to 100 | % |
| $e_s$ | saturation vapour pressure from the standard formula | Pa |
| $f_v$ | the factor `vapour` applies to $e_s$; 1 for `'standard'` | none |
| $e$ | the vapour pressure of the air | Pa |
| $T_0$ | where the classic factor starts to fall, 80 | °F |
| $m$ | how fast it falls, 0.007 | 1/°F |

**Saturation vapour pressure** (both values):

$$T_C = \frac{T_F - 32}{1.8} \qquad T = T_C + 273.15$$

$$e_s = 611.21\,\exp\!\left[\left(18.678 - \frac{T_C}{234.5}\right)\frac{T_C}{257.14 + T_C}\right]$$

**`'standard'`.** $f_v = 1$.

**`'classic'`.** A straight ramp that starts at $T_0$, with a floor at zero:

$$f_v = \begin{cases} 1 & T_F \le T_0 \\ \max\bigl(1 - m\,(T_F - T_0),\ 0\bigr) & T_F > T_0 \end{cases}$$

Some values: 0.93 at 90 °F, 0.86 at 100 °F, 0.79 at 110 °F, 0.72 at 120 °F. The floor is reached at about 223 °F, far outside any shot.

**The output, for both values.** The vapour pressure of the air:

$$e = \frac{RH}{100}\; e_s\; f_v$$

**Where the vapour pressure goes.** With $P$ the station pressure (inHg times 3386.389, in Pa), $e$ enters three formulas that other options own. The moist density is $(P - e)/(R_d T) + e/(R_v T)$; the drag density the baseline reference uses is $\frac{P}{R_d T}\bigl(1 - (1 - R_d/R_v)\,e/P_{std}\bigr)$ with $P_{std}$ = 29.92 inHg; the humid speed of sound scales the dry one by $\sqrt{T_v/T}$ with $T_v = T / \bigl(1 - (e/P)(1 - 0.622)\bigr)$. Which of these the drag uses is chosen by [airDensity](airDensity.md), which owns the density formulas and their constants, and [soundSpeed](soundSpeed.md), which owns the speed of sound; this page gives only $e$. The solver's density altitude is worked from the moist density, so it changes with $e$ as well. Under the temperature taper of [tempClamp](tempClamp.md) (which acts only for the three classic `lapse` values, and only on slopes), the rifle's temperature deviation is worked from the drag density, so it changes slightly too.

A smaller $f_v$ means a smaller $e$, so a denser moist air (water vapour is the lighter gas), a lower humid speed of sound when `soundSpeed` is `'moist'`, and a lower density altitude.

## The algorithm

Inside the one function that builds the air at the rifle, the vapour pressure is found in this order:

```text
air(env, vapour) -> (rho0, rho0_drag, c0, c0_moist, T0, da_ft)       // the parts that depend on this option; rho0_drag is the solver's baseline drag density
  in:  env     temp_F, rh_pct (0..100), station_pressure_inHg, lat_deg
       vapour  'standard' | 'classic'                               (default 'standard')

  Tc  = (temp_F - 32) / 1.8
  es0 = 611.21 * exp((18.678 - Tc/234.5) * (Tc / (257.14 + Tc)))

  1. if vapour == 'classic':   es = es0 * classicVapourFactor(temp_F)
  2. otherwise:                es = es0                              // identical operations to before the option existed
  pv = (rh_pct / 100) * es
  // pv now feeds rho0, rho0_drag, c0_moist and da_ft (formulas: airDensity, soundSpeed)

classicVapourFactor(temp_F) -> factor
  if temp_F > 80:   return max(1 - 0.007 * (temp_F - 80), 0)
  otherwise:        return 1
```

**Where it is called.** At the start of a solve, `air` is called with the solve's `vapour` for the shot's air; when the profile has its own zero air, `air` is called again with the same `vapour` for the zero. The humidity is therefore treated the same way for the zero as for the shot.

## On a real shot

In the standard scenarios' own air (60 °F) the option does nothing, because that is below the 80 °F where it starts, so both tables below change the air to 110 °F and 50 % humidity. The reference row is `'classic'`, the Classic model's own setting, and the `'standard'` row is the change from it, so a negative elevation means `'classic'` needs that much more elevation. Read from the first table (the scenario's pressure), the usual formula changes elevation by -0.244 mil on the level north shot, -0.245 mil uphill and -0.237 mil downhill, with the arrival speed +2.0 fps, +2.1 fps and +1.9 fps. The reason is in The math: at 110 °F the classic factor takes a fifth of the vapour away, so `'classic'` counts less vapour than the usual formula. Water vapour is the lighter gas, so the air is a little denser, the bullet loses more speed and drops more, and it arrives slower. These tables are solved under the Classic model, whose speed of sound is the dry one and does not depend on vapour, so the effect here is wholly the density. The slope hardly matters: the three shots differ only in the third decimal (-0.244 level, -0.245 uphill, -0.237 downhill), since the setting changes the air at the rifle, not how it changes with height. At sea-level pressure (second table) the figure is larger, -0.260 mil level and +1.7 fps. Changing the pressure alone was measured to confirm it: the vapour changes the density by the same amount in absolute terms in both tables, which is a smaller share of the thicker air, but in thicker air each percent of density costs more elevation, because the bullet slows more over the flight. Windage changes by -0.017 and -0.014 mil, so the effect is almost wholly in elevation.

**Hot humid air at the scenario's own pressure, under the Classic model's other settings**

The shot: a 350 gr 0.375 in bullet at 3048 fps muzzle velocity, fired at 3520 yd in air of 110 °F, 50 % humidity, 24.43 inHg at the firing line, latitude 42.1°, wind 10 mph from the right (90° to the line of fire), the same wind in every column; site altitude 5,500 ft. In the app, type it as "Site altitude" (shown when the profile's model reads one); left blank, the classic values count from sea level and can differ from this table. The air is changed from the scenario's for this table: temperature 110 °F, humidity 50 %. All other settings are the Classic model's. In the first column (North, level) the reference arc reaches 193 ft above the line of sight at 2130 yd.

| Value | Shown in the app as | North, level | East, level | North, 10° uphill | North, 10° downhill |
|---|---|---|---|---|---|
| `'standard'` | Usual formula (Standard) | -0.244 / -0.017 / +2.0 | -0.244 / -0.017 / +2.0 | -0.245 / -0.017 / +2.1 | -0.237 / -0.017 / +1.9 |
| `'classic'` | Classic (less vapor above 80 °F) | reference | reference | reference | reference |

**The same hot humid air at sea-level pressure**

The shot: a 350 gr 0.375 in bullet at 3048 fps muzzle velocity, fired at 3520 yd in air of 110 °F, 50 % humidity, 29.92 inHg at the firing line, latitude 42.1°, wind 10 mph from the right (90° to the line of fire), the same wind in every column; site altitude 5,500 ft. In the app, type it as "Site altitude" (shown when the profile's model reads one); left blank, the classic values count from sea level and can differ from this table. The air is changed from the scenario's for this table: temperature 110 °F, humidity 50 %, station pressure 29.92 inHg. All other settings are the Classic model's. In the first column (North, level) the reference arc reaches 259 ft above the line of sight at 2130 yd.

| Value | Shown in the app as | North, level | East, level | North, 10° uphill | North, 10° downhill |
|---|---|---|---|---|---|
| `'standard'` | Usual formula (Standard) | -0.260 / -0.014 / +1.7 | -0.260 / -0.014 / +1.7 | -0.265 / -0.014 / +1.8 | -0.246 / -0.014 / +1.6 |
| `'classic'` | Classic (less vapor above 80 °F) | reference | reference | reference | reference |

Each cell is the change from the reference row (`'classic'`) in the same shot, as elevation (mil) / windage (mil) / velocity at the target (fps). Elevation: plus means more elevation must be dialed. Windage: plus means the windage correction moves to the right (dial further right); this is a correction, not where the bullet lands. Velocity: plus means the bullet arrives faster. A zero means no difference at the shown precision.

---

[All reference pages](../index.md)
