0021. A furnace energy basis for high-temperature solid reactions from condensed-phase data, never a fluid flash¶
- Status: Proposed
- Date: 2026-10-27
Context¶
Process-library candidates (silicon carbide by the Acheson process, alumina by the Bayer process
with its calciner, acetylene through calcium carbide and lime) need the energy of a furnace in
which solids react at high temperature. The execution
routes cheme-as-code has are fluid-only: the thermo flash of cheme process phase/props has
no solid phase and DWSIM's translation has no solid compounds (methods.yml, regime
solid_equilibrium: unsupported). A fluid flash of a stream holding CaCO3 or CaO would return
a number with no physical meaning, and the flowsheet's energy balance of a reacting block needs
enthalpies on the elements that props does not give. Gas-phase reactor models (Gibbs, fixed
bed) are not furnace models either.
Options considered: (a) add solids to the flowsheet's stream and property contract, which touches every balance, the simulation translation and the property claims; (b) a separate, bounded furnace contract with its own element and energy balance on condensed-phase data; (c) only a sourced specific-energy inventory, with no calculation.
Decision¶
cheme-as-code computes the energy basis of a solid-reaction furnace as a separate contract,
furnace-energy-basis/1, from the file process/furnaces.yaml (schema cheme/furnaces/v1),
in domains/process/furnace.py, through cheme process furnace [ID] [--json]:
- One bounded reaction is qualified: limestone calcination,
calcination-caco3. Any other reaction or feed component is refused withcheme.furnace-unsupported; a new reaction is added only with its own reference case. - The furnace is a box: declared solid feed, degree of calcination (given, never predicted), product and off-gas temperatures, a fuel with air or electric power, and losses. The model reports the element balance, product and off-gas composition, reaction enthalpy and the furnace energy closure; with the heat input given it checks the residual, without it solves the heat input.
- Thermochemistry comes from an established data set through an integration, never from
equations in a skill: the NASA Glenn polynomials of gas and condensed species that Cantera
ships, read by
integrations/cantera.py(extracantera). Each result records species, phase, data note, range and the Cantera version. A temperature outside a species' data is refused (cheme.furnace-data-range), never extrapolated. - No duty of a furnace is ever taken from a fluid flash; the furnace module imports neither thermo nor the phase or props modules (tested).
method: specific-energyis a labelled conceptual fallback: a sourced specific heat use (or the lime BREF's range by kiln type) times the product flow, with an info finding saying so.- Capability:
methods.ymlgains the regimehigh_temperature_solid_reaction(phase and simulation unsupported) with an optionalelsewheremap (furnace: limited).cheme maturityadds the not-requiredbalanced.furnace-energywhen the file exists; it never supportspredictive.
Consequences¶
- Positive: a plant can state a lime kiln's or calciner's fuel or power, CO2 split and energy closure with sources and tolerances, checked against a published kiln balance, without pretending a fluid flash covers solids.
- Positive: the flowsheet, simulation and property contracts stay unchanged; existing
repositories need no edit (the file is optional, and
cheme maturitylists the requirement only when it exists). - Negative: the furnace is not a flowsheet unit. Its numbers are not propagated into
process/flowsheet.yaml; a block that represents it can name it (block:), and the user carries the heat input over as a sourced value. - Negative: the energy basis needs the
canteraextra, which has no wheels for Python 3.15 yet; without it the result ischeme.furnace-extraand only the fallback works. - Known limitations: carbothermal reduction (SiC, CaC2), dolomite, magnesite and alumina calcination are not covered; conversion, temperatures and grade are inputs. The equilibrium check uses the NASA data's standard pressure of 1 bar (TM-4513), not the 1 atm Cantera's converted files declare; no independent experimental equilibrium data are checked.
Evidence¶
src/chemeascode/domains/process/furnace.py,src/chemeascode/integrations/cantera.py,cheme process furnaceinsrc/chemeascode/interfaces/cli/process.py,src/chemeascode/domains/process/thermodynamics/methods.yml,src/chemeascode/project/maturity.py(balanced.furnace-energy).tests/test_furnace.pywithtests/data/furnaces-lime-kiln.yaml(kiln No. 1 of Sagastume Gutiérrez et al., Applied Thermal Engineering 51 (2013) 273-280);docs/framework/furnace.md.