# Magnus force

How strong the small upward push from the bullet's spin is taken to be, and how it changes with speed, in the Spin model.

## Generated table

**Setting:** Magnus force

| Choice | Used by |
|---|---|
| Automatic (default) | Standard, Physics, Classic, Spin |
| Textbook | Custom only |
| Wind tunnel, Mach-varying | Custom only |
| From bullet length | Custom only |
| Diameter rule (experimental) | Custom only |
| Off | Custom only |
| Your value | Custom only |

## What it does

This setting decides the size of the Magnus force in the Spin model, and how that size changes with the bullet's speed. The Magnus force is a small push that a spinning bullet gets from the air while it flies very slightly nose-sideways to its path. For a right-hand twist it pushes up; for a left-hand twist, up as well. It grows with time of flight, so it matters at long range. Under every other model it does nothing.

The size is a number called the Magnus slope, written $C(M)$ below, that depends on the Mach number $M$ (speed divided by the speed of sound). Each value of the setting is a different way to get that number.

- **Automatic (default):** the value that comes with the coefficients in use. For a coefficient set attached to the profile, its own value. For an estimate from the bullet's weight, diameter and length, normally the textbook value.
- **Textbook:** always the textbook value: 0.50 up to Mach 2, falling by 0.10 for each Mach above it. It replaces the value in an attached coefficient set too. On a public estimate it is the same as Automatic.
- **Wind tunnel, Mach-varying:** values that follow published wind-tunnel measurements on boattailed shell models from Mach 0.5 to 2.5: about 0.44 at Mach 0.5, largest near Mach 1.5 (0.51), 0.46 at Mach 2 and 0.41 at Mach 2.5. It replaces an attached set's value too.
- **From bullet length:** a value worked out from the bullet's length and boattail length, in calibers, with a published US Army prediction rule: longer bullets get a larger value, and it rises near the speed of sound. Estimated coefficients only; an attached coefficient set keeps its own value. Without a boattail length the bullet counts as having none, which gives a slightly smaller value.
- **Diameter rule (experimental):** offered to some accounts only. Where it is not available the solve is Automatic.
- **Off:** no Magnus force.
- **Your value:** the number you enter, the same at every speed unless you also enter how much it changes per Mach above Mach 2 (for example -0.10). It replaces an attached set's value too.

The choice is stored with the profile's Spin block, not in the Custom list.

## When to choose it

Leave it on Automatic unless you have a reason. Choose Textbook to see what the public value does to a profile whose coefficient set carries a different one. Choose Wind tunnel to see the effect of a Magnus force that varies with speed. Choose From bullet length when the estimate matters and you know the boattail length; the app warns that the rule may underestimate the force for a bullet under 4.5 calibers long. Choose Off to see how much of your come-up the push accounts for. Choose Your value to test a number you have a reason to believe, and compare it with your groups. Every choice other than Automatic and From bullet length also replaces the value in an attached coefficient set. The app shows each choice's value for your bullet at Mach 2 and at Mach 1. Real bullets may differ from every one of these: no published measurement of the Magnus force on a rifle bullet itself was found.

## How to picture it

Picture the bullet seen from behind, flying along a path that bends down under gravity. Because it spins, it does not follow the bend exactly: its nose points a hair to one side of the path, a fraction of a degree (the yaw of repose, described on [dynamics](dynamics.md)). The air meets it at that small angle. Because the bullet is spinning, the spin acting on that sideways flow of air gives a push at right angles to the tilt: upward for a right-hand twist under gravity. Draw it as a short arrow pointing up from the bullet at three points along the flight, growing as the flight goes on (the tilt grows downrange).

This setting is the length of that arrow for a given tilt and speed. Draw a graph with Mach number across the bottom (from 0.3 to 3) and the Magnus slope up the side. Automatic and Textbook are flat from the left edge to Mach 2 and slope down to the right after it. Wind tunnel is a shallow hill peaking near Mach 1.5. From bullet length is flat with a narrow bump near Mach 1, higher for longer bullets. Off is the bottom edge. Your value is a flat line, tilted after Mach 2 if you give it a change per Mach. Most of a long shot is flown below Mach 2, on the left of the graph, where the sources have the least data.

## The math

The Magnus force enters the Spin model as one term of the acceleration, written out on [dynamics](dynamics.md) (the equations of motion): with the force pointing along $\boldsymbol\alpha\times\mathbf u$, its size is

$$a_M=\frac{\rho\,S\,d\,p}{2m}\,C(M)\,\lvert\boldsymbol\alpha\times\mathbf u\rvert$$

where $C(M)$ is the Magnus slope this setting provides. Nothing else of the equations of motion belongs to this setting. With the full form of the yaw of repose ([yawRepose](yawRepose.md)) the same $C(M)$ also appears in the iteration that finds the yaw. The solver's $C$ is positive for an upward push on a right-hand-twist bullet and is in the $p\,d/V$ convention. It has the opposite sign to the BRL and STANAG coefficient (in which the same upward push is negative) and is half the $p\,d/2V$ values some of the cited reports print. Convert before looking a value up. Lieske (BRL-MR-3870) and Nietubicz and Opalka (ARBRL-MR-02991) use the $p\,d/V$ convention, so only the sign flips: $C=-C_{Np\alpha}^{\mathrm{BRL}}$. Jenke and Shadow (AEDC-TR-75-40), the 1973 report (SPIN-73) and the M855 reduction (ARL-TR-5182) print $p\,d/2V$ values, so these are halved as well: $C=-\tfrac12\,C_{Yp\alpha}^{p\,d/2V}$.

| Symbol | Meaning | Unit |
|---|---|---|
| $M$ | Mach number at the bullet, $s/c$ as on [dynamics](dynamics.md) | none |
| $C(M)$ | Magnus slope: force per unit yaw, in the $p\,d/V$ convention | 1/rad |
| $c$ | the slope's value at Mach 2 (and below) | 1/rad |
| $\sigma$ | change of the slope per Mach above Mach 2 (0 means flat) | 1/(rad Mach) |
| $K(M)$ | optional multiplier by Mach, from a table of knots (1 without one) | none |
| $L$, $L_{bt}$ | overall length and boattail length, in calibers (length divided by diameter) | none |
| $E_1(M)$ | the prediction rule's length coefficient at Mach $M$ | none |
| $k_i$ | the wind-tunnel values at Mach 0.5, 0.8, 1.5, 2.0, 2.5 | 1/rad |

**The shape every value shares.** Every value ends as three things, $c$, $\sigma$ and $K$, and the slope the flight uses is

$$C(M)=K(M)\cdot\begin{cases}c & \sigma=0\\ \max\!\big(c+\sigma\,(\max(M,2)-2),\ 0.05\,c\big) & \sigma\neq 0\end{cases}\qquad C(M)=0\ \text{if}\ c=0$$

The Magnus slope is held at its Mach-2 value at and below Mach 2 and changes with $\sigma$ only above it (measured data hold it about level below Mach 2). The result's magnitude is kept at least 5 % of $c$ (for a negative $c$, which only "Your value" can give, the $\max$ is a $\min$). $K(M)$ is linear between its knots and flat beyond the first and last; with no knots it is 1.

**Automatic.** The set's own $c$, $\sigma$ and $K$, unchanged. A set with no Magnus slope has none ($c=0$). For an estimate, $c$ is the estimator's Magnus value and $\sigma=c\times$ its relative slope. Both public estimators have $c=0.50$ and $\sigma=0.50\times(-0.2)=-0.10$ and no knots, so $C=0.50$ up to Mach 2, $0.50-0.10\,(M-2)$ above.

**Textbook.** $c=0.50$, $\sigma=0.50\times(-0.2)=-0.10$, $K=1$, whatever the set. Sources of the numbers: Lieske, BRL-MR-3870 (1990), Table 2, the median of nine artillery firing-table values (0.50 in this sign; range 0.38 to 1.00; shells, mostly subsonic); Nietubicz and Opalka, ARBRL-MR-02991 (1980), Tables IV and VI, bullet-like bodies at Mach 2, 3, 4 (0.45 to 0.62 at Mach 2, falling about 0.1 per Mach); Jenke and Shadow, AEDC-TR-75-40 (1975), Fig. 19, for the hold below Mach 2.

**Wind tunnel.** $\sigma=0$, $c=k_{2.0}=0.46$, and $K(M)=k(M)/0.46$ with $k$ linear between the points $(0.5,\,0.44)$, $(0.8,\,0.47)$, $(1.5,\,0.51)$, $(2.0,\,0.46)$, $(2.5,\,0.41)$ and flat beyond them. So $C(M)=k(M)$ (0.41 above Mach 2.5, 0.44 below Mach 0.5). They are the mean of five boattailed 5.2-caliber afterbodies of Jenke and Shadow (Fig. 19, read from the plot, about $\pm0.02$), converted to the $p\,d/V$ convention. The narrow spike near Mach 1 on steeply boattailed shapes is not modelled. Limits: shell models with a blunt nose, at a higher Reynolds number than a bullet's.

**From bullet length.** For an estimated set with a usable bullet. $L=\text{length}/\text{diameter}$; $L_{bt}=\text{boattail}/\text{diameter}$ when the boattail length is above 0 and below the bullet's length, else 0. $\sigma=0$ (the estimate's own slope is dropped) and

$$c=0.08\,L+0.05\,L_{bt}\qquad K(M)=\frac{-\tfrac12E_1(M)\,L+0.05\,L_{bt}}{c}$$

with $E_1$ linear between the points $(0.8,\,-0.16)$, $(0.9,\,-0.18)$, $(0.95,\,-0.23)$, $(1.0,\,-0.21)$, $(1.05,\,-0.19)$, $(1.1,\,-0.18)$, $(1.2,\,-0.16)$ and flat beyond (so $K=1$ below Mach 0.8 and above Mach 1.2). So $C(M)=-\tfrac12E_1(M)L+0.05L_{bt}$: the bump scales the length term only. The rule is SPIN-73, Picatinny Arsenal Technical Report 4588 (1973), p. 16, $C_{Yp\alpha}=E_1L-0.1\,L_{bt}$ in the $p\,d/2V$ convention, converted as above; it reproduces the report's printed table for the 175 mm M437. Limits: fitted to projectiles of 20 mm and larger; its author calls the Magnus fits the poorest in the program. For a set that is not estimated, or a bullet with no usable diameter or length, the value is Automatic.

**Off.** $c=0$.

**Your value.** $c$ is the number entered (from -2 to 2), $\sigma$ the number entered per Mach above Mach 2 (from -1 to 1, or none, which means flat), $K=1$. It replaces the set's slope and knots.

**Diameter rule (experimental).** A rule attached to the solve for the accounts that are offered it; nothing about it is given here. Without it, Automatic.

**What the numbers look like.** For the bullet of the probe (350 gr, 0.375 in, 2.074 in long, $L=5.531$ calibers, no boattail), under the public estimate:

| Value | Mach 3 | Mach 2 | Mach 1.5 | Mach 1 | Mach 0.95 | Mach 0.5 |
|---|---|---|---|---|---|---|
| Automatic | 0.400 | 0.500 | 0.500 | 0.500 | 0.500 | 0.500 |
| Textbook | 0.400 | 0.500 | 0.500 | 0.500 | 0.500 | 0.500 |
| Wind tunnel | 0.410 | 0.460 | 0.510 | 0.481 | 0.479 | 0.440 |
| From bullet length | 0.442 | 0.442 | 0.442 | 0.581 | 0.636 | 0.442 |
| Off | 0 | 0 | 0 | 0 | 0 | 0 |

Automatic and Textbook are flat at 0.500 from Mach 2 down to Mach 0.5. In this table Wind tunnel is above Automatic at Mach 3 and at Mach 1.5 (it is above it between about Mach 1.33 and 1.6), and From bullet length at Mach 3 and in the narrow band around Mach 1 (Mach 1 and 0.95); everywhere else they are below it. The From bullet length column holds for a bullet about this long (about 5.5 calibers); a shorter bullet gets a much smaller value.

## The algorithm

Where it runs: when a Spin solve builds its range card, the coefficient set is chosen first, then the zero is found and the shot is flown with it, so the zero and the shot use the same Magnus slope. The slope is then evaluated at the local Mach number at every step of the flight.

```text
magnusAero(set, options, bullet, served rule) -> set to fly
  1. if options.magnus is 'auto':                        return the set unchanged
  2. copy the set without its Magnus slope sigma and its Magnus knots
  3. 'off':       c = 0
  4. 'custom':    c = entered value (0 if none); if the entered slope is not 0: sigma = entered slope
  5. 'textbook':  c = 0.50; sigma = 0.50 * (-0.2)
  6. 'tunnel':    c = 0.46; knots = table k(M) / 0.46 at Mach 0.5, 0.8, 1.5, 2.0, 2.5
  7. 'length':    if the set is estimated and a bullet is given with a diameter above 0:
                      L_bt = boattail / diameter if 0 < boattail < length else 0
                      if L = length / diameter is finite and above 0:
                          c = 0.08 L + 0.05 L_bt; sigma dropped; knots = (-E1(M)/2 L + 0.05 L_bt) / c at the E1 table's Mach numbers
                          return that copy
                  return the set unchanged
  8. 'diameter':  if a rule was served and the bullet is present: c = the rule's value
                  else return the set unchanged

mpmAeroFor(set, options, bullet, served rule) -> set to fly
  1. set = magnusAero(...)
  2. if subsonicLift is 'reduced' and the set is estimated: add the subsonic-lift multipliers (see subsonicLift)

magnusAtMach(set, mach) -> C(mach)
  1. if the set has no Magnus value c, or c is 0:         return 0
  2. v = c;  if the set has a slope sigma (not 0):        v = lin(c, sigma, max(mach, 2))   // with the 5 % floor of the page
  3. if the set has knots:                                 v = v * K(mach)                   // linear between, flat outside
  4. return v

checkOptions(options)                                      // before any solve
  'custom' needs a finite entered value with |value| <= 2; an entered slope, if given, needs |slope| <= 1; otherwise the solve is refused
```

Every other model, and any solve whose dynamics are not the Spin model's (point mass or the simplified form), never reads any of this: with no Magnus term in the flight the result is bit-identical for every value.

**What the app shows.** The Spin block lists each value with $C$ at Mach 2 and at Mach 1 for the bullet in the profile (and at Mach 3 for "Your value" with a slope), computed by the same functions (`magnusValueAt`), with a note when a value gives the same numbers as Automatic or does not apply and Automatic is used.

## On a real shot

Read from the two tables below; every decimal in these sentences is copied from them. `aero_source` in these solves named public estimated coefficients, never a fitted set. The first table is a 3,520 yd shot with the Spin model's other settings. Textbook changes nothing (0.000 / 0.000 / 0.0): on a public estimate Automatic already is the textbook value. Off asks for +0.098 mil more elevation on the monolithic tipped bullet and +0.075 on the lead-core one (North, level), almost the same in the East, uphill and downhill columns (+0.075, +0.076, +0.072); the sign follows from The math, because with $C=0$ the upward push of $a_M$ is gone, the bullet lands lower, and more elevation must be dialed. Windage moves by -0.005 and -0.003 mil and the arrival speed by 0.0 fps in every column. The windage change comes through the full form of the yaw of repose ([yawRepose](yawRepose.md)), where the Magnus force also enters the yaw itself; the table does not say why the monolithic tipped bullet moves more than the lead-core bullet.

The Wind tunnel (+0.003) and From bullet length (+0.001) rows are small, and they are meant to be. The Off row is the bound: it removes the whole value, and it is worth +0.098. In the value table of The math, Wind tunnel stays close to Automatic at every Mach (the largest gap is at the slow end), and From bullet length, for a bullet this long, is a little below Automatic outside its bump near the speed of sound; so neither could move the come-up by more than a small fraction of the Off cell. They are below Automatic over most of the speed range and above it over narrower ranges, so the differences also partly cancel; the table does not show that split. Do not read the From bullet length row as "it hardly matters": it holds for a bullet about this long (its length in calibers is in The math), and a shorter bullet gets a much smaller value. At 2,000 yd (second table) the push has had less time: Off is +0.021 on the monolithic tipped bullet and +0.016 on North, level, Wind tunnel +0.001 on both, From bullet length +0.002 and +0.001, windage -0.001. The two tables are two ranges only; they do not show how the change varies in between.

**Each value as a change from Automatic, under the Spin 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 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. All other settings are the Spin model's. In the first column (North, level, monolithic tipped bullet) the reference arc reaches 220 ft above the line of sight at 2150 yd. Compared with the first column, the bullet differs in "North, level", "East, level", "North, 10° uphill" and "North, 10° downhill".

| Value | Shown in the app as | North, level, monolithic tipped bullet | North, level | East, level | North, 10° uphill | North, 10° downhill |
|---|---|---|---|---|---|---|
| `'auto'` | Automatic (default) | reference | reference | reference | reference | reference |
| `'textbook'` | Textbook | 0.000 / 0.000 / 0.0 | 0.000 / 0.000 / 0.0 | 0.000 / 0.000 / 0.0 | 0.000 / 0.000 / 0.0 | 0.000 / 0.000 / 0.0 |
| `'tunnel'` | Wind tunnel, Mach-varying | +0.003 / 0.000 / 0.0 | +0.003 / 0.000 / 0.0 | +0.003 / 0.000 / 0.0 | +0.003 / 0.000 / 0.0 | +0.003 / 0.000 / 0.0 |
| `'length'` | From bullet length | +0.001 / 0.000 / 0.0 | +0.001 / 0.000 / 0.0 | +0.001 / 0.000 / 0.0 | +0.001 / 0.000 / 0.0 | +0.001 / 0.000 / 0.0 |
| `'off'` | Off | +0.098 / -0.005 / 0.0 | +0.075 / -0.003 / 0.0 | +0.075 / -0.003 / 0.0 | +0.076 / -0.003 / 0.0 | +0.072 / -0.003 / 0.0 |

**The same at 2,000 yd**

The shot: a 350 gr 0.375 in bullet at 3048 fps muzzle velocity, fired at 2000 yd in air of 60 °F, 40 % 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 shot is changed from the scenario's for this table: 2000 yd. All other settings are the Spin model's. In the first column (North, level, monolithic tipped bullet) the reference arc reaches 33 ft above the line of sight at 1130 yd. Compared with the first column, the bullet differs in "North, level".

| Value | Shown in the app as | North, level, monolithic tipped bullet | North, level |
|---|---|---|---|
| `'auto'` | Automatic (default) | reference | reference |
| `'textbook'` | Textbook | 0.000 / 0.000 / 0.0 | 0.000 / 0.000 / 0.0 |
| `'tunnel'` | Wind tunnel, Mach-varying | +0.001 / 0.000 / 0.0 | +0.001 / 0.000 / 0.0 |
| `'length'` | From bullet length | +0.002 / 0.000 / 0.0 | +0.001 / 0.000 / 0.0 |
| `'off'` | Off | +0.021 / -0.001 / 0.0 | +0.016 / -0.001 / 0.0 |

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