The Cantera development team is pleased to announce the availability of Cantera 3.0.0. There have been over 1400 commits to Cantera since the last version, 2.6.0, which was released in May 2022. We have closed or merged 192 pull requests and closed 111 issues. Instructions for installing Cantera 3.0 are available on the Cantera website.
Highlights
- Major performance enhancements for reactor network calculations with large kinetic mechanisms. This comes from a new formulation for the reactor governing equations using species moles (rather than mass fractions) used together with a sparse, iterative solver in the ODE integrator that makes use of a semi-analytical Jacobian. (
preconditioned_integration.py
, #1010, #1344, #1363, #1377, #1411) - Introduce
ExtensibleRate
Python class that can be used to implement new reaction rate parameterizations in Python, with parameters defined in YAML input files. These rate types can be used even when the main user application is not written in Python. (classExtensibleRate
,custom_reactions.py
, #1382, #1417, #1456, #1478, #1494, #1499) - Introduce a C++
SolutionArray
class, which is now used as the backend for the PythonSolutionArray
class (E#137, #1385, #1426, #1458, #1462, #1464, #1508, #1520, #1547, #1585) - Add "native" support for HDF5 as an input/output format for
SolutionArray
and 1D flames (E#166,flame_initial_guess.py
) - Add a new thermo model,
coverage-dependent-surface
for representing surfaces where the enthalpy, entropy, and heat capacity of each species may depend on its coverage and the coverage of other species in the phase. (classCoverageDependentSurfPhase
, E#59, #1135, #1471, #1529, #1583) - Add support for surface chemistry to the plug flow reactor model (classs
FlowReactor
,1D_pfr_surfchem.py
,surf_pfr.py
, #1490) - Add support for using real gas models (Redlich-Kwong and Peng-Robinson) with the 1D flame solver (E#109, #1079)
- Introduction of the
yaml2ck
script, which converts Cantera's YAML mechanism format into the legacy Chemkin format. (yaml2ck.py
, E#52, #1286, #1365, #1420) - Add an experimental Python module where Cantera returns dimensional values as quantities using the
pint
package. This is currently available only for thermo methods (modulecantera.with_units
,isentropic_units.py
,rankine_units.py
,sound_speed_units.py
, E#3, #991, #1569) - Preview release of a new Matlab toolbox, with a rewritten API that makes use of modern Matlab features and replaces the difficult-to-maintain MEX-file based backend with one based on using
calllib
to interact directly with the Cantera C interface. (For the adventurous, seeREADME.md
, E#32, #1182, #1496, #1498) - Preview release of a new C# interface. See
README.md
for more on what's implemented and how to contribute (#1331, #1401)
Additional new features
(click here to expand)
- Add support for polynomial dependency of activation energy on surface species coverages (documentation, #1495)
- Add speed of sound property to
ThermoPhase
objects (sound_speed.py
, #1491) - Implemented isothermal compressibility and thermal expansion coefficient calculations for Redlich-Kwong and Peng-Robinson equations of state (E#122, #1421)
- Add
interfaceCurrent
(C++) andinterface_current
methods toKinetics
objects (#1398) - Add molecular weight attribute to
Species
objects (#1266) - Add
set_equivalence_ratio
andset_mixture_fraction
methods to PythonQuantity
objects (#1517) - Add array size methods to Python
SolutionArray
class (#1284) - Add
Solution
class toclib
(#1448, #1600) - Introduce factory for creating 1D domains (
newDomain
in C++,domain_new
inclib
) (#1445) - Introduce factory for creating functor objects (
newFunc1
in C++;func_new_basic
,func_new_advanced
,func_new_compound
, andfunc_new_modified
inclib
; andFunc1.cxx_functor
in Python) (documentation, #1513, #1521) - Provide a more complete interface to the C++
Units
class in Python (#1285) - Add a sample program demonstrating the use of the Cantera C interface,
clib
(#1454) - Add an example of modelling a porous media burner using the
ExtensibleReactor
class (PorousMediaBurner.py
, #1443) - Add an example demonstrating saving and loading of 1D flame simulations and restarting with different initial guesses (
flame_initial_guess.py
, #1293) - The test suite now includes a comprehensive set of thermodynamic consistency tests for all phase models (E#114, #1299, #1501)
- Consolidate literature references in the C++ documentation into a bibliography (#1550, #1575)
- Enable linking to the Cantera shared library on Windows (E#140, #1429)
- Split up compilation of the Python module to allow parallel builds and faster incremental builds (#1334, #1484)
- Automatically detect and use optimized BLAS/LAPACK libraries when compiling (E#144, #1316)
- Add new
core.h
header file to simplify required includes for high-level Cantera usage (demo.cpp
, #1238) - Added support for Python 3.11 and dropped support for Python 3.7 (#1326, #1406, #1467)
- Added support for SUNDIALS versions up to 6.6.0 and dropped support for SUNDIALS 2.x (#1341, #1570)
- Add support for building MATLAB toolbox on Apple Silicon (#1524)
- Added SCons option to set
AR
(for example, to usellvm-ar
instead ofar
) (#1424)
Changes to existing capabilities
(click here to expand)
BulkKinetics
now handles kinetics for any bulk phase, given the appropriate reaction rate parameterizations. As a result,GasKinetics
is deprecated in favor ofBulkKinetics
(#1483)- Rename C++ phase setter mnemonics to use
D
for density instead ofR
for rho, for examplesetState_TR
is deprecated in favor ofsetState_TD
(#1433) - Introduce properties for certain reactor features in Python and deprecate the old getter/setter methods.
ReactorNet.initial_time
replacesReactorNet.set_initial_time()
,Wall.velocity
replacesWall.set_velocity()
,Wall.heat_flux
replacesWall.set_heat_flux()
,Wall.expansion_rate
replaceswall.vdot
,Wall.heat_rate
replaceswall.qdot()
,Valve.time_function
replacesValve.set_time_function()
,MassFlowController.pressure_function
replacesMassFlowController.set_pressure_function()
andPressureController.primary
replacesPressureController.set_master()
(E#160, #1515) - Improve ability to find non-extinct diffusion flames when using the "auto" solver mode (E#155, #1463)
- Guard against combining Python
Quantity
objects at constant enthalpy and pressure if their pressures aren't equal (#1517) - Allow transport geometry flags in Chemkin input files that are formatted as floating point values (#1396)
- Disable irrelevant warnings for extinct diffusion flames (#1336)
- Moved Python test suite and examples out of the Python module; they are no longer installed as part of the Cantera Python package. (E#51, #1352, #1354)
- Drop support for generating
Makefile
s for samples (#1380) - Drop support for compiling in Cygwin (E#134, #1367)
- Migrate to C++17 standard, make use of modern C++ features, and make various style improvements to the C++ code (E#181, E#184, #1246, #1327, #1346, #1438, #1441, #1452, #1507, #1565, #1568, #1571, #1589)
- Numerous improvements to the organization and formatting of the Doxygen and Sphinx documentation, in part by using
doxygen-awesome
and the PyData Sphinx theme(E#115, E#175, E#179, #1279, #1427, #1518, #1534, #1541, #1543, #1546, #1551, #1557, #1558, #1559, #1561, #1562, #1563, #1567, #1572, #1573, #1582, #1581, #1584, #1590) - Various improvements to the SCons build system (#1268, #1307, #1351, #1360, #1404, #1470, #1472, #1509, #1542)
- Updates to simplify the special behavior that implements different 1D flame types and boundary conditions (E#165, E#171, #1477, #1514, #1523, #1531, #1555)
- Make use of C++
Solution
objects inDomain1D
and related classes (#1345, #1384, #1444, #1594, #1598) - Improved error handling for clib
thermo_setDensity
andthermo_setMolarDensity
methods (#1413) - Speed up Python module import by deferring imports of optional dependencies (#1428)
- Link Python
list_data_files
to C++getDataDirectories
(#1358) - Remove features deprecated in Cantera 2.6. Principally, this includes legacy reaction rate types (#1292) and the CTI/XML input formats (#1291)
- Deprecate remaining specializations of
Reaction
class and obsolete methods that were used by legacy reaction rate evaluators (E#149, #1295, #1333) - Deprecate other untested, unused and/or obsolete code (C++ Deprecations, #1455, #1504)
- Improve deprecation warnings issued from Python to include the name of the deprecated method and to show the line where that function is called from (#1519)
Bugs Fixed
(click here to expand)
- Fixed thermodynamic consistency issues with
SurfPhase
andRedlichKisterVPSSTP
(#1449) - Fixed thermodynamic consistency errors in IAPWS water equation of state (#1394)
- Fixed thermodynamic consistency issues in
IdealSolidSolnPhase
andBinarySolutionTabulatedThermo
(#1442) - Fix calculation of electron enthalpy contribution in
PlasmaPhase
(#1323) - Fix setting reference pressure for a phase by setting the reference pressure of the individual species (#1503)
- Fix issues with "volume" and compressibility of
SurfPhase
(#1350) - Handle factorization errors in equilibrium initial estimator (#1479)
- Make helpful errors for invalid reactions work more consistently (#1330, #1356)
- Fix serialization of phases with reactions from multiple YAML sections (#1552)
- Fix loading serialized mechanisms where reactions contain undeclared third bodies (#1588)
- Fix cases where three-body reactions were not being automatically detected (#1338)
- Fix possible segfaults when using Python
CustomRate
(#1293) - Partial fix for PLOG validation at low temperatures (#1553)
- Fix default
atol
used inReactorNet.advance_to_steady_state
(#1305) - Fix reading arrays containing subnormal floating point values (#1545)
- Fix adding Python
Quantity
objects when using molar basis (#1517) - Add missing array properties to
SolutionArray
andFlameBase
(#1342) - Fix
surf_pfr_chain.py
example to avoid misleading use of perturbedSolution
objects (#1304) - Fix Matlab samples to resolve issues from transition to YAML input files (#1414)
- Fix numerous build issues for certain configurations and platforms (#1272, #1362, #1364, #1366, #1378, #1381, #1390, #1434, #1437, #1505, #1511, #1538, #1544, #1574, #1591)
- Various documentation updates (#1276, #1296, #1328, #1335)
Contributors
This release was made possible by the following contributors: @anthony-walker, @arghdos, @band-a-prend, @BangShiuh, @bryanwweber, @burkenyo, @c-randall, @cdeil, @chinahg, @corykinney, @decaluwe, @g3bk47, @gkogekar, @hallaali, @ischoegl, @jongyoonbae, @kyleniemeyer, @mefuller, @rwest, @speth, @ssun30, @tsikes, @yeanment, @yurivict