Cantera 3.0.0

Published on August 22, 2023 | Full release on GitHub

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

New features

  • 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++) and interface_current methods to Kinetics objects (#1398)
  • Add molecular weight attribute to Species objects (#1266)
  • Add set_equivalence_ratio and set_mixture_fraction methods to Python Quantity objects (#1517)
  • Add array size methods to Python SolutionArray class (#1284)
  • Add Solution class to clib (#1448, #1600)
  • Introduce factory for creating 1D domains (newDomain in C++, domain_new in clib) (#1445)
  • Introduce factory for creating functor objects (newFunc1 in C++; func_new_basic, func_new_advanced, func_new_compound, and func_new_modified in clib; and Func1.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 use llvm-ar instead of ar) (#1424)

Changes to existing capabilities

  • BulkKinetics now handles kinetics for any bulk phase, given the appropriate reaction rate parameterizations. As a result, GasKinetics is deprecated in favor of BulkKinetics (#1483)
  • Rename C++ phase setter mnemonics to use D for density instead of R for rho, for example setState_TR is deprecated in favor of setState_TD (#1433)
  • Introduce properties for certain reactor features in Python and deprecate the old getter/setter methods. ReactorNet.initial_time replaces ReactorNet.set_initial_time(), Wall.velocity replaces Wall.set_velocity(), Wall.heat_flux replaces Wall.set_heat_flux(), Wall.expansion_rate replaces wall.vdot, Wall.heat_rate replaces wall.qdot(), Valve.time_function replaces Valve.set_time_function(), MassFlowController.pressure_function replaces MassFlowController.set_pressure_function() and PressureController.primary replaces PressureController.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 Makefiles 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 in Domain1D and related classes (#1345, #1384, #1444, #1594, #1598)
  • Improved error handling for clib thermo_setDensity and thermo_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

  • Fixed thermodynamic consistency issues with SurfPhase and RedlichKisterVPSSTP (#1449)
  • Fixed thermodynamic consistency errors in IAPWS water equation of state (#1394)
  • Fixed thermodynamic consistency issues in IdealSolidSolnPhase and BinarySolutionTabulatedThermo (#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 in ReactorNet.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 and FlameBase (#1342)
  • Fix surf_pfr_chain.py example to avoid misleading use of perturbed Solution 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