ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / thermophysicalModels / solidChemistryModel / ODESolidChemistryModel / ODESolidChemistryModel.H
blobb34765d114a04d64986c6cd1f953138cfba2e45b
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by
13     the Free Software Foundation, either version 3 of the License, or
14     (at your option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::ODESolidChemistryModel
27 Description
28     Extends base chemistry model by adding a thermo package, and ODE functions.
29     Introduces chemistry equation system and evaluation of chemical source
30     terms.
32 SourceFiles
33     ODESolidChemistryModelI.H
34     ODESolidChemistryModel.C
36 \*---------------------------------------------------------------------------*/
38 #ifndef ODESolidChemistryModel_H
39 #define ODESolidChemistryModel_H
41 #include "solidReaction.H"
42 #include "ODE.H"
43 #include "volFieldsFwd.H"
45 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
47 namespace Foam
50 // Forward declaration of classes
51 class fvMesh;
53 /*---------------------------------------------------------------------------*\
54                    Class ODESolidChemistryModel Declaration
55 \*---------------------------------------------------------------------------*/
57 template<class CompType, class SolidThermo, class GasThermo>
58 class ODESolidChemistryModel
60     public CompType,
61     public ODE
63     // Private Member Functions
65         //- Disallow default bitwise assignment
66         void operator=(const ODESolidChemistryModel&);
69 protected:
71         //- Reference to solid mass fractions
72         PtrList<volScalarField>& Ys_;
74         //- List of gas species present in reaction system
75         speciesTable pyrolisisGases_;
77         //- Reactions
78         const PtrList<solidReaction>& reactions_;
80         //- Thermodynamic data of solids
81         const PtrList<SolidThermo>& solidThermo_;
83         //- Thermodynamic data of gases
84         PtrList<GasThermo> gasThermo_;
86          //- Number of gas species
87         label nGases_;
89         //- Number of components being solved by ODE
90         label nSpecie_;
92         //- Number of solid components
93         label nSolids_;
95         //- Number of solid reactions
96         label nReaction_;
98         //- List of reaction rate per solid [kg/m3/s]
99         PtrList<scalarField> RRs_;
101         //- List of reaction rate per gas [kg/m3/s]
102         PtrList<scalarField> RRg_;
105     // Protected Member Functions
107         //- Write access to source terms for solids
108         inline PtrList<scalarField>& RRs();
110         //- Write access to source terms for gases
111         inline PtrList<scalarField>& RRg();
114 private:
116         //- List of accumulative solid concentrations
117         mutable PtrList<volScalarField> Ys0_;
119         //- Cell counter
120         label cellCounter_;
122         //- List of active reacting cells
123         List<bool> reactingCells_;
126         // Private members
128             //- Set reacting status of cell, cellI
129             void setCellReacting(const label cellI, const bool active);
132 public:
134     //- Runtime type information
135     TypeName("ODESolidChemistryModel");
138     // Constructors
140         //- Construct from components
141         ODESolidChemistryModel
142         (
143             const fvMesh& mesh,
144             const word& compTypeName,
145             const word& SolidThermoName
146         );
149     //- Destructor
150     virtual ~ODESolidChemistryModel();
153     // Member Functions
155         //- The reactions
156         inline const PtrList<solidReaction>& reactions() const;
158         //- Thermodynamic data of gases
159         inline const PtrList<GasThermo>& gasThermo() const;
161         //- Gases table
162         inline const speciesTable& gasTable() const;
164         //- The number of solids
165         inline label nSpecie() const;
167         //- The number of solids
168         inline label nGases() const;
170         //- The number of reactions
171         inline label nReaction() const;
174         //- dc/dt = omega, rate of change in concentration, for each species
175         virtual scalarField omega
176         (
177             const scalarField& c,
178             const scalar T,
179             const scalar p,
180             const bool updateC0 = false
181         ) const;
183         //- Return the reaction rate for reaction r and the reference
184         //  species and charateristic times
185         virtual scalar omega
186         (
187             const solidReaction& r,
188             const scalarField& c,
189             const scalar T,
190             const scalar p,
191             scalar& pf,
192             scalar& cf,
193             label& lRef,
194             scalar& pr,
195             scalar& cr,
196             label& rRef
197         ) const;
199         //- Calculates the reaction rates
200         virtual void calculate();
203         // Chemistry model functions
205             //- Return const access to the chemical source terms for solids
206             inline tmp<volScalarField> RRs(const label i) const;
208             //- Return const access to the chemical source terms for gases
209             inline tmp<volScalarField> RRg(const label i) const;
211             //- Return total gas source term
212             inline tmp<volScalarField> RRg() const;
214             //- Return total solid source term
215             inline tmp<volScalarField> RRs() const;
217             //- Return const access to the total source terms
218             inline tmp<volScalarField> RR(const label i) const;
220             //- Return sensible enthalpy for gas i [J/Kg]
221             virtual tmp<volScalarField> gasHs
222             (
223                 const volScalarField& T,
224                 const label i
225             ) const;
227             //- Solve the reaction system for the given start time and time
228             //  step and return the characteristic time
229             virtual scalar solve(const scalar t0, const scalar deltaT);
231             //- Return the chemical time scale
232             virtual tmp<volScalarField> tc() const;
234             //- Return source for enthalpy equation [kg/m/s3]
235             virtual tmp<volScalarField> Sh() const;
237             //- Return the heat release, i.e. enthalpy/sec [m2/s3]
238             virtual tmp<volScalarField> dQ() const;
241         // ODE functions (overriding abstract functions in ODE.H)
243             //- Number of ODE's to solve
244             virtual label nEqns() const;
246             virtual void derivatives
247             (
248                 const scalar t,
249                 const scalarField& c,
250                 scalarField& dcdt
251             ) const;
253             virtual void jacobian
254             (
255                 const scalar t,
256                 const scalarField& c,
257                 scalarField& dcdt,
258                 scalarSquareMatrix& dfdc
259             ) const;
261             virtual scalar solve
262             (
263                 scalarField &c,
264                 const scalar T,
265                 const scalar p,
266                 const scalar t0,
267                 const scalar dt
268             ) const;
272 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
274 } // End namespace Foam
276 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
278 #   include "ODESolidChemistryModelI.H"
280 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
282 #ifdef NoRepository
283 #   include "ODESolidChemistryModel.C"
284 #endif
286 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
288 #endif
290 // ************************************************************************* //