Loading...
Searching...
No Matches
filmPyrolysisTemperatureCoupledFvPatchScalarField.C
Go to the documentation of this file.
1/*---------------------------------------------------------------------------*\
2 ========= |
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4 \\ / O peration |
5 \\ / A nd | www.openfoam.com
6 \\/ M anipulation |
7-------------------------------------------------------------------------------
8 Copyright (C) 2011-2017 OpenFOAM Foundation
9 Copyright (C) 2020 OpenCFD Ltd.
10-------------------------------------------------------------------------------
11License
12 This file is part of OpenFOAM.
13
14 OpenFOAM is free software: you can redistribute it and/or modify it
15 under the terms of the GNU General Public License as published by
16 the Free Software Foundation, either version 3 of the License, or
17 (at your option) any later version.
18
19 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
20 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
21 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22 for more details.
23
24 You should have received a copy of the GNU General Public License
25 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
26
27\*---------------------------------------------------------------------------*/
28
31#include "surfaceFields.H"
32#include "pyrolysisModel.H"
34
35// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
36
39(
40 const fvPatch& p,
42)
43:
44 fixedValueFvPatchScalarField(p, iF),
45 filmRegionName_("surfaceFilmProperties"),
46 pyrolysisRegionName_("pyrolysisProperties"),
47 phiName_("phi"),
48 rhoName_("rho")
49{}
50
51
54(
56 const fvPatch& p,
58 const fvPatchFieldMapper& mapper
59)
60:
61 fixedValueFvPatchScalarField(ptf, p, iF, mapper),
62 filmRegionName_(ptf.filmRegionName_),
63 pyrolysisRegionName_(ptf.pyrolysisRegionName_),
64 phiName_(ptf.phiName_),
65 rhoName_(ptf.rhoName_)
66{}
67
68
71(
72 const fvPatch& p,
74 const dictionary& dict
75)
76:
77 fixedValueFvPatchScalarField(p, iF, dict),
78 filmRegionName_
79 (
80 dict.getOrDefault<word>("filmRegion", "surfaceFilmProperties")
81 ),
82 pyrolysisRegionName_
83 (
84 dict.getOrDefault<word>("pyrolysisRegion", "pyrolysisProperties")
85 ),
86 phiName_(dict.getOrDefault<word>("phi", "phi")),
87 rhoName_(dict.getOrDefault<word>("rho", "rho"))
88{}
89
90
93(
95)
96:
97 fixedValueFvPatchScalarField(fptpsf),
98 filmRegionName_(fptpsf.filmRegionName_),
99 pyrolysisRegionName_(fptpsf.pyrolysisRegionName_),
100 phiName_(fptpsf.phiName_),
101 rhoName_(fptpsf.rhoName_)
102{}
103
104
107(
110)
111:
112 fixedValueFvPatchScalarField(fptpsf, iF),
113 filmRegionName_(fptpsf.filmRegionName_),
114 pyrolysisRegionName_(fptpsf.pyrolysisRegionName_),
115 phiName_(fptpsf.phiName_),
116 rhoName_(fptpsf.rhoName_)
117{}
118
119
120// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
121
123{
124 if (updated())
125 {
126 return;
127 }
128
129 // Film model
130 const auto* filmModelPtr = db().time().findObject
131 <regionModels::surfaceFilmModels::surfaceFilmRegionModel>
132 (filmRegionName_);
133
134 // Pyrolysis model
135 const auto* pyrModelPtr = db().time().findObject
136 <regionModels::pyrolysisModels::pyrolysisModel>
137 (pyrolysisRegionName_);
138
139 if (!filmModelPtr || !pyrModelPtr)
140 {
141 // Do nothing on construction - film model doesn't exist yet
142 return;
143 }
144
145 const auto& filmModel = *filmModelPtr;
146 const auto& pyrModel = *pyrModelPtr;
147
148
149 // Since we're inside initEvaluate/evaluate there might be processor
150 // comms underway. Change the tag we use.
151 const int oldTag = UPstream::incrMsgType();
152
153 scalarField& Tp = *this;
154
155 const label patchi = patch().index();
156
157 // The film model
158 const label filmPatchi = filmModel.regionPatchID(patchi);
159
160 scalarField alphaFilm = filmModel.alpha().boundaryField()[filmPatchi];
161 filmModel.toPrimary(filmPatchi, alphaFilm);
162
163 scalarField TFilm = filmModel.Ts().boundaryField()[filmPatchi];
164 filmModel.toPrimary(filmPatchi, TFilm);
165
166 // The pyrolysis model
167 const label pyrPatchi = pyrModel.regionPatchID(patchi);
168
169 scalarField TPyr = pyrModel.T().boundaryField()[pyrPatchi];
170 pyrModel.toPrimary(pyrPatchi, TPyr);
171
172
173 // Evaluate temperature
174 Tp = alphaFilm*TFilm + (1.0 - alphaFilm)*TPyr;
176 UPstream::msgType(oldTag); // Restore tag
177
178 fixedValueFvPatchScalarField::updateCoeffs();
179}
180
181
183(
184 Ostream& os
185) const
186{
188 os.writeEntryIfDifferent<word>
189 (
190 "filmRegion",
191 "surfaceFilmProperties",
192 filmRegionName_
193 );
194 os.writeEntryIfDifferent<word>
195 (
196 "pyrolysisRegion",
197 "pyrolysisProperties",
198 pyrolysisRegionName_
199 );
200 os.writeEntryIfDifferent<word>("phi", "phi", phiName_);
201 os.writeEntryIfDifferent<word>("rho", "rho", rhoName_);
204
205
206// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
207
208namespace Foam
209{
211 (
213 filmPyrolysisTemperatureCoupledFvPatchScalarField
214 );
215}
216
217
218// ************************************************************************* //
Macros for easy insertion into run-time selection tables.
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition Ostream.H:59
static int & msgType() noexcept
Message tag of standard messages.
Definition UPstream.H:1926
static int incrMsgType(int val=1) noexcept
Increment the message tag for standard messages.
Definition UPstream.H:1948
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition dictionary.H:133
This boundary condition is designed to be used in conjunction with surface film and pyrolysis modelli...
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
filmPyrolysisTemperatureCoupledFvPatchScalarField(const fvPatch &, const DimensionedField< scalar, volMesh > &)
Construct from patch and internal field.
A FieldMapper for finite-volume patch fields.
virtual void write(Ostream &) const
Write.
void writeValueEntry(Ostream &os) const
Write *this field as a "value" entry.
A finiteVolume patch using a polyPatch and a fvBoundaryMesh.
Definition fvPatch.H:71
const Type * findObject(const word &name, const bool recursive=false) const
Return const pointer to the object of the given Type.
const Time & time() const noexcept
Return the reference to the time database.
A class for handling words, derived from Foam::string.
Definition word.H:66
volScalarField & p
OBJstream os(runTime.globalPath()/outputName)
#define makePatchTypeField(PatchTypeField, typePatchTypeField)
Define a concrete fvPatchField type and add to run-time tables Example, (fvPatchScalarField,...
const std::string patch
OpenFOAM patch number as a std::string.
Namespace for OpenFOAM.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
fvPatchField< scalar > fvPatchScalarField
dictionary dict
Foam::surfaceFields.