This all means nothing without sharing the formulas behind your data.
And maybe look at the spreadsheet where 300 PRC is listed at 220fps which is in fact a typo.
BASE UNITS
All internal math is done in SI units.
1 grain = 0.00006479891 kg
Bullet mass (kg):
mb = Wgr * 0.00006479891
Powder mass (kg):
mp = Pgr * 0.00006479891
========================
MODELED MUZZLE VELOCITY
Each case has anchor values:
Vref = reference muzzle velocity (m/s)
Wref = reference bullet weight (grains)
s = velocity slope (m/s per grain lighter)
Modeled muzzle velocity:
V0 = Vref + s * (Wref - W)
Where: W = bullet weight (grains)
This keeps velocities internally consistent per case.
========================
MODELED POWDER CHARGE
Each case has:
Pref = reference powder charge (grains)
sp = powder slope (grains per grain of bullet weight)
Estimated powder charge:
P = Pref + sp * (W - Wref)
========================
IMPACT VELOCITY
Vd = impact velocity at benchmark distance
(from Hornady 4DOF)
Velocity retention:
R = Vd / V0
========================
WIND DRIFT METRIC
Wind drift is evaluated as drift per unit wind:
D = Drift_cm / Wind_mps
If wind = 1 m/s, then:
D = Drift_cm
Lower is better.
========================
RECOIL IMPULSE MODEL
Gas velocity constant:
Vg = assumed gas velocity (m/s)
Recoil impulse proxy:
I = mb * V0 + mp * Vg
Units: N·s (scaled impulse proxy)
This is momentum-based, not energy-based.
========================
IMPACT MOMENTUM
M = mb * Vd
Units: kg·m/s
========================
BARREL LIFE PROXY
Simple overbore proxy:
BL_raw = P / (Bore_diameter^2)
Where: P = powder charge (grains)
Bore_diameter = inches
Higher BL_raw = harder on barrels.
You can also model it as:
BL_raw = (P * V0) / Bore_area
Depending on how aggressive you want to be.
========================
CURVED SCORING FUNCTIONS
All scoring uses soft-knee curves.
For metrics where LOWER is better
(drift, recoil, barrel life):
S = 1 / (1 + (X / X0)^k)
For metrics where HIGHER is better
(retention, momentum):
S = 1 / (1 + (X0 / X)^k)
Where:
X = measured value
X0 = knee (baseline)
k = steepness factor
Properties:
If X = X0, score = 0.5
As X improves beyond knee, score approaches 1
As X worsens, score approaches 0
Non-linear. Not proportional.
========================
WIND SCORE
Swind = 1 / (1 + (D / D0)^k_wind)
D0 = wind knee (cm per m/s)
========================
VELOCITY SCORE
Svel = 1 / (1 + (R0 / R)^k_vel)
Where:
R = velocity retention
R0 = retention knee
========================
RECOIL SCORE
Srecoil = 1 / (1 + (I / I0)^k_recoil)
I0 = recoil knee
========================
MOMENTUM SCORE
Smom = 1 / (1 + (M0 / M)^k_mom)
M0 = momentum knee
========================
BARREL LIFE SCORE
Sbarrel = 1 / (1 + (BL_raw / BL0)^k_barrel)
BL0 = barrel knee
========================
COMPOSITE SCORE
All composites use the same four components:
Swind
Svel
Srecoil
Smom
General form:
Score = wd * Swind
+ wv * Svel
+ wr * Srecoil
+ wm * Smom
Where:
wd + wv + wr + wm = 1
Examples:
External Ballistics:
wd = 0.30
wv = 0.30
wr = 0.25
wm = 0.15
Balanced / Utility:
wd = 0.30
wv = 0.15
wr = 0.40
wm = 0.15
Shooter Bias:
wd = 0.25
wv = 0.00
wr = 0.60
wm = 0.15
========================
PERCENTILE RANK
Pct = 100 * rank position / total entries
(or Excel PERCENTRANK)
========================
AVERAGE RANK
AvgRank = mean(percentiles of composites)
Durability-adjusted:
AdjRank = PerformanceScore * (a + b * BarrelScore)
Where a + b = 1
========================
POWER FACTOR (NRL HUNTER ONLY)
PF = Bullet_weight_grains * Muzzle_velocity_fps / 1000
This is included only for NRL Hunter compliance reference.
It is not part of any composite score.