The OpenSMOKE++ Framework
OpenSMOKE++ is a general framework for numerical simulations of reacting systems with detailed kinetic mechanisms, including thousands of chemical species and reactions. OpenSMOKE++ is distributed in three main packages.
OpenSMOKE++ Suite is a collection of solver for simulating ideal chemical reactors (plug-flow, batch, and jet stirred reactors), shock-tubes, rapid compression machines, laminar 1D flames (freely propagating flames, burner stabilized flames, counterflow diffusion flames), flamelets and droplets in microgravity conditions. OpenSMOKE++ is available for Microsoft Windows, Linux, and MacOSX platforms.
The OpenSMOKE++ framework has been coupled to the well known OpenFOAM CFD framework, for building several solvers for modeling reacting flows in arbitrarly complex 2D/3D geometries with detailed kinetic mechanisms, in steady-state and unsteady conditions. The currently available solvers are suitable for simulation of laminar flows (laminarSMOKE++) and turbulent flows (edcSMOKE++ and flameletSMOKE++).
DoctorSMOKE++ is a numerical framerk for automatic reduction of detailed chemical kinetic mechanisms to a skeletal level, in such a way to allow their use for the numerical applications of interest. DoctorSMOKE++ combines several techniques in order to reach a high level of reduction together with accuracy: Direct Graph Relation techniques, Flux Analysis, and Species-Targeted Sensitivity Analysis (STSA).
The OpenSMOKE++ Suite is completely free for non-commercial use. A license file is needed to run the code. At present, only academic users from recognised institutional email addresses will be provided with the license file and have free access to the software. Users from commercial organisations should contact the OpenSMOKE++ Team.
Look at the License Agreement
OpenSMOKE++ is entirely written in object-oriented C++, because one of our primary objectives was to make possible extensions/customizations and integration in existing codes as easy as possible. Procedural languages, like FORTRAN or C, are less flexible from this point of view. This does not mean that efficiency was sacrificed. Since at the same time we are interested in accounting for very detailed mechanisms, with hundreds/thousands of species and reactions, we adopted several techniques in order to always ensure very good computational performances:
- code reformulation: many parts of the numerical algorithms are reformulated in a less intuitive way in order to minimize the number of flops needed to perform some calculations
- caching: the code is written in order to cache as much as possible, which means storing items for future use in order to avoid retrieving or recalculating them
- object pools: they are a technique for avoiding the creation and deletion of a large number of objects during the code execution
- optimized functions: the numerical algorithms are often reformulated in order to exploit the Intel® MKL Vector Mathematical Functions Library (VML)
This is an example of performances of OpenSMOKE++ in comparison with Cantera (details available in Cuoci et al., Computer Physics Communications, 192, pp. 237-264, DOI: 10.1016/j.cpc.2015.02.014). In particular here we simulated a set of several constant volume, abiabatic batch reactors in a wide range of initial operating conditions. The time reported on the left is the total time for simulating the whole set of cases. The first bar refers to Cantera, while the remaining bars are thee results obtained using different ODE solvers available in OpenSMOKE++. The results are reported for 2 different mechanisms, but they are quite general. The native OpenSMOKE++ solver usually performs quite well, together with CVODE (from the Sundials package) and DASPK.