# Difference between revisions of "ChemFoam"

(→Solution Strategy) |
|||

Line 7: | Line 7: | ||

This solver provides an excellent starting point for those who want to have a first impression on the influence of the chemical reactions in the equations describing the evolution of the species concentration and also the evolution of temperature (i.e. the energy equation). Since the computational domain consists only of one cell, the only mechanism influencing the evolution of the spices concentration and of the temperature are the chemical reactions. | This solver provides an excellent starting point for those who want to have a first impression on the influence of the chemical reactions in the equations describing the evolution of the species concentration and also the evolution of temperature (i.e. the energy equation). Since the computational domain consists only of one cell, the only mechanism influencing the evolution of the spices concentration and of the temperature are the chemical reactions. | ||

− | Like most of the solvers present in OpenFOAM also this solver follows a segregated solution strategy. That means that for each quantity of interest one linear equation is solved and the coupling between the equations is achieved by explicit source terms. | + | Like most of the solvers present in OpenFOAM also this solver follows a segregated solution strategy. That means that for each quantity of interest one linear equation is solved and the coupling between the equations is achieved by explicit source terms. Briefly summarized the solution is achieved as follows: |

+ | |||

+ | 1) Solve the chemistry: The purpose is to get the reaction rates for each species involved and the heat realized by the chemical reaction | ||

+ | |||

+ | 2) Solve the species equation: The purpose it to get the species concentration at the new time step | ||

+ | |||

+ | 3) Solve the energy equation: Here we get the enthalpy (over the thermodynamics also the temperature) at the new time step | ||

+ | |||

+ | 4) Solve the pressure equation: Required to calculate the enthalpy | ||

+ | |||

+ | |||

+ | |||

+ | The source code can be found in chemFoam.C | ||

+ | |||

+ | <br><cpp> | ||

+ | |||

+ | /*---------------------------------------------------------------------------*\ | ||

+ | ========= | | ||

+ | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | ||

+ | \\ / O peration | | ||

+ | \\ / A nd | Copyright (C) 2010-2011 OpenCFD Ltd. | ||

+ | \\/ M anipulation | | ||

+ | ------------------------------------------------------------------------------- | ||

+ | | Copyright (C) 2011-2017 OpenFOAM Foundation | ||

+ | ------------------------------------------------------------------------------- | ||

+ | License | ||

+ | This file is part of OpenFOAM. | ||

+ | |||

+ | OpenFOAM is free software: you can redistribute it and/or modify it | ||

+ | under the terms of the GNU General Public License as published by | ||

+ | the Free Software Foundation, either version 3 of the License, or | ||

+ | (at your option) any later version. | ||

+ | |||

+ | OpenFOAM is distributed in the hope that it will be useful, but WITHOUT | ||

+ | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||

+ | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||

+ | for more details. | ||

+ | |||

+ | You should have received a copy of the GNU General Public License | ||

+ | along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. | ||

+ | |||

+ | Application | ||

+ | chemFoam | ||

+ | |||

+ | Group | ||

+ | grpCombustionSolvers | ||

+ | |||

+ | Description | ||

+ | Solver for chemistry problems, designed for use on single cell cases to | ||

+ | provide comparison against other chemistry solvers, that uses a single cell | ||

+ | mesh, and fields created from the initial conditions. | ||

+ | |||

+ | \*---------------------------------------------------------------------------*/ | ||

+ | |||

+ | #include "fvCFD.H" | ||

+ | #include "psiReactionThermo.H" | ||

+ | #include "BasicChemistryModel.H" | ||

+ | #include "reactingMixture.H" | ||

+ | #include "chemistrySolver.H" | ||

+ | #include "OFstream.H" | ||

+ | #include "thermoPhysicsTypes.H" | ||

+ | #include "basicSpecieMixture.H" | ||

+ | #include "hexCellFvMesh.H" | ||

+ | |||

+ | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // | ||

+ | |||

+ | int main(int argc, char *argv[]) | ||

+ | { | ||

+ | argList::addNote | ||

+ | ( | ||

+ | "Solver for chemistry problems, designed for use on single cell cases" | ||

+ | " to provide comparison against other chemistry solvers" | ||

+ | ); | ||

+ | |||

+ | argList::noParallel(); | ||

+ | |||

+ | #define CREATE_MESH createSingleCellMesh.H | ||

+ | #define NO_CONTROL | ||

+ | #include "postProcess.H" | ||

+ | |||

+ | #include "setRootCaseLists.H" | ||

+ | #include "createTime.H" | ||

+ | #include "createSingleCellMesh.H" | ||

+ | #include "createFields.H" | ||

+ | #include "createFieldRefs.H" | ||

+ | #include "readInitialConditions.H" | ||

+ | #include "createControls.H" | ||

+ | |||

+ | // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // | ||

+ | |||

+ | Info<< "\nStarting time loop\n" << endl; | ||

+ | |||

+ | while (runTime.run()) | ||

+ | { | ||

+ | #include "readControls.H" | ||

+ | |||

+ | #include "setDeltaT.H" | ||

+ | |||

+ | ++runTime; | ||

+ | Info<< "Time = " << runTime.timeName() << nl << endl; | ||

+ | |||

+ | #include "solveChemistry.H" | ||

+ | #include "YEqn.H" | ||

+ | #include "hEqn.H" | ||

+ | #include "pEqn.H" | ||

+ | |||

+ | #include "output.H" | ||

+ | |||

+ | runTime.printExecutionTime(Info); | ||

+ | } | ||

+ | |||

+ | Info << "Number of steps = " << runTime.timeIndex() << endl; | ||

+ | Info << "End" << nl << endl; | ||

+ | |||

+ | return 0; | ||

+ | } | ||

+ | |||

+ | |||

+ | // ************************************************************************* // | ||

+ | |||

+ | |||

+ | </cpp><br> |

## Revision as of 13:48, 20 December 2019

**chemFoam**

Solver for chemistry problems, designed for use on single cell cases to provide comparison against other chemistry solvers, that uses a single cell mesh, and fields created from the initial conditions.

## Solution Strategy

This solver provides an excellent starting point for those who want to have a first impression on the influence of the chemical reactions in the equations describing the evolution of the species concentration and also the evolution of temperature (i.e. the energy equation). Since the computational domain consists only of one cell, the only mechanism influencing the evolution of the spices concentration and of the temperature are the chemical reactions. Like most of the solvers present in OpenFOAM also this solver follows a segregated solution strategy. That means that for each quantity of interest one linear equation is solved and the coupling between the equations is achieved by explicit source terms. Briefly summarized the solution is achieved as follows:

1) Solve the chemistry: The purpose is to get the reaction rates for each species involved and the heat realized by the chemical reaction

2) Solve the species equation: The purpose it to get the species concentration at the new time step

3) Solve the energy equation: Here we get the enthalpy (over the thermodynamics also the temperature) at the new time step

4) Solve the pressure equation: Required to calculate the enthalpy

The source code can be found in chemFoam.C

/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2010-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- | Copyright (C) 2011-2017 OpenFOAM Foundation ------------------------------------------------------------------------------- License This file is part of OpenFOAM. OpenFOAM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OpenFOAM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. Application chemFoam Group grpCombustionSolvers Description Solver for chemistry problems, designed for use on single cell cases to provide comparison against other chemistry solvers, that uses a single cell mesh, and fields created from the initial conditions. \*---------------------------------------------------------------------------*/ #include "fvCFD.H" #include "psiReactionThermo.H" #include "BasicChemistryModel.H" #include "reactingMixture.H" #include "chemistrySolver.H" #include "OFstream.H" #include "thermoPhysicsTypes.H" #include "basicSpecieMixture.H" #include "hexCellFvMesh.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // int main(int argc, char *argv[]) { argList::addNote ( "Solver for chemistry problems, designed for use on single cell cases" " to provide comparison against other chemistry solvers" ); argList::noParallel(); #define CREATE_MESH createSingleCellMesh.H #define NO_CONTROL #include "postProcess.H" #include "setRootCaseLists.H" #include "createTime.H" #include "createSingleCellMesh.H" #include "createFields.H" #include "createFieldRefs.H" #include "readInitialConditions.H" #include "createControls.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Info<< "\nStarting time loop\n" << endl; while (runTime.run()) { #include "readControls.H" #include "setDeltaT.H" ++runTime; Info<< "Time = " << runTime.timeName() << nl << endl; #include "solveChemistry.H" #include "YEqn.H" #include "hEqn.H" #include "pEqn.H" #include "output.H" runTime.printExecutionTime(Info); } Info << "Number of steps = " << runTime.timeIndex() << endl; Info << "End" << nl << endl; return 0; } // ************************************************************************* //