Below is a self-contained technical report you can send as-is. # Report: A practical historical model for black-powder firearm inputs and muzzle velocity ## Purpose This report defines a reusable method for estimating the quantities museums and catalogues usually do **not** provide for pre-cartridge black-powder weapons, especially **powder charge**, **projectile fit**, and **muzzle velocity**. It is meant for a calculator or rules backend, not for laboratory reconstruction. The target period is broadly late medieval through early industrial muzzle-loading arms, with the model aimed primarily at **round-ball firearms** and **round-shot artillery**. The model is family-based because surviving evidence shows that pistols, muskets, sporting smoothbores, patched-ball rifles, and artillery were loaded and behaved differently enough that one universal formula is not defensible. ([henrykrank.com][1]) The model has four jobs. First, infer projectile mass when only bore or caliber is known. Second, infer a historically plausible charge when only gun family and caliber is known. Third, infer projectile fit, including **windage** for smoothbores and **patch fit** for rifles. Fourth, use those inputs to estimate muzzle velocity in a way that scales correctly across weapon families. The strongest evidence base is for patched round-ball rifles, then military smoothbores and single-shot pistols, with sporting smoothbores weaker and artillery broad-band rather than precision-calibrated. ([henrykrank.com][1]) ## What the model is and is not This is a **semi-empirical** model. It is partly physics-based and partly calibrated against historical loading rules, modern reproduction load charts, and chronograph data. It is not a first-principles thermochemical solver. It is not a guarantee of exact historical muzzle velocity for a particular specimen. Historical black powder varied by composition, grain size, moisture, and manufacturing quality, and loading fit varied with fouling, cloth, and workmanship. Even period manuals and modern load charts treat charges as practical working values, not immutable truths. Pedersoli explicitly says its published “Powder Load” values are target-shooting loads worked up with Swiss black powder, and that other powders require adjustment. ([henrykrank.com][1]) The model is therefore best understood as a way to produce a **credible baseline**. If you have a real documented service charge or a measured muzzle velocity for a specific historical arm, those should override the generic family defaults. ## Units used throughout All formulas below use the following units. * Bore, caliber, ball diameter, and barrel length are in **inches**. * Projectile mass and powder charge are in **grains**. * Shot weight for artillery may be entered either in **grains** or in **pounds avoirdupois**, but the formulas below specify which. * Muzzle velocity is in **feet per second**. * Windage is dimensionless when written as a ratio. For reference, one pound is **7,000 grains**. Pedersoli’s chart also restates the basic unit conversions, including 1 grain and 1 inch. ([henrykrank.com][1]) ## Weapon families The first required step is to assign a weapon to the correct family. This is not cosmetic. It determines the charge rule, the fit rule, and the velocity constants. ### 1) Small target single-shot pistol This means a **single-shot handgun**, generally small caliber, used for precision or dueling rather than battlefield service. Typical examples are **Le Page**, **Kuchenreuter**, and other light target or dueling pistols. In Pedersoli’s load chart, small target pistols in the rough .31 to .44 range carry relatively high charge-to-ball ratios compared with larger martial pistols. The NMLRA’s flintlock-pistol article also gives a .45-class example built as a target-oriented patched-ball pistol using a .440 ball and a .020 patch, showing the tighter-fit philosophy typical of accuracy-oriented handguns. ([henrykrank.com][1]) Use this family when the gun is clearly a target or dueling pistol, usually lighter-caliber, often more refined, and not a general martial sidearm. ### 2) Medium or large single-shot round-ball pistol This means a **single-shot handgun** used for defense or combat rather than pure target work. The family includes **Queen Anne pistols**, **dragoon pistols**, **cavalry pistols**, **naval/sea-service pistols**, and similar one-shot handguns. Pedersoli’s data for Queen Anne, Kentucky/Bounty-style pistols, AN IX-type martial pistols, and similar arms all point to lower charge-to-ball ratios than the small-target-pistol family. ([henrykrank.com][1]) Use this family for pocket pistols, officer’s pistols, cavalry pistols, dragoon pistols, Queen Anne pistols, and most large-bore martial handguns. ### 3) Military smoothbore long arm This means a **shoulder-fired smoothbore** of military type, such as a **Brown Bess**, **Charleville**, or other musket, military carbine, or service fusil. These arms typically used an undersized ball for rapid loading in dirty barrels. The American Battlefield Trust’s Brown Bess and Charleville summaries explicitly note bore and ball combinations such as **.75 bore / .69 ball** for the Brown Bess and **.69 bore / .66 ball** for the Charleville, which are exactly the kind of windage-heavy military fits that define this family. RifleShooter’s Brown Bess article likewise describes a .75 musket using a .71 ball with about 100 grains of coarse powder. ([American Battlefield Trust][2]) Use this family for muskets, military carbines, and service smoothbores. ### 4) Sporting smoothbore This means a **civilian smoothbore**, such as a fowling piece or hunting gun, fired with a single round ball. This family is distinct because period sporting literature preserves a different loading rule than military ordnance practice. A recent ASAC round-ball report quotes late-18th-century guidance that the ball-load charge for a fowling piece could be about **one-third the weight of a ball of the exact caliber**. That is the strongest direct family-level loading rule in the source set. ([henrykrank.com][1]) Use this family for fowling pieces and civilian smoothbores that are not clearly military issue. ### 5) Patched round-ball rifle This means a **rifled shoulder arm** firing a **spherical ball with a cloth patch**. Typical examples include **Kentucky/Pennsylvania rifles**, **Jäger rifles**, and **Hawken-type rifles** when used with round ball rather than later conicals. The patch changes the whole internal-ballistics regime by greatly improving gas seal relative to smoothbores. Pedersoli’s rifle data are especially consistent here: .45, .50, and .54 flintlock rifles cluster tightly around a 0.30 charge-to-ball-weight ratio. Chronograph data for .50 flintlock rifles also make this the best-calibrated family in the whole model. ([henrykrank.com][1]) Use this family for rifled round-ball arms with patching. ### 6) Smoothbore artillery / cannon This means muzzle-loading smoothbore artillery firing **round shot**. It includes long guns and carronades, but those should be treated as separate artillery subfamilies because their charge fractions and effective lengths differ. The *Hand-Book of Artillery* states that the ordinary service charge for heavy guns was about **one-fourth the weight of the shot**, and the breaching charge was about **one-third the weight of the shot**. The same handbook notes that beyond a charge equal to about one-third the weight of the shot, range gains are small while recoil rises sharply. ([Wikimedia Commons][3]) Use this family for cannon, ship guns, field guns, and carronades, but keep carronades on their own sub-branch because they use much lighter charges. ## Projectile mass For a lead round ball of actual diameter (d) inches, use: [ M_{\text{gr}} = 1502.6 , d^3 ] Where: * (M_{\text{gr}}) = projectile mass in grains * (d) = actual projectile diameter in inches This formula is based on the volume of a sphere and the density of lead. The (d^3) term is not a “cube bullet” assumption; any three-dimensional object’s volume scales with the cube of its linear dimension, and the constant 1502.6 already includes the spherical geometry and unit conversions. Pedersoli’s published ball sizes line up well with standard round-ball masses from this formula. ([henrykrank.com][1]) If the gun is identified by **gauge** or **bore number**, the nominal full-bore ball weight is: [ M_{\text{gr}} = \frac{7000}{\text{gauge}} ] Where: * gauge = the historical bore number * 20 gauge means 20 lead balls of bore diameter weigh one pound This is a historical definition, not an approximation. ([henrykrank.com][1]) ### Which diameter to use This is crucial. For a patched rifle, use the **actual ball diameter**, not the nominal caliber alone. For a military smoothbore, use the **actual service ball diameter** if known; if only bore is known, infer ball diameter from windage. For artillery, if the shot weight is known directly, use that instead of back-calculating from caliber. ## Charge formulas A single universal charge ratio is not supported by the sources. The charge rule has to be family-specific. ### Small target single-shot pistol [ Q = 0.20M ] Where: * (Q) = powder charge in grains * (M) = projectile mass in grains This is based on small target-pistol patterns in Pedersoli’s chart, which tend to use relatively high charge-to-ball-weight ratios compared with martial pistols. ([henrykrank.com][1]) ### Medium or large single-shot round-ball pistol [ Q = 0.14M ] This is based on medium and large one-shot pistols such as Queen Anne and Kentucky/Bounty-style pistols in Pedersoli’s chart. Examples include .50 and .54-class pistols running much lower ratios than small target pistols. ([henrykrank.com][1]) ### Military smoothbore long arm [ Q = 0.25M ] This is a **generic baseline**, not a replacement for known service charges. It is meant for when you know you have a musket-type arm but lack documented charge data. Real service charges often varied by ordnance system, and modern reproduction target loads can be substantially lighter. Pedersoli’s Brown Bess and Charleville-class target loads are lower than some historical service cartridges, which is why this family should always accept an override. ([henrykrank.com][1]) ### Sporting smoothbore [ Q = 0.33M_{\text{full-bore}} ] This is the cleanest direct period rule in the model. The ASAC report quotes late-18th-century sporting guidance that the charge for a fowling piece with ball could be about one-third the weight of a ball of exact caliber. ([henrykrank.com][1]) ### Patched round-ball rifle [ Q = 0.30M ] This is one of the strongest results in the whole system. Pedersoli’s flintlock rifle entries are extremely consistent: .45 with a .445 ball and 40 grains, .50 with a .490 ball and 55 grains, and .54 with a .535 ball and 70 grains all sit very close to 0.30–0.31 times ball weight. That is why rifles should default to **0.30**, not **0.33**. ([henrykrank.com][1]) ### Artillery long gun Ordinary service baseline: [ Q = 0.25W_{\text{shot}} ] Breaching or heavy charge: [ Q = 0.33W_{\text{shot}} ] Where: * (W_{\text{shot}}) = shot weight, in the same mass units used for the charge ratio The *Hand-Book of Artillery* gives these ratios directly. ([Wikimedia Commons][3]) ### Carronade [ Q = 0.08 \text{ to } 0.12W_{\text{shot}} ] Carronades used much lighter charges than long guns of equivalent shot weight and must be treated separately. The long-gun artillery ratios should not be forced onto carronades. ([Wikimedia Commons][3]) ## Powder strength / REF If your calculator already uses a **REF** system for powder strength, add it explicitly. Define: [ G_p = \frac{\text{REF}*{\text{powder}}}{\text{REF}*{\text{baseline}}} ] Where: * (G_p) = dimensionless powder-strength factor * (\text{REF}_{\text{powder}}) = REF of the actual propellant * (\text{REF}_{\text{baseline}}) = REF of the baseline powder used to calibrate the family constants Use the REF factor inside a square root in the velocity model, because velocity scales with the square root of effective propellant energy rather than linearly. For example, if baseline black powder is REF 0.4 and serpentine powder is REF 0.3: [ G_p = \frac{0.3}{0.4} = 0.75 ] and the velocity multiplier becomes: [ \sqrt{0.75} \approx 0.866 ] So serpentine reduces velocity by about 13.4% relative to the baseline. This is also consistent with historical commentary that corned powder materially outperformed serpentine powder. ([henrykrank.com][1]) ## Barrel-length term Use a saturating barrel-efficiency function: [ B(L) = 1 - e^{-L/\lambda_f} ] Where: * (L) = barrel length in inches * (\lambda_f) = family-specific barrel-efficiency length constant * (B(L)) = dimensionless barrel-efficiency term between 0 and 1 This form captures the fact that longer barrels extract more useful work from black powder, but with diminishing returns. It is much better behaved than a linear term. ## Smoothbore windage Windage is one of the most important missing variables in museum data, and it must be modeled explicitly for smoothbores. Define total windage as: [ W_t = B - D ] Where: * (W_t) = total windage in inches * (B) = bore diameter in inches * (D) = actual projectile diameter in inches Define the dimensionless windage ratio as: [ w = \frac{B-D}{B} ] This is the right form to use in the model, because a fixed .05-inch gap means something very different in a .31-caliber pistol than in a .75 musket or a cannon. ### Historically anchored examples The American Battlefield Trust describes the Brown Bess as a **.75 bore firing a .69 ball**, which gives: [ w = \frac{0.75-0.69}{0.75} = 0.08 ] The same source describes the Charleville as a **.69 bore firing a .66 ball**, which gives: [ w \approx \frac{0.69-0.66}{0.69} \approx 0.043 ] RifleShooter gives another Brown Bess example using a .71 ball in a .75 bore, which implies: [ w \approx \frac{0.75-0.71}{0.75} \approx 0.053 ] These examples define a realistic military-musket range. ([American Battlefield Trust][2]) ### Default windage values when ball size is unknown If you do not know the actual ball diameter, use default windage ratios by family: * small target single-shot pistol: (w = 0.015) * medium or large single-shot pistol: (w = 0.03) * military smoothbore long arm: (w = 0.055) * sporting smoothbore: (w = 0.03) * artillery long gun: (w = 0.05) * carronade: (w = 0.03) These defaults are not perfect, but they are far better than a flat absolute windage value across all bores. ## Smoothbore seal function from windage The best practical windage penalty is: [ S(w) = (1-w)^{n_f} ] Where: * (S(w)) = seal/efficiency factor from windage * (w) = dimensionless windage ratio * (n_f) = family-specific exponent This form is preferable to a linear penalty because it stays bounded, behaves well across scales, and can be calibrated by family. ### Family exponents Use: * small target single-shot pistol: (n_f = 1.0) * medium/large single-shot pistol: (n_f = 1.5) * military smoothbore long arm: (n_f = 2.0) * sporting smoothbore: (n_f = 1.5) * artillery long gun: (n_f = 4.0) * carronade: (n_f = 2.5) The artillery exponent is intentionally much stronger. The Hythe *Class Book for the School of Musketry* reported that with **1/10 inch windage in a 2.02-inch bore**, roughly **one-third of the force was lost**. That is the key calibration anchor for a strong artillery windage penalty. Small-arms exponents are lighter because a Brown Bess-like windage ratio around 0.05–0.08 should not collapse the gun’s efficiency to nonsense. ([American Battlefield Trust][2]) ## Patched round-ball rifle fit Rifles should **not** use the smoothbore windage formula. The patch fundamentally changes the fit system. The safest, least-subjective way to model patched rifles is this: 1. Use a **default patch thickness** of **0.010 inch**. 2. Use a ball diameter of either: * (D = B - 0.005) inches if that corresponds to a known common ball size, or * (D = B - 0.010) inches as a fallback. 3. Compute an effective fit ratio: [ F = \frac{D + 2t_p}{B} ] Where: * (F) = effective fit ratio * (t_p) = patch thickness in inches * (B) = bore/caliber in inches * (D) = ball diameter in inches The reason for the (2t_p) term is that the patch fills the annular gap on **both sides** of the ball. ### Why use a default patch instead of a guessed “fit class” Pedersoli’s published round-ball tables show that the same **0.010-inch patch** is used across a broad caliber range, from roughly .32 through .58, while the ball diameter changes with caliber. That means patch thickness does **not** scale strongly and smoothly with caliber. The thing that scales is the **ball diameter relative to bore**, while the patch cloth often comes from a small set of common thicknesses. Pedersoli examples include .315/.010 for .32, .445/.010 for .45, .490/.010 for .50, .535/.010 for .54, and .575/.010 for .58. The NMLRA’s .45 flintlock pistol example using a .440 ball and a .020 patch demonstrates a tighter alternate regime, but not a smooth formula. Because museums rarely tell you the fit regime, requiring a human to guess “tight / standard / loose” would add subjectivity. A default 0.010-inch patch with ball undersize based on caliber is the least-assumptive baseline. ([henrykrank.com][1]) ### Rifle seal from fit ratio Use a deliberately simple seal function: [ S_p = \begin{cases} 0.97 & \text{if } F < 1.00 \ 1.00 & \text{if } 1.00 \le F \le 1.03 \ 0.99 & \text{if } F > 1.03 \end{cases} ] Where: * (S_p) = rifle seal factor This avoids inventing arbitrary bonuses for very tight combinations. Once a patched ball seals properly, extra tightness mostly increases loading resistance and fouling sensitivity rather than giving free velocity. ## Full muzzle-velocity formulas ### Smoothbores Use: [ V = A_f \cdot \sqrt{\frac{Q}{M}} \cdot \sqrt{G_p} \cdot \left(1 - e^{-L/\lambda_f}\right)\cdot (1-w)^{n_f}\cdot I ] Where: * (V) = muzzle velocity in feet per second * (A_f) = family calibration constant * (Q) = charge in grains * (M) = projectile mass in grains * (G_p) = powder REF factor relative to baseline * (L) = barrel length in inches * (\lambda_f) = family barrel-length constant * (w) = dimensionless windage ratio * (n_f) = family windage exponent * (I) = ignition/condition factor ### Rifles Use: [ V = A_f \cdot \sqrt{\frac{Q}{M}} \cdot \sqrt{G_p} \cdot \left(1 - e^{-L/\lambda_f}\right)\cdot S_p\cdot I ] Where all variables are as above, except (S_p) replaces the smoothbore windage term. ## Family constants These are the current recommended family constants. ### Small target single-shot pistol [ A_f = 3000,\qquad \lambda_f = 5 ] Use this for dueling and target pistols, typically smaller-caliber and tighter-fit. Medium confidence. Charge data are stronger than velocity data. ([henrykrank.com][1]) ### Medium or large single-shot round-ball pistol [ A_f = 2900,\qquad \lambda_f = 5 ] Use this for Queen Anne pistols, dragoon/cavalry pistols, sea-service pistols, and similar martial or general-purpose one-shot handguns. Medium confidence. ([henrykrank.com][1]) ### Military smoothbore long arm [ A_f = 2350,\qquad \lambda_f = 11 ] Use this for muskets, service carbines, and military fusils. Medium confidence. It is deliberately conservative because musket windage and service practice vary a lot. Brown Bess and Charleville examples anchor the family. ([American Battlefield Trust][2]) ### Sporting smoothbore [ A_f = 2450,\qquad \lambda_f = 12 ] Use this for civilian fowling pieces and other non-military smoothbores. Lower confidence than rifles and military smoothbores because the charge rule is well grounded but the velocity dataset is thinner. ([henrykrank.com][1]) ### Patched round-ball rifle [ A_f = 2380,\qquad \lambda_f = 4.5 ] This is the best-constrained family in the model. Chronograph data from .50 flintlock rifles and supporting rifle velocity references make this the most robust fit. Use this for Kentucky rifles, Jägers, Hawken-type patched-ball use, and similar round-ball rifles. ([The Muzzleloading Forum][4]) ### Artillery long gun [ A_f = 3650,\qquad \lambda_f = 24 ] Use this only as a broad historical band fit, not a precision artillery reconstructor. It is anchored to artillery charge rules and broad historical velocity bands. ([Wikimedia Commons][3]) ### Carronade [ A_f = 3650,\qquad \lambda_f = 8 ] Same broad caution as artillery long guns, but shorter effective barrel length and lighter charges. ([Wikimedia Commons][3]) ## Ignition / condition factor Use: [ I = 1.00 ] by default. Suggested optional adjustments: * (I = 0.98): poor ignition, damp powder, sloppy seating, or mild fouling penalty * (I = 1.02): ideal loading and ignition This factor should stay close to 1.00. It is not meant to paper over the wrong family or wrong charge. ## Examples ### Example 1: Brown Bess-type musket Assume: * family = military smoothbore long arm * bore (B = 0.75) inches * service ball (D = 0.69) inches * barrel length (L = 42) inches * powder REF factor (G_p = 1.00) * ignition factor (I = 1.00) Projectile mass: [ M = 1502.6(0.69)^3 \approx 493.6 \text{ grains} ] Charge baseline: [ Q = 0.25M \approx 123.4 \text{ grains} ] Windage ratio: [ w = \frac{0.75-0.69}{0.75} = 0.08 ] Seal term: [ (1-w)^{n_f} = (0.92)^2 \approx 0.846 ] Barrel term: [ 1 - e^{-42/11} \approx 0.978 ] Velocity: [ V \approx 2350 \cdot \sqrt{\frac{123.4}{493.6}} \cdot 1.00 \cdot 0.978 \cdot 0.846 \cdot 1.00 ] [ \sqrt{123.4/493.6} = \sqrt{0.25} = 0.5 ] So: [ V \approx 2350 \cdot 0.5 \cdot 0.978 \cdot 0.846 \approx 972 \text{ fps} ] That sits in the historical/reproduction musket neighborhood rather than inventing rifle-like performance. If you instead use a .71 ball as RifleShooter describes, windage and projectile mass both change slightly and velocity rises modestly. ([American Battlefield Trust][2]) ### Example 2: Queen Anne-class pistol Assume: * family = medium/large single-shot round-ball pistol * bore (B = 0.50) * ball (D = 0.49) * barrel (L = 6) * (G_p = 1.00) * (I = 1.00) Projectile mass: [ M = 1502.6(0.49)^3 \approx 176.8 \text{ grains} ] Charge: [ Q = 0.14M \approx 24.8 \text{ grains} ] Windage: [ w = \frac{0.50-0.49}{0.50} = 0.02 ] Seal term: [ (1-w)^{1.5} \approx 0.970 ] Barrel term: [ 1-e^{-6/5} \approx 0.699 ] Velocity: [ V \approx 2900 \cdot \sqrt{\frac{24.8}{176.8}} \cdot 1.00 \cdot 0.699 \cdot 0.970 ] [ \sqrt{24.8/176.8} \approx \sqrt{0.140} \approx 0.374 ] So: [ V \approx 2900 \cdot 0.374 \cdot 0.699 \cdot 0.970 \approx 735 \text{ fps} ] That is in the right practical band for a short black-powder pistol. Pedersoli’s Queen Anne charge data support the charge side of this strongly. ([henrykrank.com][1]) ### Example 3: .50 patched-ball rifle Assume: * family = patched round-ball rifle * bore (B = 0.50) * ball (D = 0.490) * patch (t_p = 0.010) * barrel (L = 36) * (G_p = 1.00) * (I = 1.00) Projectile mass: [ M = 1502.6(0.49)^3 \approx 176.8 \text{ grains} ] Charge: [ Q = 0.30M \approx 53.0 \text{ grains} ] Fit ratio: [ F = \frac{0.490 + 2(0.010)}{0.50} = \frac{0.510}{0.50} = 1.02 ] So (S_p = 1.00). Barrel term: [ 1-e^{-36/4.5} \approx 0.9997 ] Velocity: [ V \approx 2380 \cdot \sqrt{\frac{53.0}{176.8}} \cdot 1.00 \cdot 1.00 \cdot 1.00 ] [ \sqrt{53.0/176.8} \approx \sqrt{0.30} \approx 0.548 ] So: [ V \approx 2380 \cdot 0.548 \approx 1304 \text{ fps} ] If you substitute heavier hunting charges, like the higher rifle loads discussed in chronograph data, velocity rises into the historically familiar 1500–1800 fps region. That is why this family is the best-calibrated one. ([The Muzzleloading Forum][4]) ### Example 4: powder REF change Take the rifle example above, but with serpentine instead of baseline black powder. If baseline powder REF = 0.4 and serpentine REF = 0.3: [ G_p = 0.3/0.4 = 0.75 ] [ \sqrt{G_p} = 0.866 ] So the previous rifle velocity of 1304 fps becomes: [ 1304 \times 0.866 \approx 1130 \text{ fps} ] That is how the model should incorporate weaker historical powder without changing any other part of the system. ## What to do when real documented values exist Always prefer: 1. real projectile diameter, 2. real charge, 3. real barrel length, 4. real shot weight for artillery. The generic family formulas exist for cases where museums only tell you “.75 caliber musket,” “.50 rifle,” or “Queen Anne pistol” and omit ball size, charge, and velocity. ## Minimum required inputs This is the section your friend will probably care about most. ### Absolute minimum required inputs to derive everything else If you want the calculator to infer all missing values, the minimum input set is: 1. **Weapon family** * one of: * small target single-shot pistol * medium/large single-shot round-ball pistol * military smoothbore long arm * sporting smoothbore * patched round-ball rifle * artillery long gun * carronade 2. **Bore / caliber** * in **inches** 3. **Barrel length** * in **inches** 4. **Powder REF** * dimensionless, relative to your chosen baseline system With only those four inputs, the calculator can derive: * projectile diameter, if absent, from family defaults * projectile mass * charge * windage or patch fit * seal factor * muzzle velocity ### Strongly recommended optional inputs If available, these should override family defaults: 5. **Actual projectile diameter** * in **inches** 6. **Projectile type** * round ball by default * if not a round ball, this report’s formulas stop being directly applicable 7. **Patch thickness** for rifles * in **inches** * if absent, use default 0.010 inch 8. **Shot weight** for artillery * in **pounds** or **grains** * preferred over back-calculating from caliber 9. **Ignition / condition factor** * dimensionless * default 1.00 ### Derived defaults when optional values are missing If actual projectile diameter is missing: * for smoothbores, derive it from family windage defaults * for patched rifles, derive it from: * (D = B - 0.005) if that is a common size * otherwise (D = B - 0.010) If patch thickness is missing for rifles: * use (t_p = 0.010) inch If charge is missing: * derive it from the family formula If powder REF is missing: * use the baseline REF and set (G_p = 1.00) ## Final recommended workflow For implementation, this is the clean order. 1. Read the weapon family. 2. Read bore/caliber (B), barrel length (L), and powder REF. 3. If actual projectile diameter is provided, use it. Otherwise derive it from family defaults. 4. Compute projectile mass. 5. Compute charge from the family formula unless a documented historical charge is supplied. 6. For smoothbores, compute windage ratio (w) and smoothbore seal. 7. For rifles, compute patch fit ratio (F) and rifle seal (S_p). 8. Apply the family constants (A_f) and (\lambda_f). 9. Compute muzzle velocity with the appropriate formula. ## Bottom line The model now includes all of the major contributors to historical muzzle velocity that can reasonably be inferred from sparse museum-style data: * projectile mass, * charge, * powder strength via REF, * barrel-length efficiency, * smoothbore windage, * rifle patch fit, * family-specific calibration, * ignition/condition. It is strongest for patched round-ball rifles, moderate for pistols and military smoothbores, weaker for sporting smoothbores, and broad-band for artillery. That is a limitation of the available evidence, not of the logic of the model itself. If you want a backend that is historically serious without becoming unusably bespoke, this is a sound place to stop. ([henrykrank.com][1]) If you want, I can turn this into a code-ready technical spec next. [1]: https://www.henrykrank.com/media/pdfs/PEDERSOLI%20suggested%20black%20powder%20loads.pdf?utm_source=chatgpt.com "PEDERSOLI suggested black powder loads.pdf" [2]: https://www.battlefields.org/learn/articles/glossary-small-arms-across-three-wars?utm_source=chatgpt.com "A Glossary of Small Arms Across Three Wars" [3]: https://upload.wikimedia.org/wikipedia/commons/6/6f/The_hand-book_of_artillery_%28IA_handbookofartillrobe%29.pdf?utm_source=chatgpt.com "The hand-book of artillery" [4]: https://www.muzzleloadingforum.com/threads/50cal-flintlock-velocity-tests.38417/?utm_source=chatgpt.com "50cal Flintlock - Velocity Tests"