This commit is contained in:
2026-03-03 16:43:30 +00:00
commit 03452517b5
58 changed files with 13181 additions and 0 deletions

View File

@@ -0,0 +1,754 @@
// Knowledgebase: individual substances (fuels, oxidisers, monopropellants)
// and bipropellant combination performance data.
//
// COMBINATIONS also serve as the single source of truth for the solver's
// PropellantModal — PROPELLANTS and PROPELLANT_TYPES are derived below.
export const SUBSTANCES = [
// ── Fuels ───────────────────────────────────────────────────────────────
{
id: 'lh2',
name: 'Liquid Hydrogen',
symbol: 'LH₂',
formula: 'H₂',
role: 'fuel',
subcategory: 'Cryogenic',
description:
'Liquid hydrogen is the highest-performance liquid rocket fuel, prized for its exceptionally low molecular weight combustion products. It must be stored at 253 °C (just 20 K above absolute zero), imposing strict insulation and boil-off management requirements. Despite its low density, its combination with LOX delivers the highest specific impulse of any practical bipropellant.',
density: 71,
densityNote: 'at 253 °C, 1 atm',
boilingPoint: -253,
meltingPoint: -259,
storagePressure: '1 atm (cryogenic dewar)',
molecularWeight: 2.016,
autoignitionTemp: 500,
flammabilityRange: '475 vol% in air',
hazards: ['Extreme cryogen (253 °C)', 'Highly flammable', 'Wide flammability range', 'Asphyxiant in confined spaces'],
toxicity: 'Non-toxic',
engineExamples: ['RL-10', 'J-2', 'RS-68', 'Vulcain 2', 'LE-7A', 'HM7B'],
catalyticIsp: null,
compatibleWith: ['lox'],
},
{
id: 'rp1',
name: 'RP-1 (Kerosene)',
symbol: 'RP-1',
formula: 'C₁₂H₂₄ (avg)',
role: 'fuel',
subcategory: 'Storable',
description:
'Rocket Propellant-1 is a highly refined kerosene used as a rocket fuel. It is a complex mixture of hydrocarbons with good energy density, low toxicity relative to hydrazine fuels, and ambient storage conditions. Its high density makes it attractive for volume-constrained vehicles. It is one of the most widely used liquid rocket fuels in history.',
density: 820,
densityNote: 'at 20 °C',
boilingPoint: 175,
meltingPoint: -40,
storagePressure: 'Ambient',
molecularWeight: 170,
autoignitionTemp: 220,
flammabilityRange: '0.64.7 vol% in air',
hazards: ['Flammable liquid', 'Aspiration hazard', 'Skin irritant'],
toxicity: 'Low acute toxicity; mildly irritating',
engineExamples: ['Merlin', 'RD-180', 'F-1', 'NK-33', 'Rutherford', 'Gamma'],
catalyticIsp: null,
compatibleWith: ['lox', 'htp'],
},
{
id: 'lch4',
name: 'Liquid Methane',
symbol: 'LCH₄',
formula: 'CH₄',
role: 'fuel',
subcategory: 'Cryogenic',
description:
'Liquid methane is a cryogenic fuel that has gained prominence for reusable rocket applications. It offers a better Isp than RP-1, cleaner combustion (less coking), and is compatible with deep-throttling engines. It can in principle be produced on Mars via the Sabatier reaction, making it attractive for interplanetary missions.',
density: 424,
densityNote: 'at 162 °C, 1 atm',
boilingPoint: -162,
meltingPoint: -182,
storagePressure: '1 atm (cryogenic) or ~3 bar (semi-cryo)',
molecularWeight: 16.04,
autoignitionTemp: 537,
flammabilityRange: '515 vol% in air',
hazards: ['Cryogen (162 °C)', 'Highly flammable', 'Asphyxiant'],
toxicity: 'Non-toxic; simple asphyxiant',
engineExamples: ['Raptor', 'BE-4', 'Prometheus', 'Zephyr'],
catalyticIsp: null,
compatibleWith: ['lox'],
},
{
id: 'lc2h6',
name: 'Liquid Ethane',
symbol: 'LC₂H₆',
formula: 'C₂H₆',
role: 'fuel',
subcategory: 'Cryogenic',
description:
'Liquid ethane is a cryogenic hydrocarbon fuel investigated as an alternative to methane. Its slightly higher density and carbon content give marginally better volumetric performance. It has been researched for reusable applications and has similar handling requirements to LCH₄.',
density: 544,
densityNote: 'at 89 °C, 1 atm',
boilingPoint: -89,
meltingPoint: -183,
storagePressure: '1 atm (cryogenic)',
molecularWeight: 30.07,
autoignitionTemp: 472,
flammabilityRange: '312.5 vol% in air',
hazards: ['Cryogen (89 °C)', 'Flammable', 'Asphyxiant'],
toxicity: 'Non-toxic; simple asphyxiant',
engineExamples: ['Research engines (Korolev cross-feed studies)'],
catalyticIsp: null,
compatibleWith: ['lox'],
},
{
id: 'ethanol',
name: 'Ethanol',
symbol: 'EtOH',
formula: 'C₂H₅OH',
role: 'fuel',
subcategory: 'Storable',
description:
'Ethanol (typically used as 75% aqueous solution) was one of the earliest liquid rocket fuels, used in the German V-2. Today it is popular in amateur and experimental rocketry, especially with nitrous oxide as the oxidiser. The water content helps cool the combustion chamber and reduces flame temperature.',
density: 789,
densityNote: 'at 20 °C (anhydrous); 75% solution: ~870 kg/m³',
boilingPoint: 78,
meltingPoint: -114,
storagePressure: 'Ambient',
molecularWeight: 46.07,
autoignitionTemp: 365,
flammabilityRange: '3.319 vol% in air',
hazards: ['Flammable liquid', 'Vapour heavier than air'],
toxicity: 'Low acute toxicity; CNS depressant at high concentrations',
engineExamples: ['A-4 (V-2)', 'Amateur N₂O motors'],
catalyticIsp: null,
compatibleWith: ['n2o'],
},
{
id: 'udmh',
name: 'UDMH',
symbol: 'UDMH',
formula: '(CH₃)₂N₂H₂',
role: 'fuel',
subcategory: 'Hypergolic',
description:
'Unsymmetrical dimethylhydrazine is a storable, hypergolic fuel that ignites on contact with nitrogen tetroxide. Its storability (liquid at ambient temperatures) and instant ignition make it ideal for spacecraft and missile applications requiring reliable restart. It is highly toxic and carcinogenic.',
density: 791,
densityNote: 'at 20 °C',
boilingPoint: 63,
meltingPoint: -57,
storagePressure: 'Ambient (sealed)',
molecularWeight: 60.10,
autoignitionTemp: null,
flammabilityRange: '295 vol% in air',
hazards: ['Highly toxic', 'Carcinogenic', 'Hypergolic with N₂O₄', 'Flammable', 'Corrosive vapour'],
toxicity: 'Highly toxic; probable human carcinogen (IARC Group 2A)',
engineExamples: ['RD-253 (Proton)', 'YF-20 (Long March)', 'Viking (Ariane 14)'],
catalyticIsp: null,
compatibleWith: ['n2o4'],
},
{
id: 'mmh',
name: 'MMH',
symbol: 'MMH',
formula: 'CH₃N₂H₃',
role: 'fuel',
subcategory: 'Hypergolic',
description:
'Monomethylhydrazine is the premier storable spacecraft propellant when used with nitrogen tetroxide. It has been the workhorse of spacecraft propulsion systems for decades, prized for its wide liquid range, reliable hypergolic ignition, and good performance. Like all hydrazines, it is highly toxic.',
density: 874,
densityNote: 'at 20 °C',
boilingPoint: 87,
meltingPoint: -52,
storagePressure: 'Ambient (sealed)',
molecularWeight: 46.07,
autoignitionTemp: null,
flammabilityRange: '2.598 vol% in air',
hazards: ['Highly toxic', 'Carcinogenic', 'Hypergolic with N₂O₄', 'Flammable'],
toxicity: 'Highly toxic; probable human carcinogen',
engineExamples: ['Shuttle OMS/RCS', 'Orion SM', 'AJ10', 'R-4D', 'Aestus'],
catalyticIsp: null,
compatibleWith: ['n2o4'],
},
{
id: 'aerozine50',
name: 'Aerozine-50',
symbol: 'A-50',
formula: '50% UDMH + 50% N₂H₄',
role: 'fuel',
subcategory: 'Hypergolic',
description:
'Aerozine-50 is a 50/50 blend of UDMH and hydrazine developed for the Titan II missile. Compared to pure UDMH it has higher energy content; compared to pure hydrazine it has better thermal stability and lower freezing point. It ignites hypergolically with N₂O₄ and was used in the Apollo Lunar Module descent engine.',
density: 900,
densityNote: 'at 20 °C',
boilingPoint: 70,
meltingPoint: -57,
storagePressure: 'Ambient (sealed)',
molecularWeight: 53,
autoignitionTemp: null,
flammabilityRange: '299 vol% in air',
hazards: ['Highly toxic', 'Carcinogenic', 'Hypergolic with N₂O₄', 'Flammable'],
toxicity: 'Highly toxic; carcinogenic',
engineExamples: ['Titan II/III/IV', 'Lunar Module DPS', 'Delta II (second stage)', 'TR-201'],
catalyticIsp: null,
compatibleWith: ['n2o4'],
},
{
id: 'htpb',
name: 'HTPB',
symbol: 'HTPB',
formula: '(C₄H₆)ₙ (polymer)',
role: 'fuel',
subcategory: 'Hybrid',
description:
'Hydroxyl-terminated polybutadiene is a solid rubber binder used as both structural matrix and fuel in hybrid and solid rocket motors. In hybrid engines the solid grain regresses as oxidiser flows over it. HTPB has good mechanical properties, low toxicity during handling (before combustion), and is highly versatile.',
density: 920,
densityNote: 'cured solid at 20 °C',
boilingPoint: null,
meltingPoint: null,
storagePressure: 'N/A (solid)',
molecularWeight: null,
autoignitionTemp: 320,
flammabilityRange: 'N/A (solid)',
hazards: ['Combustible solid', 'Combustion products may be toxic'],
toxicity: 'Low toxicity as-cast; combustion gases are hazardous',
engineExamples: ['SpaceShipOne/Two (N₂O hybrid)', 'SRM binders (Space Shuttle SRB)', 'NAMMO hybrid'],
catalyticIsp: null,
compatibleWith: ['n2o', 'lox', 'ap'],
},
{
id: 'sucrose',
name: 'Sucrose',
symbol: 'Sucrose',
formula: 'C₁₂H₂₂O₁₁',
role: 'fuel',
subcategory: 'Solid',
description:
'Sucrose (table sugar) combined with potassium nitrate forms KNSU, a popular amateur "candy" propellant. The mixture is cast or pressed and burns to produce a vigorous thrust with modest specific impulse. It is widely used in educational and amateur rocketry due to its low cost and ease of manufacture.',
density: 1590,
densityNote: 'at 20 °C (crystal)',
boilingPoint: null,
meltingPoint: 186,
storagePressure: 'N/A (solid)',
molecularWeight: 342.30,
autoignitionTemp: 370,
flammabilityRange: 'N/A (combustible solid)',
hazards: ['Combustible solid when mixed with oxidiser', 'Dust explosion risk'],
toxicity: 'Non-toxic',
engineExamples: ['Amateur KNSU motors', 'Educational rocket motors'],
catalyticIsp: null,
compatibleWith: ['kno3'],
},
{
id: 'dextrose',
name: 'Dextrose',
symbol: 'Dextrose',
formula: 'C₆H₁₂O₆',
role: 'fuel',
subcategory: 'Solid',
description:
'Dextrose (glucose) is an alternative to sucrose in candy propellants, forming KNDX with potassium nitrate. It produces a slightly lower flame temperature than KNSU and is similarly accessible. KNDX is popular among amateur rocketeers seeking an alternative binder chemistry.',
density: 1540,
densityNote: 'at 20 °C',
boilingPoint: null,
meltingPoint: 146,
storagePressure: 'N/A (solid)',
molecularWeight: 180.16,
autoignitionTemp: 390,
flammabilityRange: 'N/A (combustible solid)',
hazards: ['Combustible solid when mixed with oxidiser', 'Dust explosion risk'],
toxicity: 'Non-toxic',
engineExamples: ['Amateur KNDX motors'],
catalyticIsp: null,
compatibleWith: ['kno3'],
},
// ── Oxidisers ───────────────────────────────────────────────────────────
{
id: 'lox',
name: 'Liquid Oxygen',
symbol: 'LOX',
formula: 'O₂',
role: 'oxidiser',
subcategory: 'Cryogenic',
description:
'Liquid oxygen is the most commonly used rocket oxidiser, offering high performance, non-toxicity, and relatively affordable cost. Its cryogenic nature (183 °C) requires insulated tanks and introduces boil-off losses. LOX is compatible with nearly all hydrocarbon fuels and hydrogen, making it the foundation of most high-performance launch vehicles.',
density: 1141,
densityNote: 'at 183 °C, 1 atm',
boilingPoint: -183,
meltingPoint: -219,
storagePressure: '1 atm (cryogenic dewar)',
molecularWeight: 32.00,
autoignitionTemp: null,
flammabilityRange: 'N/A (oxidiser; powerfully supports combustion)',
hazards: ['Cryogen (183 °C)', 'Powerful oxidiser', 'Explosive with hydrocarbons under pressure', 'Causes fire on contact with organic materials'],
toxicity: 'Non-toxic; high concentrations are physiologically dangerous',
engineExamples: ['Merlin', 'Raptor', 'RL-10', 'RD-180', 'BE-4', 'RS-68', 'J-2'],
catalyticIsp: null,
compatibleWith: ['lh2', 'rp1', 'lch4', 'lc2h6', 'htpb'],
},
{
id: 'n2o4',
name: 'Nitrogen Tetroxide',
symbol: 'N₂O₄',
formula: 'N₂O₄',
role: 'oxidiser',
subcategory: 'Hypergolic',
description:
'Nitrogen tetroxide is the standard storable oxidiser for military and spacecraft propulsion. It ignites hypergolically with hydrazine-based fuels, enabling reliable engine restarts without an ignition system. NTO is stored as a liquid at ambient temperature but is highly corrosive, toxic, and a strong oxidiser requiring careful materials compatibility.',
density: 1440,
densityNote: 'at 20 °C',
boilingPoint: 21,
meltingPoint: -11,
storagePressure: 'Ambient (sealed, slight pressure)',
molecularWeight: 92.01,
autoignitionTemp: null,
flammabilityRange: 'N/A (oxidiser)',
hazards: ['Highly toxic (IDLH 20 ppm)', 'Hypergolic with hydrazines', 'Strong oxidiser', 'Corrosive', 'Reddish-brown toxic fumes (NO₂)'],
toxicity: 'Highly toxic; IDLH 20 ppm; causes severe pulmonary oedema',
engineExamples: ['Shuttle OMS/RCS', 'Titan II/IV', 'Proton (second/third stage)', 'AJ10', 'Viking'],
catalyticIsp: null,
compatibleWith: ['udmh', 'mmh', 'aerozine50'],
},
{
id: 'htp',
name: 'High-Test Peroxide (HTP)',
symbol: 'HTP',
formula: 'H₂O₂ (≥90%)',
role: 'oxidiser',
subcategory: 'Green',
description:
'High-test peroxide is concentrated hydrogen peroxide (≥90%) used as a relatively "green" oxidiser. It decomposes exothermically over a silver or platinum catalyst to produce steam and oxygen, which then supports combustion of a fuel. HTP is significantly less toxic than NTO and has heritage in early British rocketry (Gamma engine) and amateur systems.',
density: 1390,
densityNote: 'at 20 °C (90%)',
boilingPoint: 114,
meltingPoint: -12,
storagePressure: 'Ambient (vented)',
molecularWeight: 34.01,
autoignitionTemp: null,
flammabilityRange: 'N/A (oxidiser)',
hazards: ['Strong oxidiser', 'Corrosive to skin/eyes', 'Decomposes explosively if contaminated', 'Fire risk with organics'],
toxicity: 'Moderate; concentrated solutions cause severe burns',
engineExamples: ['Gamma (Black Arrow)', 'Spectre', 'Amateur HTP/RP-1 engines', 'Bloodhound LSR'],
catalyticIsp: null,
compatibleWith: ['rp1'],
},
{
id: 'n2o',
name: 'Nitrous Oxide',
symbol: 'N₂O',
formula: 'N₂O',
role: 'oxidiser',
subcategory: 'Green',
description:
'Nitrous oxide is a self-pressurising liquid oxidiser popular in amateur and hybrid rocketry. Its vapour pressure (~5 MPa at 20 °C) eliminates the need for separate pressurisation systems. N₂O is relatively non-toxic and easy to handle compared to NTO or HTP, though it is a potent greenhouse gas and can detonate under specific conditions.',
density: 770,
densityNote: 'liquid at 20 °C, ~5 MPa',
boilingPoint: -88,
meltingPoint: -91,
storagePressure: '~5 MPa at 20 °C (self-pressurising)',
molecularWeight: 44.01,
autoignitionTemp: null,
flammabilityRange: 'N/A (oxidiser; non-flammable)',
hazards: ['Strong oxidiser', 'Detonation risk at high pressure/temperature', 'Asphyxiant', 'Greenhouse gas'],
toxicity: 'Low acute toxicity; can cause hypoxia in high concentrations',
engineExamples: ['SpaceShipOne/Two', 'Amateur hybrid motors', 'N₂O/ethanol experimental engines'],
catalyticIsp: null,
compatibleWith: ['ethanol', 'htpb'],
},
{
id: 'ap',
name: 'Ammonium Perchlorate',
symbol: 'AP',
formula: 'NH₄ClO₄',
role: 'oxidiser',
subcategory: 'Solid',
description:
'Ammonium perchlorate is the primary oxidiser in composite solid propellants (APCP). It is mixed with HTPB binder and aluminium powder to form the propellant grain. AP is an energetic solid that detonates under severe shock but is stable under normal processing conditions. It is the oxidiser in virtually all modern high-performance solid rocket motors.',
density: 1950,
densityNote: 'crystal at 20 °C',
boilingPoint: null,
meltingPoint: 240,
storagePressure: 'N/A (solid)',
molecularWeight: 117.49,
autoignitionTemp: 420,
flammabilityRange: 'N/A (solid oxidiser)',
hazards: ['Explosive oxidiser', 'Toxic chlorine-containing combustion products (HCl)', 'Skin/eye irritant', 'Environmental: thyroid disruptor'],
toxicity: 'Moderate; thyroid disruption with chronic exposure; combustion products (HCl) are toxic',
engineExamples: ['Space Shuttle SRB', 'Ariane 5 P230', 'Hobby/high-power APCP motors', 'Ares I/V SRBs'],
catalyticIsp: null,
compatibleWith: ['htpb'],
},
{
id: 'kno3',
name: 'Potassium Nitrate',
symbol: 'KNO₃',
formula: 'KNO₃',
role: 'oxidiser',
subcategory: 'Solid',
description:
'Potassium nitrate (saltpetre) is one of the oldest known oxidisers, the basis of black powder and candy propellants. In KNSU and KNDX it is combined with sucrose or dextrose to make an accessible, low-cost propellant for educational and amateur rocketry. Performance is modest but manufacturing complexity is low.',
density: 2109,
densityNote: 'crystal at 20 °C',
boilingPoint: 400,
meltingPoint: 334,
storagePressure: 'N/A (solid)',
molecularWeight: 101.10,
autoignitionTemp: null,
flammabilityRange: 'N/A (solid oxidiser)',
hazards: ['Oxidiser; accelerates combustion', 'Explosive when mixed with fuels and subjected to shock/heat', 'Irritant'],
toxicity: 'Low acute toxicity; irritant at high concentrations',
engineExamples: ['Amateur KNSU/KNDX candy motors', 'Black powder igniters'],
catalyticIsp: null,
compatibleWith: ['sucrose', 'dextrose'],
},
// ── Monopropellants ─────────────────────────────────────────────────────
{
id: 'n2h4_mono',
name: 'Hydrazine',
symbol: 'N₂H₄',
formula: 'N₂H₄',
role: 'monopropellant',
subcategory: 'Storable',
description:
'Hydrazine is the most widely used monopropellant in spacecraft propulsion. It decomposes exothermically over an iridium/alumina catalyst (Shell 405) to produce hot nitrogen, hydrogen, and ammonia gases. It offers high heritage, good Isp for a monopropellant, and reliable restart capability. Its high toxicity is its primary drawback, driving the search for green replacements.',
density: 1004,
densityNote: 'at 20 °C',
boilingPoint: 114,
meltingPoint: 2,
storagePressure: 'Ambient (sealed, slight positive pressure)',
molecularWeight: 32.05,
autoignitionTemp: 270,
flammabilityRange: '4.7100 vol% in air',
hazards: ['Highly toxic (IDLH 50 ppm)', 'Carcinogenic', 'Flammable', 'Reactive with many metals', 'Hypergolic with some oxidisers'],
toxicity: 'Highly toxic and probable human carcinogen (IARC Group 2A)',
engineExamples: ['MR-103 (many NASA/ESA spacecraft)', 'MONARC', 'Aerojet MR-80'],
catalyticIsp: 230,
// Thermodynamic data for solver (catalytic decomposition)
gamma: 1.27,
R: 376,
T0: 1000,
compatibleWith: [],
},
{
id: 'htp_mono',
name: 'HTP Monopropellant',
symbol: 'HTP',
formula: 'H₂O₂ (≥90%)',
role: 'monopropellant',
subcategory: 'Green',
description:
'High-test peroxide can be used as a monopropellant by catalytic decomposition over silver or platinum, producing steam and oxygen. Its Isp is lower than hydrazine but it is far less toxic, making it an attractive green alternative for attitude control systems and small thrusters in CubeSats and small satellites.',
density: 1390,
densityNote: 'at 20 °C (90%)',
boilingPoint: 114,
meltingPoint: -12,
storagePressure: 'Ambient (vented)',
molecularWeight: 34.01,
autoignitionTemp: null,
flammabilityRange: 'N/A (oxidiser/monoprop)',
hazards: ['Strong oxidiser', 'Corrosive', 'Decomposition can be violent if contaminated'],
toxicity: 'Moderate; corrosive to skin and eyes at high concentration',
engineExamples: ['Rutherford (gas gen.)', 'CubeSat monoprop thrusters', 'Bloodhound LSR'],
catalyticIsp: 185,
gamma: 1.30,
R: 350,
T0: 1030,
compatibleWith: [],
},
{
id: 'han',
name: 'HAN-based (AF-M315E / LMP-103S)',
symbol: 'HAN',
formula: 'NH₃OHNO₃ blend',
role: 'monopropellant',
subcategory: 'Green',
description:
'Hydroxylammonium nitrate (HAN) based ionic liquid monopropellants are the leading green replacements for hydrazine. AF-M315E (ASCENT) and LMP-103S (HPGP) deliver Isp values significantly higher than hydrazine while being far less toxic. They require higher catalyst pre-heat temperatures (~300 °C) than hydrazine but offer reduced handling hazards and regulatory burden.',
density: 1460,
densityNote: 'at 20 °C (AF-M315E)',
boilingPoint: null,
meltingPoint: -80,
storagePressure: 'Ambient (sealed)',
molecularWeight: null,
autoignitionTemp: null,
flammabilityRange: 'N/A (ionic liquid)',
hazards: ['Moderately toxic', 'Energetic; avoid contamination', 'Skin/eye irritant'],
toxicity: 'Moderately toxic; significantly safer than hydrazine',
engineExamples: ['GPIM (NASA)', 'Lunar Flashlight', 'Many commercial CubeSat thrusters'],
catalyticIsp: 250,
gamma: 1.25,
R: 340,
T0: 1930,
compatibleWith: [],
},
]
// ── Bipropellant combination performance data ────────────────────────────────
// Values at ~6.9 MPa chamber pressure unless noted.
// gamma and R feed directly into the solver (variable IDs match).
// T0 = flameTemp, OF = optimalOF for solver use.
export const COMBINATIONS = [
{
fuelId: 'lh2',
oxidiserId: 'lox',
isHypergolic: false,
vacuumIsp: 455,
flameTemp: 3250,
optimalOF: 6.0,
gamma: 1.21,
R: 934,
chamberPressureRef: '6.9 MPa',
expansionRatioRef: 40,
energeticCategory: 'Cryogenic Bipropellant',
notes: 'Highest Isp liquid bipropellant. Extremely demanding cryogenic handling for both propellants.',
engines: ['RL-10', 'J-2', 'RS-68', 'Vulcain 2', 'LE-7A', 'HM7B'],
},
{
fuelId: 'rp1',
oxidiserId: 'lox',
isHypergolic: false,
vacuumIsp: 363,
flameTemp: 3570,
optimalOF: 2.6,
gamma: 1.24,
R: 361,
chamberPressureRef: '6.9 MPa',
expansionRatioRef: 40,
energeticCategory: 'Cryogenic Bipropellant',
notes: 'High density, high performance. Proven across dozens of vehicles and engines over 60+ years.',
engines: ['Merlin', 'RD-180', 'F-1', 'NK-33', 'Rutherford'],
},
{
fuelId: 'lch4',
oxidiserId: 'lox',
isHypergolic: false,
vacuumIsp: 380,
flameTemp: 3500,
optimalOF: 3.5,
gamma: 1.20,
R: 416,
chamberPressureRef: '6.9 MPa',
expansionRatioRef: 40,
energeticCategory: 'Cryogenic Bipropellant',
notes: 'Reusable-friendly; clean combustion reduces coking. Potential ISRU on Mars.',
engines: ['Raptor', 'BE-4', 'Prometheus'],
},
{
fuelId: 'lc2h6',
oxidiserId: 'lox',
isHypergolic: false,
vacuumIsp: 375,
flameTemp: 3480,
optimalOF: 3.2,
gamma: 1.21,
R: 390,
chamberPressureRef: '6.9 MPa',
expansionRatioRef: 40,
energeticCategory: 'Cryogenic Bipropellant',
notes: 'Higher density than methane with comparable performance. Primarily in research.',
engines: ['Research engines'],
},
{
fuelId: 'udmh',
oxidiserId: 'n2o4',
isHypergolic: true,
vacuumIsp: 340,
flameTemp: 3040,
optimalOF: 2.6,
gamma: 1.25,
R: 320,
chamberPressureRef: '6.9 MPa',
expansionRatioRef: 40,
energeticCategory: 'Storable Bipropellant',
notes: 'Hypergolic storable combination. Highly toxic but reliable; widely used in Russian and Chinese vehicles.',
engines: ['RD-253 (Proton)', 'YF-20', 'Viking (Ariane 14)'],
},
{
fuelId: 'mmh',
oxidiserId: 'n2o4',
isHypergolic: true,
vacuumIsp: 341,
flameTemp: 3000,
optimalOF: 1.65,
gamma: 1.25,
R: 318,
chamberPressureRef: '6.9 MPa',
expansionRatioRef: 40,
energeticCategory: 'Storable Bipropellant',
notes: 'Primary spacecraft upper-stage and RCS propellant. Decades of heritage.',
engines: ['Shuttle OMS/RCS', 'Orion SM', 'AJ10', 'R-4D', 'Aestus'],
},
{
fuelId: 'aerozine50',
oxidiserId: 'n2o4',
isHypergolic: true,
vacuumIsp: 342,
flameTemp: 3070,
optimalOF: 1.9,
gamma: 1.25,
R: 316,
chamberPressureRef: '6.9 MPa',
expansionRatioRef: 40,
energeticCategory: 'Storable Bipropellant',
notes: 'Better stability than pure hydrazine. Used in Titan launch vehicles and the Apollo Lunar Module.',
engines: ['Titan II/III/IV', 'Lunar Module DPS', 'TR-201'],
},
{
fuelId: 'rp1',
oxidiserId: 'htp',
isHypergolic: false,
vacuumIsp: 328,
flameTemp: 2900,
optimalOF: 7.0,
gamma: 1.26,
R: 285,
chamberPressureRef: '2 MPa',
expansionRatioRef: 40,
energeticCategory: 'Pressure-fed Bipropellant',
notes: 'Relatively non-toxic combination. HTP decomposes catalytically before combustion.',
engines: ['Gamma (Black Arrow)', 'Spectre', 'Bloodhound LSR powerplant'],
},
{
fuelId: 'ethanol',
oxidiserId: 'n2o',
isHypergolic: false,
vacuumIsp: 295,
flameTemp: 2700,
optimalOF: 4.5,
gamma: 1.24,
R: 310,
chamberPressureRef: '~3 MPa',
expansionRatioRef: 10,
energeticCategory: 'Pressure-fed Bipropellant',
notes: 'Popular amateur/experimental combination; N₂O self-pressurises. Much safer than hypergolics.',
engines: ['Amateur N₂O/ethanol motors'],
},
{
fuelId: 'htpb',
oxidiserId: 'n2o',
isHypergolic: false,
vacuumIsp: 280,
flameTemp: 2700,
optimalOF: 7.0,
gamma: 1.23,
R: 300,
chamberPressureRef: '~3.5 MPa',
expansionRatioRef: 10,
energeticCategory: 'Hybrid',
notes: 'Simple and safe hybrid combination. O/F varies with regression rate and geometry.',
engines: ['SpaceShipOne/Two', 'NAMMO hybrid', 'Amateur hybrids'],
},
{
fuelId: 'htpb',
oxidiserId: 'lox',
isHypergolic: false,
vacuumIsp: 350,
flameTemp: 3200,
optimalOF: 2.3,
gamma: 1.22,
R: 360,
chamberPressureRef: '6.9 MPa',
expansionRatioRef: 40,
energeticCategory: 'Hybrid',
notes: 'Higher performance hybrid. Requires cryogenic LOX handling alongside solid grain.',
engines: ['Research vehicles', 'Peregrine (small launcher studies)'],
},
{
fuelId: 'htpb',
oxidiserId: 'ap',
isHypergolic: false,
vacuumIsp: 275,
flameTemp: 3300,
optimalOF: null,
gamma: 1.24,
R: 320,
chamberPressureRef: '6.9 MPa',
expansionRatioRef: 10,
energeticCategory: 'Solid',
notes: 'Standard APCP composite solid propellant. Al powder added for density/performance. O/F is premixed; no separate ratio.',
engines: ['Space Shuttle SRB', 'Ariane 5 P230', 'Hobby APCP motors'],
},
{
fuelId: 'sucrose',
oxidiserId: 'kno3',
isHypergolic: false,
vacuumIsp: 164,
flameTemp: 1720,
optimalOF: 0.65,
gamma: 1.30,
R: 290,
chamberPressureRef: '~7 MPa',
expansionRatioRef: 10,
energeticCategory: 'Solid',
notes: 'KNSU: low cost, low performance candy propellant. Ideal for educational motors.',
engines: ['Amateur KNSU motors'],
},
{
fuelId: 'dextrose',
oxidiserId: 'kno3',
isHypergolic: false,
vacuumIsp: 160,
flameTemp: 1700,
optimalOF: 0.63,
gamma: 1.31,
R: 288,
chamberPressureRef: '~7 MPa',
expansionRatioRef: 10,
energeticCategory: 'Solid',
notes: 'KNDX: slightly lower flame temperature than KNSU. Comparable accessibility.',
engines: ['Amateur KNDX motors'],
},
]
// ── Derived solver data ──────────────────────────────────────────────────────
// PROPELLANTS and PROPELLANT_TYPES replace propellants.js as the single source
// of truth consumed by PropellantModal / useSolver.
const substanceMap = Object.fromEntries(SUBSTANCES.map(s => [s.id, s]))
export const PROPELLANT_TYPES = [
'All',
'Cryogenic Bipropellant',
'Storable Bipropellant',
'Pressure-fed Bipropellant',
'Hybrid',
'Solid',
'Monopropellant',
]
export const PROPELLANTS = [
// Bipropellant combinations
...COMBINATIONS.map(c => {
const fuel = substanceMap[c.fuelId]
const ox = substanceMap[c.oxidiserId]
const values = { gamma: c.gamma, R: c.R, T0: c.flameTemp }
if (c.optimalOF != null) values.OF = c.optimalOF
if (fuel?.density != null) values.rhoFuel = fuel.density
if (ox?.density != null) values.rhoOx = ox.density
return {
id: `${c.oxidiserId}_${c.fuelId}`,
name: `${ox?.symbol ?? c.oxidiserId} / ${fuel?.symbol ?? c.fuelId}`,
oxidizer: ox?.name ?? c.oxidiserId,
fuel: fuel?.name ?? c.fuelId,
type: c.energeticCategory,
description: c.notes,
vacuumIsp: c.vacuumIsp,
values,
notes: `Theoretical vacuum Isp at ε = ${c.expansionRatioRef}:1, pc = ${c.chamberPressureRef}`,
}
}),
// Monopropellants
...SUBSTANCES
.filter(s => s.role === 'monopropellant')
.map(s => ({
id: s.id,
name: s.name,
oxidizer: null,
fuel: s.name,
type: 'Monopropellant',
description: s.description,
vacuumIsp: s.catalyticIsp,
values: { gamma: s.gamma, R: s.R, T0: s.T0 },
notes: 'Catalytic decomposition; vacuum Isp',
})),
]