BUG: UListIO: byteSize overflowing on really big faceLists
[OpenFOAM-2.0.x.git] / src / regionModels / surfaceFilmModels / thermoSingleLayer / thermoSingleLayer.H
blob6814e25a3e4c0e934378bd72b0e77d2a55110358
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::thermoSingleLayer
27 Description
28     Thermodynamic form of single-cell layer surface film model
30     Note: defining enthalpy as Cp(T - Tstd) - when using liquids from the
31     thermophysical library, their enthalpies are calculated similarly, where
32     Tstd = 298.15 K
34 SourceFiles
35     thermoSingleLayer.C
37 \*---------------------------------------------------------------------------*/
39 #ifndef thermoSingleLayer_H
40 #define thermoSingleLayer_H
42 #include "kinematicSingleLayer.H"
43 #include "SLGThermo.H"
45 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
47 namespace Foam
49 namespace regionModels
51 namespace surfaceFilmModels
54 // Forward declaration of classes
55 class heatTransferModel;
56 class phaseChangeModel;
57 class filmRadiationModel;
59 /*---------------------------------------------------------------------------*\
60                       Class thermoSingleLayer Declaration
61 \*---------------------------------------------------------------------------*/
63 class thermoSingleLayer
65     public kinematicSingleLayer
67 private:
69     // Private member functions
71         //- Disallow default bitwise copy construct
72         thermoSingleLayer(const thermoSingleLayer&);
74         //- Disallow default bitwise assignment
75         void operator=(const thermoSingleLayer&);
77         //- Return boundary types for sensible enthalpy field
78         wordList hsBoundaryTypes();
81 protected:
83     // Protected data
85         // Thermo properties
87             //- Reference to the SLGThermo
88             const SLGThermo& thermo_;
90             // Single component
92                 //- Id of component in thermo database
93                 label liquidId_;
96             // Fields
98                 //- Specific heat capacity / [J/kg/K]
99                 volScalarField Cp_;
101                 //- Thermal conductivity / [W/m/K]
102                 volScalarField kappa_;
104                 //- Temperature - mean / [K]
105                 volScalarField T_;
107                 //- Temperature - surface / [K]
108                 volScalarField Ts_;
110                 //- Temperature - wall / [K]
111                 volScalarField Tw_;
113                 //- Sensible enthalpy / [J/kg]
114                 volScalarField hs_;
117             // Transfer fields - to the primary region
119                 //- Film mass evolved via phase change
120                 volScalarField primaryMassPCTrans_;
122                 //- Film energy evolved via phase change
123                 volScalarField primaryEnergyPCTrans_;
126         // Source term fields
128             // Film region - registered to the film region mesh
129             // Note: need boundary value mapped from primary region, and then
130             // pushed into the patch internal field
132                 //- Energy / [J/m2/s]
133                 volScalarField hsSp_;
136             // Primary region - registered to the primary region mesh
137             // Internal use only - not read-in
139                 //- Energy / [J/m2/s]
140                 volScalarField hsSpPrimary_;
143         // Fields mapped from primary region - registered to the film region
144         // Note: need both boundary AND patch internal fields to be mapped
146             //- Temperature / [K]
147             volScalarField TPrimary_;
149             //- List of specie mass fractions / [0-1]
150             PtrList<volScalarField> YPrimary_;
153         // Sub-models
155             //- Heat transfer coefficient bewteen film surface and primary
156             //  region [W/m2/K]
157             autoPtr<heatTransferModel> htcs_;
159             //- Heat transfer coefficient bewteen wall and film [W/m2/K]
160             autoPtr<heatTransferModel> htcw_;
162             //- Phase change
163             autoPtr<phaseChangeModel> phaseChange_;
165             //- Radiation
166             autoPtr<filmRadiationModel> radiation_;
170     // Protected member functions
172         //- Read control parameters from dictionary
173         virtual bool read();
175         //- Correct the thermo fields
176         virtual void correctThermoFields();
178         //- Correct sensible enthalpy for mapped temperature fields
179         virtual void correctHsForMappedT();
181         //- Correct the film surface and wall temperatures
182         virtual void updateSurfaceTemperatures();
184         //- Reset source term fields
185         virtual void resetPrimaryRegionSourceTerms();
187         //- Transfer thermo fields from the primary region to the film region
188         virtual void transferPrimaryRegionThermoFields();
190         //- Transfer source fields from the primary region to the film region
191         virtual void transferPrimaryRegionSourceFields();
193         //- Update the film sub-models
194         virtual void updateSubmodels();
196         //- Return the wall/surface heat transfer term for the enthalpy equation
197         virtual tmp<fvScalarMatrix> q(volScalarField& hs) const;
200         // Equations
202             //- Solve energy equation
203             virtual void solveEnergy();
206 public:
208     //- Runtime type information
209     TypeName("thermoSingleLayer");
212     // Constructors
214         //- Construct from components
215         thermoSingleLayer
216         (
217             const word& modelType,
218             const fvMesh& mesh,
219             const dimensionedVector& g,
220             const bool readFields = true
221         );
224     //- Destructor
225     virtual ~thermoSingleLayer();
228     // Member Functions
230         // Thermo properties
232             //- Return const reference to the SLGThermo object
233             inline const SLGThermo& thermo() const;
235             // Single component
237                 //- Return the Id of component in thermo database
238                 inline label liquidId() const;
241             // Fields
243                 //- Return the film specific heat capacity [J/kg/K]
244                 virtual const volScalarField& Cp() const;
246                 //- Return the film thermal conductivity [W/m/K]
247                 virtual const volScalarField& kappa() const;
249                 //- Return the film mean temperature [K]
250                 virtual const volScalarField& T() const;
252                 //- Return the film surface temperature [K]
253                 virtual const volScalarField& Ts() const;
255                 //- Return the film wall temperature [K]
256                 virtual const volScalarField& Tw() const;
258                 //- Return the film sensible enthalpy [J/kg]
259                 virtual const volScalarField& hs() const;
263             // Transfer fields - to the primary region
265                 //- Return mass transfer source - Eulerian phase only
266                 virtual tmp<volScalarField> primaryMassTrans() const;
269             // Helper functions
271                 //- Return sensible enthalpy as a function of temperature
272                 //  for a patch
273                 inline tmp<scalarField> hs
274                 (
275                     const scalarField& T,
276                     const label patchI
277                 ) const;
279                 //- Return sensible enthalpy as a function of temperature
280                 inline tmp<volScalarField> hs
281                 (
282                     const volScalarField& T
283                 ) const;
285                 //- Return temperature as a function of sensible enthalpy
286                 inline tmp<volScalarField> T
287                 (
288                     const volScalarField& hs
289                 ) const;
292          // Source fields (read/write access)
294             //- External hook to add sources to the film
295             virtual void addSources
296             (
297                 const label patchI,            // patchI on primary region
298                 const label faceI,             // faceI of patchI
299                 const scalar massSource,       // [kg]
300                 const vector& momentumSource,  // [kg.m/s] (tangential momentum)
301                 const scalar pressureSource,   // [kg.m/s] (normal momentum)
302                 const scalar energySource      // [J]
303             );
306         // Source term fields
308             // Film region
310                 //- Energy / [J/m2/s]
311                 inline const volScalarField& hsSp() const;
314             // Primary region
316                 //- Energy / [J/m2/s]
317                 inline const volScalarField& hsSpPrimary() const;
320         // Fields mapped from the primary region
322             //- Temperature / [K]
323             inline const volScalarField& TPrimary() const;
325             //- Specie mass fractions / [0-1]
326             inline const PtrList<volScalarField>& YPrimary() const;
330         // Sub-models
332             //- Return const access to the (surface) heat transfer model
333             inline const heatTransferModel& htcs() const;
335             //- Return const access to the (wall) heat transfer model
336             inline const heatTransferModel& htcw() const;
338             //- Return const access to the phase change model
339             inline const phaseChangeModel& phaseChange() const;
341             //- Return const access to the radiation model
342             inline const filmRadiationModel& radiation() const;
345         // Evolution
347             //- Pre-evolve film hook
348             virtual void preEvolveRegion();
350             //- Evolve the film equations
351             virtual void evolveRegion();
354         // Source fields
356             // Mapped into primary region
358                 //- Return total mass source - Eulerian phase only
359                 virtual tmp<DimensionedField<scalar, volMesh> > Srho() const;
361                 //- Return mass source for specie i - Eulerian phase only
362                 virtual tmp<DimensionedField<scalar, volMesh> > Srho
363                 (
364                     const label i
365                 ) const;
367                 //- Return enthalpy source - Eulerian phase only
368                 virtual tmp<DimensionedField<scalar, volMesh> > Sh() const;
371        // I-O
373             //- Provide some feedback
374             virtual void info() const;
378 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
380 } // End namespace surfaceFilmModels
381 } // End namespace regionModels
382 } // End namespace Foam
384 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
386 #include "thermoSingleLayerI.H"
388 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
390 #endif
392 // ************************************************************************* //