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 / ThermoCloud / ThermoCloudTemplate.H
blob687d5db23e6c64851923285a419c6589e84e5352
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::ThermoCloud
27 Description
28     Templated base class for thermodynamic cloud
30     - Adds to kinematic cloud
31       - Heat transfer
33 SourceFiles
34     ThermoCloudTemplateI.H
35     ThermoCloudTemplate.C
37 \*---------------------------------------------------------------------------*/
39 #ifndef ThermoCloudTemplate_H
40 #define ThermoCloudTemplate_H
42 #include "KinematicCloudTemplate.H"
43 #include "thermoCloud.H"
44 #include "basicThermo.H"
46 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
48 namespace Foam
51 // Forward declaration of classes
53 template<class CloudType>
54 class HeatTransferModel;
56 /*---------------------------------------------------------------------------*\
57                         Class ThermoCloud Declaration
58 \*---------------------------------------------------------------------------*/
60 template<class ParcelType>
61 class ThermoCloud
63     public KinematicCloud<ParcelType>,
64     public thermoCloud
66     // Private Member Functions
68         //- Disallow default bitwise copy construct
69         ThermoCloud(const ThermoCloud&);
71         //- Disallow default bitwise assignment
72         void operator=(const ThermoCloud&);
75 protected:
77     // Protected data
79         //- Thermo parcel constant properties
80         typename ParcelType::constantProperties constProps_;
83         // References to the carrier gas fields
85             //- Thermodynamics package (basic)
86             basicThermo& carrierThermo_;
89         // References to the cloud sub-models
91             //- Heat transfer model
92             autoPtr<HeatTransferModel<ThermoCloud<ParcelType> > >
93                 heatTransferModel_;
96         // Reference to the particle integration schemes
98             //- Temperature integration
99             autoPtr<scalarIntegrationScheme> TIntegrator_;
102         // Modelling options
104             //- Include radiation
105             Switch radiation_;
108         // Sources
110             //- Sensible enthalpy transfer [J/kg]
111             DimensionedField<scalar, volMesh> hsTrans_;
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         ThermoCloud
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 ~ThermoCloud();
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;
160             //- Return const access to thermo package
161             inline const basicThermo& carrierThermo() const;
163             //- Return access to thermo package
164             inline basicThermo& carrierThermo();
167             // Sub-models
169                 //- Return reference to heat transfer model
170                 inline const HeatTransferModel<ThermoCloud<ParcelType> >&
171                     heatTransfer() const;
174             // Integration schemes
176                 //-Return reference to velocity integration
177                 inline const scalarIntegrationScheme& TIntegrator() const;
180             // Modelling options
182                  //- Radiation flag
183                 inline bool radiation() const;
186             // Sources
188                 // Enthalpy
190                     //- Sensible enthalpy transfer [J/kg]
191                     inline DimensionedField<scalar, volMesh>& hsTrans();
193                     //- Return enthalpy source [J/kg/m3/s]
194                     inline tmp<DimensionedField<scalar, volMesh> > Sh() const;
197                 // Radiation - overrides thermoCloud virtual abstract members
199                     //- Return tmp equivalent particulate emission
200                     inline tmp<volScalarField> Ep() const;
202                     //- Return tmp equivalent particulate absorption
203                     inline tmp<volScalarField> ap() const;
205                     //- Return tmp equivalent particulate scattering factor
206                     inline tmp<volScalarField> sigmap() const;
209         // Check
211             //- Print cloud information
212             void info() const;
215         // Cloud evolution functions
217             //- Check parcel properties
218             void checkParcelProperties
219             (
220                 ParcelType& parcel,
221                 const scalar lagrangianDt,
222                 const bool fullyDescribed
223             );
225             //- Reset the spray source terms
226             void resetSourceTerms();
228             //- Evolve the spray (inject, move)
229             void evolve();
233 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
235 } // End namespace Foam
237 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
239 #include "ThermoCloudTemplateI.H"
241 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
243 #ifdef NoRepository
244 #   include "ThermoCloudTemplate.C"
245 #endif
247 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
249 #endif
251 // ************************************************************************* //