Skip to content
Edit on GitHub

Chemistry sources

Every catalogue value and validation fixture used by VoxelSandbox.Chemistry is recorded here before it becomes product content. This document records the initial C0 thermodynamic validation fixture; it is not a licence to fill a production catalogue with unsourced values.

Water vapour — Shomate validation fixture

Section titled “Water vapour — Shomate validation fixture”
  • Species: H₂O(g), CAS 7732-18-5.
  • Source: NIST Chemistry WebBook, Standard Reference Database 69, Water, gas-phase Shomate table, citing M. W. Chase Jr., NIST-JANAF Thermochemical Tables, 4th edition (1998).
  • URL: https://webbook.nist.gov/cgi/cbook.cgi?ID=C7732185&Mask=3&Table=on&Type=JANAFG
  • Coefficient validity range: 500–1700 K.
  • Coefficients: A=30.09200, B=6.832514, C=6.793435, D=-2.534480, E=0.082139, F=-250.8810, G=223.3967, H=-241.8264.
  • Validation rows: at 500 K, Cp = 35.22 J/(mol·K), S° = 206.5 J/(mol·K), H°−H°298.15 = 6.92 kJ/mol; at 1000 K, 41.27 J/(mol·K), 232.7 J/(mol·K), and 26.00 kJ/mol respectively.

The values above exist only in the EditMode thermodynamic evaluator test. The eventual substance catalogue must independently record its exact phase, composition, uncertainty, and source revision.

ThermodynamicMath uses these constants for K = exp(-ΔG/RT), the Nernst equation, and the ΔG° = -nFE° bridge. Energy values supplied in kJ/mol are converted to joules only at the equation boundary; the conversion is explicit in the API names and implementation.

C3.3 atmospheric transport — reduced multizone control volumes

Section titled “C3.3 atmospheric transport — reduced multizone control volumes”

AtmosphericTransportMath uses the same deliberately reduced contract as a multizone model: a domain is a well-mixed control volume; material crosses only named connections or a named outdoor exchange; matter is never deleted. Inter-domain mixing advances each species from its concentration gradient. Ventilation uses the first-order well-mixed fraction 1 − exp(−λt), where λ is an authored air-change rate in s⁻¹. Wind transport uses an authored effective opening area and the existing WindField velocity to form Q = v·A·alignment.

The buoyancy slice uses the NIST orifice correlation Q = C_d A sqrt(2ΔP/ρ) with hydrostatic ΔP = Δρ·g·h. It only resolves the unstable case of denser air above lighter air; stable layering, two-way large-opening flow, wind pressure coefficients, weather coupling, inversions, deposition, plume shape, and chemistry are explicitly out of scope. C_d, control-volume size, temperature, carrier molar mass, gravity, and openings are supplied by the owning world/geometry system — no unreferenced global gameplay values are embedded in this transport model.

C3.6 Stone Vent construction specification

Section titled “C3.6 Stone Vent construction specification”

Stone Vent is a player-built, solid voxel form with an explicit 0.025 m³/s flow only when its far side reaches exterior air within the bounded scan envelope. This is an MVP content specification, not a measurement or claim about a real manufactured vent. The enclosure scan measures the actual bounded room volume and converts the verified flow to λ = Q/V in s⁻¹; AtmosphericTransportMath then applies the cited well-mixed NIST multizone decay and transfers every tracked mole to the regional ledger. An indoor-only vent form and a block with no non-zero, cited flow both remain sealed. This deliberately does not claim pressure-network or wind fidelity; those require the C3.6 opening/ignition work still outstanding.

For scanner-authored C3 control-volume geometry, AtmosphericEnvironmentProfile supplies the world’s explicit physical cell volume and ambient temperature rather than allowing per-component defaults. The MVP profile sets one Unity-unit voxel to 1 m³ (MASTERPLAN’s one Unity unit per block) and uses the standard-atmosphere tropospheric reference T = 288.15 − 0.0065H K for elevations below 11 km. Source: NASA, Atmospheric Environment, NASA TM-86785, Eq. 15. https://ntrs.nasa.gov/api/citations/19840005126/downloads/19840005126.pdf

C3.4 carbon monoxide — carboxyhaemoglobin uptake and clearance

Section titled “C3.4 carbon monoxide — carboxyhaemoglobin uptake and clearance”

The MVP’s CarbonMonoxideExposureMath integrates the nonlinear CFK form in one-minute fixed steps, with the ATSDR/AEGL reference profile: a 70 kg resting, non-smoking adult; blood volume 5,500 mL; endogenous CO production 0.007 mL/min; Haldane coefficient 218; lung CO diffusing capacity 30 mL/(min·Torr); humidified pressure 713 Torr; alveolar ventilation 13,200 mL/min; maximum O₂ binding 0.2 mL/mL blood; capillary O₂ partial pressure 100 Torr; and initial COHb 0.75%. The AEGL appendix’s 60-minute 83 ppm derivation targets 4% COHb; the automated fixture allows a ±0.3 percentage-point numerical-model tolerance.

This is a well-mixed single-compartment model. ATSDR describes it as appropriate at low/near- equilibrium COHb and notes limitations during rapidly changing exposure and arterial/venous uptake. The model is consequently the authoritative COHb state for the MVP reference profile only. It does not claim to model children, pregnancy, smoking, disease, exercise, supplemental oxygen, chronic injury, or all oxygen-displacement hazards. BloodOxygen is presently the explicit carrying-capacity proxy 0.97·(1−COHb); broader oxygenation, temperature injury and other toxicants remain separate sourced C3 work.

The C3.3→C3.4 adapter uses the already declared ideal-gas partial pressure pᵢ = nᵢRT/V, then reports dry ppmv as pᵢ/p_ref × 10⁶. It takes a domain’s stored volume and temperature plus an explicit reference pressure; it never derives concentration from moles alone or creates an untracked background-gas ledger.

The C0 model uses a = pᵢ/p° for ideal gases, a = bᵢ/b° for aqueous solutes, a = xᵢ for ideal solutions, and a = 1 for pure solids and liquids. Aqueous activity coefficients are deliberately fixed at one until C9 (the planned Debye–Hückel extension); the reaction quotient accepts resolved, dimensionless activities so that this future change does not alter reaction evaluation.

Hydrogen combustion — reaction aggregation fixture

Section titled “Hydrogen combustion — reaction aggregation fixture”

ReactionThermodynamics combines each term as Σνᵢ(ΔfH°298.15 + (H°(T)-H°298.15)) and ΣνᵢS°(T), then derives ΔrG° = ΔrH° − TΔrS° and K = exp(-ΔrG°/RT). Terms must already be catalogue-sorted and use whole-number balanced stoichiometry, which preserves a deterministic addition order without per-tick reduction or allocation.

The C0 rate identity is r = k · activityOrderProduct · specificSurfaceArea · (1 − Q/K), using k(T) = A exp(-Ea/RT). It is deliberately written with the signed (1 − Q/K) term: rates vanish at equilibrium and naturally change direction for Q > K. Catalysts may change the authored kinetic parameters A and Ea, but never K, Q, ΔrG°, or the reaction affinity. All calculations remain in physical process units; the global 60× game-time multiplier is applied only by the later simulation clock.

specificSurfaceArea is 1 (dimensionless) for a homogeneous reaction. For a heterogeneous solid–gas or solid–liquid reaction SpecificSurfaceAreaMath derives it from the reacting solid’s grain size d and molar volume Vₘ = (M/1000)/ρ as Aₘ = 6·Vₘ/d (m²/mol), the surface-area-to- volume ratio of a uniform sphere. This is geometry, not a measured constant; real shrinking-core and intra-particle pore-diffusion limitation is explicitly out of C0 scope (§28.9). The grain size is carried per solid component on the VesselCharge and is what a crusher (§32) reduces.

The phase-transition test fixture uses the conventional normal-boiling-point reference 373.15 K and ΔvapH = 40.65 kJ/mol for water. It exists to validate energy conservation and boundary handling, not as a production substance catalogue entry. PhaseTransitionMath holds temperature at a declared boundary while available tick energy is spent on latent heat, returns any residual heat exactly, and uses the same operation in reverse for freezing or condensation. The vessel solver will apply that residual to ΔT = q / ΣnCp only after phase resolution.

  • Source: CRC Handbook of Chemistry and Physics, 97th edition (2016–2017), “Electrochemical Series” (P. Vanýsek), standard reduction potentials versus the standard hydrogen electrode at 298.15 K, aqueous, unit activity. Cross-checked against the NIST-sourced values reproduced in A. J. Bard, R. Parsons, J. Jordan, Standard Potentials in Aqueous Solution (IUPAC, 1985).
  • The standard hydrogen electrode 2 H⁺ + 2 e⁻ → H₂ is 0.000 V by definition.

ElectrochemicalSeries holds the stage-1 couples whose elements are already in PeriodicTable (§36.2): E°(V) — K⁺/K −2.931, Ca²⁺/Ca −2.868, Na⁺/Na −2.710, Mg²⁺/Mg −2.372, Al³⁺/Al −1.662, Fe²⁺/Fe −0.447, Sn²⁺/Sn −0.138, 2 H⁺/H₂ 0.000, Sn⁴⁺/Sn²⁺ +0.151, Cu²⁺/Cu +0.342, Cu⁺/Cu +0.521, Fe³⁺/Fe²⁺ +0.771, O₂+4 H⁺/2 H₂O +1.229. No value is chosen for balance (§28.9); the table is append-only and id-stable (§28.8).

GalvanicCellMath composes two of these half-reactions into a full reaction: E°cell = E°cathode − E°anode, the overall electron count is lcm(nₐ, n_c), and ΔG° = −nFE°cell is derived, never authored alongside the potential (§28.6 — “Gibbs free energy and cell potential are the same quantity in different units”). The C0 round-trip test asserts E°cell is recovered from that ΔG° for every ordered couple pair in the catalogue. Concentration dependence is the Nernst form already in ThermodynamicMath, E = E°cell − (RT/nF)·ln Q, sharing §28.4’s reaction quotient.

  • Activation overpotential: Butler–Volmer high-field (Tafel) limit, η = (RT / (α·n·F))·ln(j/j₀), α the charge-transfer coefficient in (0, 1]. IUPAC Gold Book, Tafel equation https://goldbook.iupac.org/terms/view/T06174 and Butler–Volmer equation https://goldbook.iupac.org/terms/view/BT07020. Only evaluated for j ≥ j₀; IR drop and concentration overpotential are out of C0 scope (§28.9).
  • The electrolysis driving voltage is −E°cell + η_anode + η_cathode for a non-spontaneous cell (E°cell < 0), i.e. the reversible decomposition potential plus both electrode overpotentials.
  • Faraday’s laws: n = I·t / (z·F), m = n·M. IUPAC Gold Book, Faraday constant https://goldbook.iupac.org/terms/view/F02325. Amperes and seconds convert directly into moles; the electrolysis line’s throughput is F, not a tuned number (§28.6 consequence 3).

VesselSolver.TryAdvanceTick is the §28.7 per-vessel integrator. It advances one fixed ProcessTimeScale.ProcessSecondsPerSimulationTick (three process seconds at the 20 Hz / 60× clock), split into a power-of-two number of equal deterministic sub-steps chosen once from the tick-start state (§28.7 stiff-system rule). The stiffness estimate is the worst over all reactions of the fractional limiting-reagent change and the fractional temperature swing the reaction would cause, plus the swing from any applied electrical/heating work. Per sub-step, in a canonical ordering of the physical reaction definition (with ReactionId only as a tie-breaker): evaluate the reaction (ReactionEvaluator), clamp its extent against the limiting reagent (ReactionExtentMath) and against available sensible heat, apply Δn = ν·ξ, and accumulate q = −Σ(ξ·ΔrH). Before any residual energy changes temperature, the solver heats/cools to the next reachable supplied phase boundary and spends energy there on latent heat; only then does it apply ΔT = q_remaining / ΣnCp(T) with ΣnCp recomputed after any phase transfer.

Conservation (§28.7 step 9) is checked two ways. Reaction construction proves both atom balance and formal-charge balance exactly: Σν·atoms = 0 for every element and Σν·z = 0 in integer elementary-charge units, so ionic/electrochemical content cannot enter the solver with a hidden charge source or sink. The vessel tick then checks total mass — Σ(nᵢ·Mᵢ) before vs after. An atom-balanced reaction conserves mass exactly because each molar mass is Σ(atomic weights) over the same element table, so Σν·M = Σ(weight · Σν·atoms) = 0; the tolerance is correspondingly tight (1e-6 g + 1e-9·massBefore). A drift beyond it fails the tick and the caller quarantines the vessel rather than simulating a leak. The C0 acceptance test advances 10,000 reproducible randomized, atom- and charge-balanced vessel scenarios twice and requires bit-identical final charges, state and mass drift.

Recorded per §28.9’s rule that the project writes its approximations down:

  • Sensible-heat throttle. Within a sub-step a single reaction may not swing T by more than 10 % of the current temperature; past that its extent is capped to the vessel’s available sensible heat. This stands in for the thermal-feedback and shrinking-core self-limiting of a real strongly endothermic (or explosively exothermic) charge, which the fixed-sub-step-count rule cannot otherwise resolve. The reverse reaction then carries T back toward the adiabatic equilibrium on the following sub-steps.
  • Temperature floor. T is held at 1 K if the arithmetic of an extreme endotherm would carry it lower mid-tick. A real vessel cannot be cooled below absolute zero by a reaction; the floor plus the recombination exotherm keep the tick physical.
  • Pure-phase boundaries. C0 accepts authored solid↔liquid and liquid↔gas boundaries at their declared reference pressure. It holds a vessel at the boundary while consuming/releasing latent heat, then carries any residual energy into the new phase. Pressure-dependent phase diagrams and aqueous/solution transitions remain later content, not silently approximated here.
  • No spontaneous reverse from a reactant-free state. A reaction whose rate points backward only because its reactants are absent (so the reaction quotient is dominated by the products) is held at zero rate. The equilibrium amount of reactant such a state would regenerate is negligible, and the forward reaction resumes correctly the moment reactant is re-added.
  • Environment heat transfer and venting/rupture are not in C0. Pressure Σn_gas·R·T/V is reported; conduction, radiation and pressure relief arrive with C1/C3.

Substance catalogue — Assets/_Game/Data/Chemistry/Substances/

Section titled “Substance catalogue — Assets/_Game/Data/Chemistry/Substances/”

Unlike the fixtures above, these are the first entries in an actual authored SubstanceCatalog (§36.1’s VoxelSandbox.Data authoring layer, baked into the Chemistry core’s SubstanceTable). Each SubstanceDefinition asset also carries its own sourceCitation field inline — this section exists so the catalogue’s provenance can be read and cross-checked in one place. H is reproduced exactly as NIST-JANAF publishes it and used verbatim as the substance’s authored standardEnthalpyOfFormationKilojoulesPerMol — ReactionThermodynamics computes ΔfH°(T) = authored ΔfH° + ShomateEnthalpyChange(T), and ShomateEnthalpyChange(298.15 K) is zero only when the authored value matches the table’s own H exactly, so the two must never be sourced independently.

  • Source for every entry below except Graphite (see its own note just after the table): NIST-JANAF Thermochemical Tables, 4th ed. (Chase, 1998), via the NIST Chemistry WebBook (webbook.nist.gov).
Substance Formula/Phase CAS ΔfH°(298.15) kJ/mol S°(298.15) J/(mol·K) Shomate range WebBook page
Oxygen O2(g) 7782-44-7 0 (reference state) 205.152 100-700 K cbook.cgi?ID=C7782447
Carbon dioxide CO2(g) 124-38-9 -393.5224 213.785 298-1200 K cbook.cgi?ID=C124389
Carbon monoxide CO(g) 630-08-0 -110.5271 197.660 298-1300 K cbook.cgi?ID=C630080
Water H2O(l) 7732-18-5 -285.8304 69.95 298-500 K cbook.cgi?ID=C7732185 (liquid-phase table)
Quicklime CaO(s) 1305-78-8 -635.0894 38.19 298-3200 K cbook.cgi?ID=C1305788 (solid-phase table)
Slaked lime Ca(OH)2(s) 1305-62-0 -986.0851 83.36 298-1000 K cbook.cgi?ID=C1305620 (solid-phase table)
Graphite C(s), reference state 7782-42-5 0 (reference state) 5.740 298.15-2000 K janaf.nist.gov/tables/C-002.html
Wustite FeO(s) 1345-25-1 -272.04 60.75 298-1650 K cbook.cgi?ID=C1345251 (solid-phase table)

Graphite is different from the other six: JANAF publishes graphite as a row-by-row T, Cp, S, H-H298 table (janaf.nist.gov/tables/C-002.html), not pre-fit Shomate coefficients — JANAF does not fit graphite to the Shomate form at all, and NIST WebBook’s condensed-phase page for carbon shows only isolated Cp/S measurements, no table. The Shomate coefficients on GraphiteSolid.asset are this session’s own unweighted least-squares fit of the Shomate Cp(t) = A + Bt + Ct² + Dt³ + E/t² polynomial to JANAF’s published Cp(T) rows from 298.15-2000 K (max relative Cp error 1.6%; the fitted H(T)-H(298) and S(T) curves that follow from A-E track JANAF’s own published columns to within 0.1% across the whole range — checked, not assumed). This is a real fit to a primary source, not an invented number, but it is this session’s derived fit, not a republished literature Shomate table like the other six entries — flag it as such if a later pass finds a published graphite Shomate fit to replace it with.

Densities are standard reference values from the CRC Handbook of Chemistry and Physics (gases at 0 °C/1 atm, water at 25 °C, minerals at their normal density) — informational for now; no current solver path reads DensityKilogramsPerCubicMeter.

Cross-checks against MASTERPLAN §36.3’s stated reaction enthalpies

Section titled “Cross-checks against MASTERPLAN §36.3’s stated reaction enthalpies”

These substances let several of §36.3’s headline numbers be recomputed independently from the sourced data above, as a sanity check on both the masterplan text and the sourcing here:

  • Calcination CaCO3 -> CaO + CO2: needs calcite’s own ΔfH°, which NIST WebBook does not publish a Shomate fit for (see Known gaps below). Using the widely-cited calcite value ΔfH°(CaCO3, s) = -1206.9 kJ/mol (Robie & Hemingway, 1995, USGS Bulletin 2131): ΔrH° = (-635.0894 + -393.5224) - (-1206.9) = +178.3 kJ/mol, matching §36.3’s stated “ΔH°298 ≈ +178.3” exactly.
  • Slaking CaO + H2O(l) -> Ca(OH)2: ΔrH° = -986.0851 - (-635.0894 + -285.8304) = -65.2 kJ/mol, close to §36.3’s stated “ΔH = -63.7” (the ~1.5 kJ/mol gap is ordinary literature-to-literature spread between compilations, not a sourcing error here).
  • Boudouard C + CO2 <-> 2 CO: ΔrH° = 2(-110.5271) - 0 - (-393.5224) = +172.5 kJ/mol, matching §36.3’s stated “ΔH = +172.5” — the “keystone” reaction — essentially exactly, now that graphite is sourced. (Combustion’s ΔrH° is not an independent check: CO2’s own ΔfH° is defined relative to graphite + O2, so recomputing C + O2 -> CO2 from these three entries only recovers CO2’s own tabulated ΔfH° by construction, not a second independent measurement.)

ReactionDefinition requires a real, citable Arrhenius pre-exponential factor and activation energy (§28.5: “A and Ea are never invented merely to hit a desired play time”) in addition to sourced thermodynamics. A heterogeneous definition also requires an explicit kinetics material record: the tested feedstock/form and relevant preparation (for example, wood species, pyrolysis temperature and particle-size fraction for a char). That record is separate from a formula because the same C(s) formula does not make a graphite experiment applicable to an arbitrary charcoal. Thermodynamics are now sourced for every substance in §36.3’s Boudouard/combustion/calcination/slaking cluster, but kinetics remain the blocker for all four:

  • Combustion (C + O2 -> CO2, 2C + O2 -> 2CO) and Boudouard (C + CO2 <-> 2CO) are heterogeneous solid-gas reactions whose real literature rate constants are char/coal-source-specific, not a single graphite constant: a Boudouard literature search this session turned up activation energies from 143 to 255 kJ/mol depending on the specific coal char and CO/CO2 ratio, with no single citable “the graphite rate.” Authoring one of those char-specific values as “the” graphite reaction would misattribute a different material’s measured kinetics.
  • CO oxidation (2 CO + O2 -> 2 CO2) has a well-known primary-source global rate expression — Dryer, F.L. & Glassman, I., High Temperature Oxidation of CO and CH4, 14th Symposium (International) on Combustion, 1973, pp. 987-1003: -d[CO]/dt = 10^14.6±0.25 · exp[-40000/(RT)] · [CO]^1.0 · [H2O]^0.5 · [O2]^0.25. Obstacle 1 (units) is now resolved. The activation energy is confirmed as 40,000 ± 1,200 cal/mol (≈167.4 ± 5.0 kJ/mol, at 4.184 J/cal), independently of the abstract-only inference this entry previously relied on — sourced via the EPA HERO reference database’s record of the paper’s abstract, https://hero.epa.gov/reference/6289932/, which reproduces the rate expression with its units stated explicitly rather than left to the era-convention inference this entry previously had to make. Obstacle 2 (functional form) is now more precisely characterised, not resolved — and it is larger than “do the unit conversion.” The literature orders sum to 1.75 (1.0 + 0.5 + 0.25), so converting each concentration [X] = a_X·p°/(RT) into this codebase’s activities leaves a (p°/(RT))^1.75 factor that is a genuine T⁻¹·⁷⁵ power-law term on top of the Arrhenius exponential, plus the literature’s intrinsic per-unit-volume rate needs multiplying by an actual reactor volume to become this codebase’s extensive moles-per-second r. ReactionKineticsMath’s Arrhenius form (k = A·exp(-Ea/RT), checked directly in Assets/_Game/Scripts/Chemistry/ReactionEvaluator.cs) has no Tⁿ prefactor slot, and ReactionEvaluator.TryEvaluate never multiplies the final rate by volumeCubicMeters (volume only enters earlier, per species, computing each gas activity) — so there is no single vessel-independent constant A_mine that reproduces the literature rate exactly for every vessel size and temperature. Folding a reference volume and reference temperature into one constant to make it fit would itself be inventing a convention nowhere in the source, the same failure mode as inventing A/Ea outright. Closing this needs an actual decision on whether ReactionKineticsMath/ReactionEvaluator should gain a modified-Arrhenius Tⁿ term and an explicit volume multiplier for intrinsic (per-volume) literature rate laws — a Chemistry-core contract change, not a data lookup — before CO oxidation (or any other order-sum-≠-1, concentration-based literature rate) can become a faithful ReactionDefinition. It also needs H2O present as a catalyst the current ReactionSpecies/ReactionTermAuthoring schema cannot express as a non-stoichiometric third body (every term needs a non-zero coefficient) — though for this specific reaction, using the moist-air rate law as authored is arguably the more honest choice for a game where furnace/wood combustion realistically always has trace moisture present, rather than a limitation to route around.
  • Slaking (CaO + H2O(l) -> Ca(OH)2) is diffusion/dissolution-controlled in the real literature (surface Ca²⁺/OH⁻ diffusion under moderate agitation, Ca(OH)2 surface dissolution under vigorous agitation), not a simple Arrhenius mass-action step. A defensible rate law needs a heterogeneous dissolution model this session did not have time to source to the project’s standard, rather than an Arrhenius A/Ea pair that would misrepresent the real mechanism.
  • Calcination (CaCO3 -> CaO + CO2) still needs calcite’s own Shomate fit before it can be authored at all — see Known gaps.

All four are left for whoever picks up reaction-content authoring next, with as much substance-side thermodynamics done for them as this session could source. The ReactionDefinition/ReactionCatalog authoring path itself is complete and covered by Assets/_Game/Tests/EditMode/Data/ReactionCatalogTests.cs using fixture data, so adding a real reaction once its kinetics are sourced is just authoring one more asset.

FuelAirFlammabilityMath is intentionally a read-only, source-scoped eligibility layer, not a combustion, explosion or damage model. Its first authored reference profile is hydrogen in air: NASA’s Safety Standard for Hydrogen and Hydrogen Systems reports a 4.0–75.0 vol% hydrogen-in-air flammability interval at 14.7 psia / ambient temperature (the report notes that pressure and propagation conditions affect the interval).

  • Source: NASA, Safety Standard for Hydrogen and Hydrogen Systems (NASA-STD-8719.16B, 2008), section 2.11 / appendix A discussion of hydrogen-air limits, https://www1.grc.nasa.gov/wp-content/uploads/chapter_06.pdf; accessed 2026-09-10.
  • FuelAirFlammabilityProfile.CreateHydrogenInAir records those fractions as 0.04 and 0.75 and carries source id NASA-H2-AIR-FLAMMABILITY-4-75-2008. It does not claim that the reference interval applies outside its stated conditions.
  • TryEvaluatePartsPerMillion only converts a previously measured/modelled dry-air ppmv value to a fraction and classifies it as lean, within the published interval, or rich. The interval endpoints are inclusive. It rejects impossible (>100% v/v) and malformed inputs.
  • An IsIgnitionCandidate result additionally needs an explicit supplied ignition source, but still means only “candidate under the profile’s air assumption.” It does not assert oxygen composition, ignition energy, flame propagation, combustion, confinement or overpressure; it moves no gas and creates no heat. Those require C3’s atmospheric reaction-domain contract and a full mass/energy-conserving reaction before any player-facing ignition effect is permitted.

Calcite (CaCO3, s) has no NIST/JANAF Shomate fit and no row-by-row Cp(T) table this session could locate from a primary, independently-verifiable source (NIST WebBook’s page for its CAS number has no thermochemistry table at all; JANAF’s own tables have no calcium carbonate entry — calcium carbonate is a mineral, not one of JANAF’s combustion-chemistry species). A search summary surfaced a plausible-looking Maier-Kelley-style fit (Cp = -184.79 + 0.32322T - 3688200T⁻² - 1.2974e-4·T² + 3883.5T⁻¹ᐟ², attributed loosely to a 1981 Physics and Chemistry of Minerals paper on natural calcite) but this session could not reach the primary paper to verify the exact coefficients, units, or valid range, so it is not used here — reproducing an unverified number would be worse than leaving the gap documented. A future pass should get the Robie & Hemingway (1995, USGS Bulletin 2131) or that 1981 paper’s actual table (both are geology references, likely behind a paywall or requiring a library scan rather than open web search) and fit it the same way GraphiteSolid.asset was fit above. Calcination is the only §36.3 T0-T2 reaction this blocks; combustion and Boudouard are unblocked on the thermodynamics side (see the substance table above) and wait only on kinetics.

Wollastonite (CaSiO3, s) — C2.5’s slag former — has the same shape of gap. NIST WebBook’s page for its CAS number (13983-17-0) carries only molecular weight and an IR spectrum link, no thermochemistry table; it is a mineral, not a JANAF combustion species. Point values are genuinely sourced: ΔfH°(298.15 K) = -1634.5 ± 1.8 kJ/mol and S°(298.15 K) = 81.358 J/(mol·K) (Robie & Hemingway, reexamining the calcite + quartz = wollastonite equilibrium; consistent with the widely cited Robie, Hemingway & Fisher 1978, USGS Bulletin 1452 compilation). No full Cp(T) table or published Shomate/Maier-Kelley polynomial was reachable this session: the low-temperature heat-capacity source (Krupka, Robie, Hemingway, Kerrick & Ito, 1985, American Mineralogist 70) is behind a broken/ unreachable host, the Holland & Powell (2011) internally-consistent dataset publishes Cp in its own k0 + k1·T⁻⁰·⁵ + k2·T⁻² + k3·T⁻³ form (not directly a Shomate polynomial, and this session could not reach a copy of the dataset table itself), and every other lead (Journal of Phase Equilibria and Diffusion’s CaO-SiO2 Cp review, the European Journal of Mineralogy wollastonite/pseudowollastonite paper) was paywalled past its abstract. Do not fit a Shomate polynomial from the point values above — a single (ΔfH°, S°) pair constrains none of a Shomate curve’s five Cp(T) coefficients; that would be invented precision presented as sourced data, the exact failure mode §36.3 forbids. C2.5’s slag reaction is blocked on this Cp(T) gap for wollastonite specifically, not on FeO (now sourced above) and not on code structure.

Fayalite (Fe2SiO4, s) — the actual product of C2.5’s FeO-bearing case (2 FeO + SiO2 -> Fe2SiO4) — has the identical gap, one level further downstream than it first looks: FeO itself is now sourced (above), but the slag phase it forms is not. NIST WebBook’s page for CAS 1317-71-1 shows only an IR-spectrum link, no thermochemistry table, the same “mineral, not a JANAF species” pattern as wollastonite. Point values were reachable this time: ΔfH°(298.15 K) = -1478.17 kJ/mol, S°(298.15 K) = 151.0 J/(mol·K), and a single Cp(298.15 K) = 131.9 J/(mol·K) (Robie & Hemingway, 1982, American Mineralogist 67, “Heat capacity and entropy of fayalite between 5.1 and 383 K”). The primary paper itself (minsocam.org/ammin/AM67/AM67_463.pdf) was unreachable from this session (connection refused — the Mineralogical Society of America’s own PDF archive host, also unreachable for a different paper earlier this session; this looks like a host-level block from this environment, not a broken individual link) and its calorimetric range (5.1-383 K) would not have covered smelting temperatures even if reached. One Cp point is not a Cp(T) table: it fixes none of a Shomate curve’s temperature-dependence coefficients any more than wollastonite’s (ΔfH°, S°) pair did — do not fit one from this either. Net effect: both of C2.5’s candidate slag products (CaSiO3, Fe2SiO4) are blocked on the same class of Cp(T) gap — sourcing either one first is enough to author one real slag reaction and close C2.5’s Done when, which asks for a gangue-bearing reduction that closes its atom balance with a distinct condensed slag phase, not both cases simultaneously.

User-contributed notes

Corrections, clarifications, and practical tips for this page. Anonymous is fine — a name is optional. Basic Markdown works: **bold**, *italic*, `code`, and links.

Notes policy

Notes are lightly filtered for spam and may be edited or removed. Keep them about this page — no support requests, no personal data, nothing you would not publish. Links are limited and marked nofollow.

  1. Loading notes…