All notable user-visible changes to this project are documented here.
- Python
cea.Reactantnow supports explicitenthalpy_unitsfor custom reactant enthalpy input (J/kg,kJ/kg,cal/kg,kcal/kg,J/mol,kJ/mol,cal/mol,kcal/mol;/moland/molespellings accepted). - Backward-compatible behavior is preserved when
Reactant.enthalpyis provided withoutenthalpy_units: the legacy default (J/kg) is still used, but this now emits aFutureWarningdirecting users to passenthalpy_unitsexplicitly. - Weight-based enthalpy units (
*/kg) now requireReactant.molecular_weightfor conversion, while molar units (*/mol) do not require molecular weight for enthalpy interpretation. - Python docs and examples were updated to pass explicit
enthalpy_unitsfor custom reactants (including RP-1311 Example 5) instead of relying on implicit defaults. - Compatibility notice: a future minor version increment will require
enthalpy_unitswheneverReactant.enthalpyis defined. Code that currently relies on implicit enthalpy units may break until updated. - Smooth-truncation derivative assembly in the equilibrium solver now uses an effective Jacobian/chain-rule formulation across TP/HP/SP/TV/UV/SV solves so reported sensitivities track the smoothed species-activity model more consistently near truncation thresholds.
- Smooth-truncation total derivatives for reported gas species and derived thermodynamic outputs were aligned with the final reported-species mapping, improving behavior for trace-species sensitivities near truncation cutoffs.
- Corrected user-facing viscosity unit labels in the equilibrium core comments and Python bindings to report millipoise consistently.
- Added Python regression coverage for
Reactantenthalpy-unit handling, including omitted-units warning behavior, explicit molar/weight units, molecular-weight requirements for weight units, and accepted unit spellings. - Added pfunit regression coverage for smooth-truncation derivative chain-rule behavior, targeted finite-difference agreement across TP/HP/SP/TV/UV/SV constraints, and reported-entropy consistency checks.
- Legacy CLI
.outfiles now echo each problem’s original input block before the corresponding equilibrium, rocket, shock, or detonation output section. - Frozen rocket failure handling was aligned with the established partial-output behavior: successful upstream stations are retained, output truncates at the last valid station, and the existing warning text is emitted after the partial report.
- Frozen rocket stop checks now use the active thermo-fit interval for condensed species plus the existing lower-temperature frozen-fit guard, and frozen retained points now populate transport properties before output.
- Non-converging frozen rocket cases no longer produce empty output, overrun into invalid exit columns, or crash while writing partial results.
- Difficult frozen rocket chamber solves can now retain a usable reduced-component state after repeated singular matrices, restoring partial output for reproduced failure cases.
- Python
Mixtureinput validation now acceptsstrandcea.Reactantentries (including mixed lists) and no longer accepts rawbytesspecies names (#53). - Added SI-focused custom-reactant handling at the Python API layer:
Reactant.temperatureis specified in K andReactant.enthalpyin J/kg (converted internally for core input) (#53). - Legacy input parsing now supports repeated
outpdataset keywords (including multiline forms) by merging successiveoutpentries during dataset assembly (#52). - FAC rocket chamber-closure iteration logic in
RocketSolver_solve_facwas updated toward CEA2 parity: Option-1 pressure correction direction now follows legacy semantics, the Option-1 convergence check is normalized to assigned injector pressure, the fixed 4-pass outer loop was replaced with tolerance-driven iteration plus a bounded safety guard, and FAC combustor-end reseeding now refreshes from the current infinity state each chamber iteration (#54). - Legacy SHCK branch sequencing and output selection were reworked toward CEA2 parity: explicit incident requests now report only the requested incident branch (with reflected state attached when requested), while reflected-only requests continue exploring the mixed equilibrium/frozen permutations.
- Shock reports now include incident/reflected transport tables (
Visc,Cp,Conductivity,Prandtl Number) whenoutp tranis enabled and transport data are available. - Python test/main-interface helper workflows no longer require
pandas; CSV result output is now written with the standard library and the installation guidance/environment were updated accordingly.
- Legacy CLI equilibrium/rocket/shock workflows now propagate
include_ionsinto generated product mixtures so ionized products are retained when requested (#52). - Reflected-shock velocity outputs were corrected for reflected equilibrium/frozen workflows: the legacy CEA2
u5/u5+v2relations effectively usedrho5/rho2where the reflected-shock mass balance requiresrho5/rho2 - 1, so the old equations underpredicted reflected velocities and did not satisfy the reflected conservation equations. CEA now reports conservation-consistentu5,u5+v2, sonic speed, reflected ratios, and reflected-frozen header thermodynamic values. - Shock failure handling now stops at the last valid state instead of emitting partially invalid reflected results; failed downstream shock states are explicitly zeroed for consistent output.
- Shock transport-property calculations now preserve and restore stable transport seeds across singular-recovery paths, fixing incorrect or missing transport values in difficult reflected-shock cases.
- Added C and Python support for custom reactant data (including species not present in
thermo.lib) in parity with the main interface workflow used by RP-1311 Example 5 (#53). - Added new C-API constructors for generating product mixtures from input-reactant payloads:
cea_mixture_create_products_from_input_reactantsandcea_mixture_create_products_from_input_reactants_w_ions(#53). - Added a shared bindc parser path for
cea_reactant_input -> ReactantInputconversion to reduce duplicated C-binding logic (#53). - Added Python
cea.Reactantand mixed-inputMixture(...)support in the Cython binding (#53). - Added shock regression coverage for transport output population across equilibrium/frozen branches and for singular-recovery reflected-shock cases.
- Added a Python
pytestreflected-shock conservation check that verifies incident/reflected mass, momentum, and energy balances and confirms the correctedu5+v2relation.
- Added equilibrium total-derivative capabilities across core solver paths (TP/HP/TV/UV/SP/SV), including chain-rule state/property derivatives and related thermo/property plumbing updates (
#50). - Exposed derivative workflows in the C and Python interfaces, including derivative object lifecycle, analytic-vs-finite-difference result accessors, and central finite-difference verification options (
#50). - Introduced optional smooth species truncation controls (with configurable width) through solver options in Fortran/C/Python interfaces to improve derivative behavior near composition cutoffs (
#50). - C binding headers and the RP-1311 C sample were updated to resolve compiler warnings (
#49).
- Added extensive regression coverage for derivative correctness and stability, including new pfunit derivative suites and Python tests for smooth-truncation behavior and sample execution (
#50). - Added derivative-focused Python examples and documentation (including SP and multi-state derivative sample scripts and run helpers) (
#50).
- Command-line input parsing now accepts explicit
.inpfilenames (#44). - Python RP-1311 sample scripts were moved into
source/bind/python/cea/samples/rp1311/for clearer organization (#47). - Expanded
reacinput compatibility with CEA2-style forms, including case-insensitive keywords, exploded formulas with implicit coefficients,dendensity aliases, molecular-weight aliases, and stricter mixed mole/weight basis validation (#48). - User-specified reactant enthalpy input is now applied as a runtime override for reactant thermo initialization (including database species) (
#48).
- Fixed a crashing output case and restored missing output values (
#45). - Reusing
EqSolutionacross solve calls now resets transient iteration state and recovers from prior non-converged attempts using the last stable warm-start seed, preventing reuse-related non-convergence regressions (#47).
- Added missing Python test dependencies to improve out-of-the-box test runs (
#41). - Added Fortran and Python regression tests covering
EqSolutionreuse and detonation/equilibrium convergence behavior (#47). - Added
reacparser regression tests for custom species inputs, molecular-weight aliases, density aliases/default units, case-insensitive tokens, and implicit formula coefficients (#48).
- Hardened PyPI publishing CI with OIDC preflight checks and manual
workflow_dispatchtarget selection (testpypi/pypi); installation docs now lead withpython -m pip install ceaand mention GitHub Releases binary assets. (#39,#40).
- Initial Microsoft Visual C++ (MSVC) support in the C bindings/build pipeline (
#29).
RocketSolver_solvenow treatspi_pas optional for better API compatibility and easier caller usage (#36).
- Corrected detonation-wave upstream enthalpy calculations and upstream molecular weight handling in the legacy interface (
#33). - Resolved failing transport-property test cases to restore expected regression behavior (
#37).
- Python bindings and examples/tests for the CEA interface (
Feat/icx python binding, #23). rp1311_examples.inpand updated C sample output includingM (1/n)(#24).- Windows 11 Intel oneAPI walkthrough documentation.
- GitHub issue and pull request templates for contribution workflow.
- A local
findlocimplementation inextern/fbasicsfor legacy compiler support.
- Core equilibrium/rocket/shock solver iteration logic and convergence rules were refined, including area-ratio loops, throat updates, and frozen-flow gating/criteria.
- Condensed-species handling was tightened across initialization and iteration paths (ordering, active-element indexing, phase checks, and first-iteration thermo evaluation).
- Build and CI configuration was expanded and hardened (compiler flags/presets, broader build/test coverage, and workflow updates).
- Precompiled thermo/transport database blobs were removed from the repository/package test assets in favor of build-time generation.
- Documentation, contribution guidance, and sample scripts were updated for current workflows.
- Singular-matrix recovery paths in equilibrium condensed-species solves (including element-row singularities and related index handling).
- Multiple convergence and initialization edge cases in shock/frozen/throat calculations (including denominator guards and corrected initial values).
- Several compiler-compatibility issues (including Intel ifx workarounds and initialization safety fixes in mixture/transport paths).
- Intermittent CTest instability from an extraneous C format specifier.
- Sample/README correctness issues (including reversed example arguments and text typos).
- Initial public release.