Hydrodynamic Forensic Analysis
First-principles fluid mechanics predicts what a high-velocity rifle round to a vascular neck target would produce. The recorded evidence shows none of it.
The Question
The prosecution's case rests on the assertion that a single .30 caliber rifle round, fired from the rooftop position, struck the victim in the neck. If that account is correct, the resulting hydrodynamic event has well-characterized signatures: an outward-traveling cone of fine blood mist from the entry wound (back spatter), a possible forward-directed cone of larger droplets ejected with the bullet wake (forward spatter, subject to modeling assumptions discussed below), and visible vascular bleeding onset within tens of milliseconds for any major neck vessel.
The back-spatter prediction and the bleeding-onset prediction follow directly from the peer-reviewed physics with no adjustable modeling knobs. The forward-spatter prediction is more sensitive: under standard single-particle drag, model droplets do not reach a backdrop 61 cm downstream at all, and a 2-phase-jet wake-drag reduction must be applied for the model to predict backdrop deposition. This page reports both, and this section is explicit about which finding depends on which assumption.
These signatures have been quantitatively characterized in the peer-reviewed forensic-fluids literature, primarily by Comiskey, Yarin, Kim and Attinger between 2016 and 2019.
This page applies those models to the parameters of the prosecution's stated scenario, generates the predicted patterns, and compares them with what the recorded evidence actually shows. The full Python pipeline is downloadable below for independent verification. Every modeling knob is exposed at the top of the source code.
The Model
The analysis combines three physics models, each derived from peer-reviewed work. Each predicts a specific, observable signature. Each is independent of the others.
Comiskey, Yarin, Kim & Attinger 2016 (Phys. Rev. Fluids 1, 043201) treats a slender conical bullet penetrating a vascular tissue surface. The bullet's potential-flow field accelerates blood at the free surface outward (against the bullet direction), and Rayleigh–Taylor instability of that accelerated surface determines drop size and count.
Comiskey, Yarin & Attinger 2017 (Phys. Rev. Fluids 2, 073906) treats forward (downrange) spatter from the bullet wake exiting tissue. The same Rayleigh–Taylor framework applies, with a different potential-flow geometry. Drag deceleration over the 61 cm flight to the backdrop is then computed via Reynolds-dependent drag coefficient (Eq. 25):
Independent of the ballistic models, the time from wounding to visible blood on the skin surface is governed by pressurized flow through the wound channel. Torricelli's equation for jet velocity from a vessel at pressure P:
Bullet: .30 cal (7.62 mm) spitzer, semi-jacketed, 150 gr, 800 m/s impact velocity. Tip semi-angle θ = 14°. Penetration depth at peak ejection h = 20 mm. Blood properties: ρ = 1060 kg/m³, σ = 0.06045 N/m, μ = 3.7 cP, viscoelastic. Back-spatter cone half-angle 57° (per high-speed video studies). Forward-spatter cone half-angle 15°. Ejected back-spatter volume calibrated to 0.3 mL; ejected forward-spatter volume calibrated to 1.5 mL.
Prediction 1 — Entry Shirt
The model predicts approximately 4.4 million back-spatter droplets of 27–84 µm diameter, ejected in a wide ~57° cone toward the shooter, depositing on any surface within centimeters of the entry wound. With the shirt 5 mm in front of the skin and the wound site exposed, essentially every droplet reaches the fabric within 1–2 ms.
Drop diameters spread on impact according to the Weber/Ohnesorge stain-spreading law (paper Eq. 29), producing visible stains of 120–240 µm. The dominant pattern is a dense radial halo of fine, individually resolvable stains extending 2–3 cm from the bullet hole, fading into scattered satellite drops at the periphery.

3,000 individually rendered stains, scaled and oriented per the impact velocity and angle from each subfamily. Central black region is the predicted bullet perforation (7.6 mm). Scorching halo represents thermal/contact transfer. The dense 2–3 cm halo of fine elongated stains is the back-spatter signature. Scale bar 2 cm.

Four-panel diagnostic: predicted droplet size distribution from the Rayleigh–Taylor instability, predicted stain radial distribution at the close shirt and far backdrop ranges, and the 2D pattern projection.
For a real high-velocity rifle round to a vascular neck target with an exposed shirt nearby, this pattern is unavoidable. Its absence from the recorded evidence is a primary forensic observation. In video2_1.mp4, the white "Freedom" t-shirt remains visually clean at Frame 68 (the claimed impact reference frame, t = 2.239 s) and through the subsequent frames preceding visible blood at Frame 81–82. A back-spatter cone of the predicted density would deposit within ~2 ms of impact — that is, before the next frame could capture absence-to-presence at 30 fps. The shirt shows no spatter halo at any frame.
Prediction 2 — Forward Spatter (modeling-dependent)
The forward-spatter model integrates thousands of individual droplets from the bullet wake through Reynolds-dependent quadratic drag over a 61 cm gap to a downstream backdrop. The predicted pattern is sensitive to how drag on trailing droplets in a dense spray is modeled.
Standard single-particle drag (WAKE_FACTOR = 1.0, using Eq. 25 directly): the pipeline predicts 0 of 20,000 sampled drops reach the 61 cm backdrop. Droplets of 20–100 µm ejected at 800 m/s have stopping distances of 20–100 cm in still air; virtually none survive the full 61 cm flight to the backdrop.
2-phase-jet wake-drag reduction (WAKE_FACTOR = 0.2, applied as a multiplicative reduction on Eq. 25): the pipeline predicts approximately 22 million drops of 19–460 µm diameter, ejected in a tight ~15° cone and impacting the backdrop at 3–20 m/s. Peak stain density predicted at the geometric cone projection: 61 cm × tan(15°) = 16.3 cm radial from the bullet line. Approximately 8,800 stains visible on a 60 cm × 60 cm portion of the backdrop.
The wake-drag reduction is motivated by the Comiskey/Yarin/Attinger 2017 paper's Section III references to 2-phase-jet treatments, in which trailing drops experience reduced aerodynamic drag in the wake of leading drops. However, the 2017 paper itself does not perform this reduction as a scalar multiplier on single-particle drag; the WAKE_FACTOR = 0.2 value used here is a phenomenological knob, not a value derived from the paper's own equations. This is explicit in the source code and in Section 07 below.

Multi-panel diagnostic of forward-spatter trajectory integration with WAKE_FACTOR=0.2 applied. Top left: free-surface velocity vz(r) and droplet diameter l*(r). Top right: number-weighted size distribution. Bottom: radial stain distribution and 2D pattern with color encoding impact speed. Peak stain density at 15.7 cm, consistent with cone projection. Under standard drag (WAKE_FACTOR=1.0), this figure would show an empty backdrop.
The American Comeback banner and tent backdrop visible in multiple recordings show no forward-spatter pattern. This absence is consistent with (a) a real rifle shot where the 2-phase-jet wake-drag reduction does not apply as modeled and the physics predicts no backdrop deposition anyway, or (b) any of the wound-mechanism alternatives discussed in Section 06. The absence of backdrop spatter in the recordings does not, on its own, distinguish between these possibilities. The forward-spatter analysis is documented here for completeness; the substantive forensic weight of this page rests on the back-spatter and bleeding-onset predictions, both of which are robust to the wake-drag modeling choice.
Prediction 3 — Bleeding Timing
Frame-by-frame analysis of video2_1.mp4 (30 fps), the closest available eyewitness recording with an unobstructed view of the seated subject, establishes the bleeding-onset interval directly from the source video. Three reference frames anchor the measurement:

Frame 68 (t = 2.239 s): subject seated, shirt clean, no posture distress; this frame defines the t=0 reference. Frame 70 (+66 ms): posture beginning to shift; no blood visible. Frame 81 (+429 ms): first mark appearing on the right side of the neck. Frame 82 (+461 ms): blood unambiguously visible. Throughout the 461 ms window, the wound site is on exposed skin with no fabric obstruction.
For comparison, Torricelli–Bernoulli flow through an open wound channel of bullet diameter, from a vessel at typical physiological pressure, predicts the following:
| Vessel | vjet | Q (mL/s) | t to 0.1 mL | t to 1 mL |
|---|---|---|---|---|
| Carotid (systolic, peak) | 5.72 m/s | 287 | 0.35 ms | 3.48 ms |
| Carotid (mean arterial) | 4.84 m/s | 243 | 0.41 ms | 4.11 ms |
| Carotid (diastolic, trough) | 4.49 m/s | 225 | 0.44 ms | 4.43 ms |
| Jugular (mean venous) | 1.42 m/s | 71 | 1.40 ms | 14.0 ms |
For an exposed neck wound (no fabric to wick through), the expected delay to a photographically resolvable bloodstain is 1–5 ms for carotid involvement, 5–15 ms for jugular involvement. The observed 429–461 ms interval is 30× to 110× longer than physics predicts.
At a heart rate of 60–72 bpm, one cardiac cycle is 833–1000 ms. The observed delay corresponds to roughly half a cardiac cycle — a duration during which a real vascular wound would have produced visible blood within the first ~5% of that interval. The interval itself is the anomaly; it requires explanation.
Three explanations are consistent with the observed timing:
The standard rifle-shot account predicts two robust observables (dense back-spatter halo, rapid bleeding onset) and one modeling-dependent observable (forward-spatter cone on the backdrop, contingent on the wake-drag reduction discussed in Section 04). Neither of the two robust observables is present in the recordings. The three alternative explanations below (no major vessel struck, pre-existing arrest, mis-identified t=0) each account for the two robust null observations in a different way, but all three are inconsistent with the prosecution's stated mechanism. The simplest unifying alternative — an internal energetic event at the RØDE transmitter location rather than an external projectile — is documented in Sections 01–04 of the main analysis and accounts for the two robust null observations simultaneously.
Methodology
The complete analysis is implemented in approximately 350 lines of Python (NumPy + SciPy + Matplotlib). The core computation has three phases: subfamily generation (discretizing the continuous distribution of drop sizes into rings of constant r/a), trajectory integration (vectorized RK2 with Reynolds-dependent drag and adaptive sub-stepping per drop), and stain rendering (Weber/Ohnesorge spreading with radial-direction elongation).
For each ring i defined by inner radius bi and outer radius bi+1 (geometrically spaced from 1.05a to 5a), the closed-form mass integral (Eq. 23 of the 2017 paper for forward spatter; Eq. 24 of the 2016 paper for back spatter) gives Mi. The droplet diameter li* is evaluated at the bin midpoint. The number of drops per bin is then ni = Mi / (ρ π li*3 / 6).
def back_subfamilies(n_rings=80): h = h_penetration r_min = theta_tip * h * 1.05 r_max = 0.05 r_edges = np.geomspace(r_min, r_max, n_rings + 1) r_mid = np.sqrt(r_edges[:-1] * r_edges[1:]) # Eq. 21: A = -theta^2 V^2 / r A_mag = theta_tip**2 * V**2 / r_mid # Eq. 22: l* = 2 pi w / sqrt(rho |A| / 3 sigma) l_i = 2*np.pi * w_slender / np.sqrt(rho * A_mag / (3 * sigma)) # Eq. 23: v_z = -theta^2 V (h/r) v_z = theta_tip**2 * V * h / r_mid # Eq. 24: M_i = 2 pi rho (h theta)^2 (b_i+1 - b_i) c db = np.diff(r_edges) / h M_i = 2 * np.pi * rho * (h * theta_tip)**2 * db * c_slender M_i *= (target_volume * rho) / M_i.sum() n_i = M_i / (rho * (4/3) * np.pi * (l_i/2)**3) return r_mid, l_i, v_z, n_i, M_i
Each drop's trajectory in 3D with quadratic drag and gravity is integrated using midpoint (RK2) stepping. All drops are integrated simultaneously as NumPy arrays. Per-drop step size is adapted to each drop's stopping time, so a 20 µm drop and a 400 µm drop both integrate to acceptable accuracy without forcing the small-drop step on every drop. Reynolds-dependent drag coefficient (Eq. 25) and a phenomenological dense-spray wake-drag-reduction factor are applied.
The wake-drag-reduction factor (WAKE_FACTOR = 0.2) is a phenomenological knob in the current implementation, not a value derived from the cited papers' own equations. The paper it draws motivation from (Comiskey/Yarin/Attinger 2017) does not apply the reduction as a scalar multiplier on single-particle drag; the full 2-phase jet treatment referenced in that paper's Section III would replace it. Running the pipeline with WAKE_FACTOR = 1.0 reproduces the standard-drag result: 0 of 20,000 sampled droplets reach the 61 cm backdrop. This is disclosed in the source code comments and is discussed on the site in Section 04. Absolute droplet counts also depend on the dimensionless impulse-time factor c, which is calibrated to specific experimental geometries in the source papers; for the prosecution's stated geometry the calibration is approximate. The shape of the back-spatter halo (which does not require long droplet flight through air) and the bleeding-onset timing (which does not involve drag at all) are robust to both knobs; the absolute forward-spatter count is not.
Verify It Yourself
The complete Python pipeline is available below. It runs on any system with Python 3.8+, NumPy, SciPy, and Matplotlib (Plotly optional for the 3D visualizations). All parameters — impact velocity, bullet caliber, vessel pressure, standoff distance, ejected volume — are exposed at the top of the script so independent investigators can vary them and re-run.
The script implements each equation from the source papers directly, with the equation number and source paper cited inline. The back-spatter and bleeding-onset predictions use published values from the cited peer-reviewed work without adjustable knobs. The forward-spatter prediction includes one phenomenological parameter (WAKE_FACTOR) disclosed in the source and in Section 04 of this page; that knob's sensitivity is shown explicitly and both regimes (WAKE_FACTOR = 1.0 standard drag, and WAKE_FACTOR = 0.2 wake-reduced) are documented so that any independent reviewer can reproduce either result. There are no hidden constants and no synthetic data.
Complete back- and forward-spatter pipeline with Re-dependent drag, RT droplet generation, and trajectory integration. Generates the shirt-face and backdrop figures shown above.
Download Python ScriptShirt-face renderer. Takes the back-spatter subfamily output and produces the exhibit photograph showing the predicted entry-shirt pattern. Configurable standoff, color, and stain rendering.
Download Python ScriptBleeding-onset timing calculation. Torricelli–Bernoulli jet velocity for carotid and jugular at physiological pressures; predicted time to a photographically resolvable blood volume on the skin.
Download Python Script1. Install dependencies: pip install numpy scipy matplotlib plotly
2. Save the .py files (the download attribute restores the proper filename).
3. Run: python blood_spatter_pipeline.py to regenerate the back-spatter and forward-spatter figures. Run python shirt_face_2d.py to regenerate the shirt-face exhibit. Run python vascular_timing.py to regenerate the bleeding-onset table.
4. All parameters — impact velocity, bullet geometry, blood properties, ejected volume, wake factor, standoff distance — are at the top of each script. Vary them and re-run.
The scripts use the equations as published in Comiskey/Yarin/Kim/Attinger 2016 (Phys. Rev. Fluids 1, 043201) and Comiskey/Yarin/Attinger 2017 (Phys. Rev. Fluids 2, 073906). If you obtain different predictions for the same input parameters, contact followtheepicenter.com.
Prediction of blood back spatter from a gunshot in bloodstain pattern analysis. Phys. Rev. Fluids 1, 043201. The slender-bullet model used for back-spatter prediction.
Open at journalHydrodynamics of back spatter by blunt bullet gunshot with a link to bloodstain pattern analysis. Phys. Rev. Fluids 2, 073906. The blunt-bullet model used for forward-spatter prediction.
Open at journalSummary
The peer-reviewed hydrodynamic models, applied to the prosecution's stated impact parameters, predict a dense back-spatter halo around the entry wound and visible bleeding within tens of milliseconds for any major neck vessel. Neither is present in the recorded evidence. Both predictions are robust to the modeling knobs discussed in Section 07 (back-spatter geometry depends only on the potential-flow field and Rayleigh–Taylor instability, both of which act within millimeters of the wound; bleeding-onset timing depends on Torricelli jet velocity and a stated resolvable-volume threshold). The 429–461 ms observed bleeding-onset delay is 30× to 110× longer than the physics predicts for any major vessel involvement.
The third prediction discussed on this page — a forward-spatter cone on the downstream backdrop — is more modeling-dependent. Under standard single-particle drag, no droplets reach the 61 cm backdrop and no backdrop pattern is predicted; under a 2-phase-jet wake-drag reduction, approximately 22 million drops are predicted to deposit in a ~16 cm-radius pattern. The recorded backdrop shows no such pattern. This absence is consistent with either the wake-drag-reduction model being inapplicable at this geometry, or with the wound-mechanism alternatives discussed in Section 06. The forward-spatter absence does not, on its own, distinguish between those possibilities. The substantive forensic weight of this page rests on the two robust null observations.
The simplest explanation that accounts for both robust null observations is that the wound mechanism was not what the prosecution claims. A localized internal energetic event — documented elsewhere in this site through dense optical flow, gas-release imaging, acoustic source localization, and shooter-position analysis — produces no high-velocity bullet wake through tissue and no major vascular jet, and would not be expected to produce the predicted back-spatter halo or rapid bleeding onset.
This page does not assert what did happen. It establishes what the physics requires if the prosecution's account is correct, and documents the failure of the robust requirements against the recorded evidence. The forward-spatter analysis is documented for completeness with its modeling assumptions made explicit; the back-spatter and bleeding-onset findings are what the page rests on.
The full Python pipeline above allows the prosecution's experts — or any independent expert — to verify these predictions, vary the input parameters, and report any conditions under which the two robust observables would be absent for a real high-velocity rifle round to a vascular target. The back-spatter and bleeding-onset predictions use published values from the cited peer-reviewed work without adjustable knobs. The forward-spatter prediction includes one phenomenological parameter (WAKE_FACTOR, documented in the source code and Section 07); sensitivity to that parameter is shown explicitly on this page and can be re-run with WAKE_FACTOR=1.0 to reproduce the zero-deposition result under standard drag.