Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / lagrangian / intermediate / clouds / Templates / ReactingMultiphaseCloud / ReactingMultiphaseCloudTemplate.H
blob92770339444284e96b179c29afbd281c7299a375
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     | Version:     3.2
5     \\  /    A nd           | Web:         http://www.foam-extend.org
6      \\/     M anipulation  | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation, either version 3 of the License, or (at your
14     option) any later version.
16     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::ReactingMultiphaseCloud
27 Description
28     Templated base class for multiphase reacting cloud
30     - Adds to reacting cloud
31       - multiphase composition
32       - devolatilisatsion
33       - surface reactions
35 SourceFiles
36     ReactingMultiphaseCloudTemplateI.H
37     ReactingMultiphaseCloudTemplate.C
39 \*---------------------------------------------------------------------------*/
41 #ifndef ReactingMultiphaseCloudTemplate_H
42 #define ReactingMultiphaseCloudTemplate_H
44 #include "ReactingCloudTemplate.H"
45 #include "reactingMultiphaseCloud.H"
47 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
49 namespace Foam
52 // Forward declaration of classes
54 template<class CloudType>
55 class DevolatilisationModel;
57 template<class CloudType>
58 class SurfaceReactionModel;
60 /*---------------------------------------------------------------------------*\
61                    Class ReactingMultiphaseCloud Declaration
62 \*---------------------------------------------------------------------------*/
64 template<class ParcelType>
65 class ReactingMultiphaseCloud
67     public ReactingCloud<ParcelType>,
68     public reactingMultiphaseCloud
70     // Private member functions
72         //- Disallow default bitwise copy construct
73         ReactingMultiphaseCloud(const ReactingMultiphaseCloud&);
75         //- Disallow default bitwise assignment
76         void operator=(const ReactingMultiphaseCloud&);
79 protected:
81     // Protected data
83         //- Parcel constant properties
84         typename ParcelType::constantProperties constProps_;
87         // References to the cloud sub-models
89             //- Devolatilisation model
90             autoPtr
91             <
92                 DevolatilisationModel<ReactingMultiphaseCloud<ParcelType> >
93             >
94             devolatilisationModel_;
96             //- Surface reaction model
97             autoPtr
98             <
99                 SurfaceReactionModel<ReactingMultiphaseCloud<ParcelType> >
100             >
101             surfaceReactionModel_;
104         // Check
106             //- Total mass transferred to continuous phase via devolatilisation
107             scalar dMassDevolatilisation_;
109             //- Total mass transferred to continuous phase via surface
110             //  reactions
111             scalar dMassSurfaceReaction_;
114     // Protected member functions
116         // Cloud evolution functions
118             //- Pre-evolve
119             void preEvolve();
121             //- Evolve the cloud
122             void evolveCloud();
124             //- Post-evolve
125             void postEvolve();
128 public:
130     // Constructors
132         //- Construct given carrier gas fields
133         ReactingMultiphaseCloud
134         (
135             const word& cloudName,
136             const volScalarField& rho,
137             const volVectorField& U,
138             const dimensionedVector& g,
139             basicThermo& thermo,
140             bool readFields = true
141         );
144     //- Destructor
145     virtual ~ReactingMultiphaseCloud();
148     //- Type of parcel the cloud was instantiated for
149     typedef ParcelType parcelType;
152     // Member Functions
154         // Access
156             //- Return the constant properties
157             inline const typename ParcelType::constantProperties&
158                 constProps() const;
161             // Sub-models
163                 //- Return reference to devolatilisation model
164                 inline const DevolatilisationModel
165                 <
166                     ReactingMultiphaseCloud<ParcelType>
167                 >&
168                 devolatilisation() const;
170                 //- Return reference to reacting surface reaction model
171                 inline const SurfaceReactionModel
172                 <
173                     ReactingMultiphaseCloud<ParcelType>
174                 >&
175                 surfaceReaction() const;
178         // Check
180             //- Print cloud information
181             void info() const;
183             //- Add to cumulative volatilisation mass transfer
184             void addToMassDevolatilisation(const scalar dMass);
186             //- Add to cumulative surface reaction transfer
187             void addToMassSurfaceReaction(const scalar dMass);
190         // Cloud evolution functions
192             //- Check parcel properties
193             void checkParcelProperties
194             (
195                 ParcelType& parcel,
196                 const scalar lagrangianDt,
197                 const bool fullyDescribed
198             );
200             //- Reset the spray source terms
201             void resetSourceTerms();
203             //- Evolve the spray (inject, move)
204             void evolve();
208 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
210 } // End namespace Foam
212 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
214 #include "ReactingMultiphaseCloudTemplateI.H"
216 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
218 #ifdef NoRepository
219 #   include "ReactingMultiphaseCloudTemplate.C"
220 #endif
222 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
224 #endif
226 // ************************************************************************* //