# Aerodynamic jump

The small up or down shift a crosswind at the muzzle gives a spinning bullet: a published formula that depends on the bullet, or a fixed amount per mph.

## Generated table

**Setting:** Aerodynamic jump

| Choice | Used by |
|---|---|
| Litz formula (Standard) | Standard, Physics, Spin |
| Classic (constant per mph) | Classic |

## What it does

A crosswind blowing across the muzzle gives a spinning bullet a small kick, up or down, as it leaves the barrel. The effect is called aerodynamic jump. With a right-hand twist, wind from the right moves the impact up and wind from the left moves it down; a left-hand twist reverses both. The solver turns the kick into a small angle and subtracts it from the elevation, at every range alike. This setting decides how big the angle is.

- **Litz formula (Standard):** the angle comes from a published empirical formula. It depends on the bullet's stability and its length in calibers, so a different bullet, twist, muzzle velocity or air gives a different size.
- **Classic (constant per mph):** the angle is 0.0087 mil for each mph of crosswind, for every bullet and every air. The app's help describes it as a simple convention, not a physics model.

Only the wind at the muzzle counts. The wind further downrange pushes the bullet sideways (that is the windage), but it does not change the jump.

## When to choose it

Use the model's own choice: Litz for Standard and Physics, Classic for the Classic model. The two differ by a few hundredths of a mil on a 10 mph crosswind, and the jump is the same at every range, so it matters most on short shots and when you are comparing the solver with a reference. Neither value has been checked against a measured jump on your own rifle; if you want to know yours, shoot a group in a steady crosswind at a short range and compare the two directions.

This option is not used by the Spin model, which works the jump out of the flight itself; see [dynamics](dynamics.md).

## How to picture it

Draw the muzzle seen from behind, with the bullet leaving it spinning clockwise (right-hand twist). A crosswind from the right meets the bullet as it leaves; the spin turns the push into a tilt up instead of straight sideways. The path then starts a hair above the line it would have followed, and the bullet lands high by an angle, not by a distance. A diagram would show two paths from the same muzzle, a calm one and a crosswind one, leaving at slightly different angles and staying apart by a growing distance that is always the same angle seen from the rifle. Reversing the wind side or the twist flips the tilt down.

Because it is an angle at the start, the number you dial for it does not change with range: 0.1 mil is 3.6 in at 1,000 yd and 7.2 in at 2,000 yd.

## The math

**Which wind.** The crosswind at the muzzle, in mph, positive for wind from the right:

$$
w = V \sin\beta
$$

where $V$ is the wind speed and $\beta$ the direction the wind comes from, measured clockwise from straight ahead (0° is a headwind, 90° is from the right). For a single wind the speed and direction of the first wind entered are used. If the target gives a list of wind segments by distance, the segment that covers the muzzle (starting at or before 0 yd and ending past it) is used (if segments overlap, the first one that covers the muzzle counts); if none does, $w = 0$. The second wind of a pair, vertical wind and the wind further out have no effect on the jump.

**Twist sign.**

$$
h = \begin{cases} +1 & \text{right-hand twist} \\ -1 & \text{otherwise (left-hand twist)} \end{cases}
$$

**Litz formula, `'litz'`.** Stability and length first. Miller's rule at 59 °F and 29.92 inHg:

$$
t = \frac{T}{d}, \qquad l = \frac{L}{d}, \qquad
S_{g,0} = \frac{30\,m}{t^{2}\, d^{3}\, l\,(1+l^{2})}\left(\frac{v_0}{2800}\right)^{1/3}
$$

then the correction for the day's air:

$$
S_g = S_{g,0}\;\frac{T_F + 460}{519}\;\frac{29.92}{P}
$$

and the jump, in mil, with up positive:

$$
J = h\,w\,\bigl(0.01\,S_g - 0.0024\,l + 0.032\bigr)\times 0.290888209
$$

The bracket is the published formula in MOA per mph; the last factor converts MOA to mil.

**Classic, `'classic'`.**

$$
J = h\,w \times 0.0087
$$

**Where it enters.** The solver computes the come-up $E$ (see [angle](angle.md)), subtracts the jump, and applies the scope factors, so the reported elevation is

$$
e = \frac{(E - J)\,f}{s}
$$

with $f$ the drop scale factor at the row's Mach number and $s$ the scope's elevation tracking factor (both 1 unless the profile is calibrated; [flight](flight.md) describes the same chain). The jump is subtracted before $f$ and $s$, so the displayed correction is $Jf/s$, and it is the same $J$ for every row in the card.

| Symbol | Meaning | Unit |
|---|---|---|
| $w$ | crosswind at the muzzle, positive from the right | mph |
| $V$, $\beta$ | wind speed, and direction it comes from (0° ahead, 90° right) | mph, degrees |
| $h$ | twist sign, +1 right, -1 left | none |
| $T$, $d$, $L$ | twist (inches per turn), bullet diameter, bullet length | in |
| $t$, $l$ | twist and length in calibers | none |
| $m$ | bullet weight | gr |
| $v_0$ | muzzle velocity | ft/s |
| $T_F$, $P$ | air temperature, station pressure | °F, inHg |
| $S_{g,0}$, $S_g$ | gyroscopic stability at the reference air, and in the day's air | none |
| $J$ | the jump, up positive | mil |
| $E$ | come-up before the jump | mil |
| $f$, $s$ | drop scale factor at the row's Mach, scope elevation tracking factor | none |
| $e$ | reported elevation | mil |

Constants: 0.01, 0.0024 and 0.032 (the Litz formula's); 0.290888209 mil per MOA; 0.0087 mil per mph (the Classic value); 30, 2800 ft/s, 519 (59 °F in Rankine) and 29.92 inHg (Miller's rule and its air correction).

## The algorithm

```
function jump(profile, env, target, options):
    // which wind
    if target.segments exists:
        seg = the segment with from_yd <= 0 and to_yd > 0
        w = seg ? seg.speed * sin(seg.from_deg) : 0
    else:
        w = target.wind1 * sin(target.wind_from_deg)
    h = (profile.twist_dir == 'R') ? +1 : -1

    if options.dynamics == 'mpm':            return the Spin model's own crosswind jump; this option unused
    if options.dynamics == 'mpm-empirical':  return the set's own jump from Sg and w; aeroJump unused
    // point mass (also the fallback when no coefficient set can be made)
    if options.aeroJump == 'classic':        return 0.0087 * w * h
    Sg = sgAtmosphere(millerSg(bullet, twist, mv), env)
    l = bullet.length / bullet.diameter
    return (0.01*Sg - 0.0024*l + 0.032) * w * h * 0.290888209
```

The function `fitCard` computes the wind and the Sg once per card, and then, for each range:

```
    e = come_up(range)              // drop / range, see angle
    e = e - jump                    // this option; the same jump at every range
    e = e * dsf(Mach at the range)
    if |e| > 785 mil: error
    report e / ssf_elev
```

A profile with no bullet length (or a length of zero or less) is refused before any of this runs, with either value, and so is a missing or non-positive twist; the twist direction is never refused: anything other than right counts as left. The jump does not enter the zeroing, which is done in still air, and it does not enter the windage columns.

## On a real shot

**Changing only this setting on the Standard model**

The shot: a 350 gr 0.375 in bullet at 3048 fps muzzle velocity, fired at 3520 yd in air of 60 °F, 40 % humidity, 24.43 inHg at the firing line, latitude 42.1°, wind as the column heads say; 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. All other settings are the Standard model's. In the first column (North, level, 10 mph from the right) the reference arc reaches 223 ft above the line of sight at 2160 yd.

| Value | Shown in the app as | North, level, 10 mph from the right | East, level, 10 mph from the right | North, level, 10 mph from ahead | North, 10° uphill, 10 mph from the right | North, 10° downhill, 10 mph from the right |
|---|---|---|---|---|---|---|
| `'litz'` | Litz formula (Standard) | reference | reference | reference | reference | reference |
| `'classic'` | Classic (constant per mph) | +0.026 / 0.000 / 0.0 | +0.026 / 0.000 / 0.0 | 0.000 / 0.000 / 0.0 | +0.026 / 0.000 / 0.0 | +0.026 / 0.000 / 0.0 |

Each cell is the change from the reference row (`'litz'`) 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.

**Each value 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 60 °F, 40 % humidity, 24.43 inHg at the firing line, latitude 42.1°, wind as the column heads say; 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. All other settings are the Classic model's. In the first column (North, level, 10 mph from the right) the reference arc reaches 223 ft above the line of sight at 2160 yd.

| Value | Shown in the app as | North, level, 10 mph from the right | East, level, 10 mph from the right | North, level, 10 mph from ahead | North, 10° uphill, 10 mph from the right | North, 10° downhill, 10 mph from the right |
|---|---|---|---|---|---|---|
| `'litz'` | Litz formula (Standard) | -0.026 / 0.000 / 0.0 | -0.026 / 0.000 / 0.0 | 0.000 / 0.000 / 0.0 | -0.026 / 0.000 / 0.0 | -0.026 / 0.000 / 0.0 |
| `'classic'` | Classic (constant per mph) | reference | 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.

Read from the tables above (every number in this paragraph is copied from them). On the Standard model, switching to Classic needs +0.026 mil more elevation than the Litz formula on the 10 mph crosswind from the right, at 3520 yd, and the same +0.026 on the east shot and on both 10° slopes; the windage and the velocity at the target do not move. That is the math section at work: the jump is an angle subtracted from the come-up at the start, so it does not depend on range, azimuth or slope, and a smaller jump means less is subtracted. Here the Classic jump is smaller than the Litz one for this bullet in this air, so Classic dials higher. With the wind from dead ahead the crosswind at the muzzle is zero ($\sin 0° = 0$), so both values give the same elevation and the column reads 0.000; the wind still changes the drag, but that belongs to the wind-drag setting and is the same under both values.

Under the Classic model's other settings the second table is the mirror image: Litz reads -0.026 against the Classic reference on every crosswind column and 0.000 on the headwind column. The size of the difference does not change because neither jump depends on any other setting: the Litz value uses the muzzle wind, the bullet and the air at the firing line, and the classic value only the muzzle wind, the twist direction and its constant.

---

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