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 | Copyright (C) 2011-2017 OpenFOAM Foundation
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
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.
15 
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.
20 
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/>.
23 
24 \*---------------------------------------------------------------------------*/
25 
28 #include "surfaceFields.H"
29 #include "pyrolysisModel.H"
30 #include "surfaceFilmModel.H"
31 
32 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
33 
36 (
37  const fvPatch& p,
39 )
40 :
41  fixedValueFvPatchScalarField(p, iF),
42  filmRegionName_("surfaceFilmProperties"),
43  pyrolysisRegionName_("pyrolysisProperties"),
44  phiName_("phi"),
45  rhoName_("rho")
46 {}
47 
48 
51 (
53  const fvPatch& p,
55  const fvPatchFieldMapper& mapper
56 )
57 :
58  fixedValueFvPatchScalarField(ptf, p, iF, mapper),
59  filmRegionName_(ptf.filmRegionName_),
60  pyrolysisRegionName_(ptf.pyrolysisRegionName_),
61  phiName_(ptf.phiName_),
62  rhoName_(ptf.rhoName_)
63 {}
64 
65 
68 (
69  const fvPatch& p,
71  const dictionary& dict
72 )
73 :
74  fixedValueFvPatchScalarField(p, iF, dict),
75  filmRegionName_
76  (
77  dict.lookupOrDefault<word>("filmRegion", "surfaceFilmProperties")
78  ),
79  pyrolysisRegionName_
80  (
81  dict.lookupOrDefault<word>("pyrolysisRegion", "pyrolysisProperties")
82  ),
83  phiName_(dict.lookupOrDefault<word>("phi", "phi")),
84  rhoName_(dict.lookupOrDefault<word>("rho", "rho"))
85 {}
86 
87 
90 (
92 )
93 :
94  fixedValueFvPatchScalarField(fptpsf),
95  filmRegionName_(fptpsf.filmRegionName_),
96  pyrolysisRegionName_(fptpsf.pyrolysisRegionName_),
97  phiName_(fptpsf.phiName_),
98  rhoName_(fptpsf.rhoName_)
99 {}
100 
101 
104 (
107 )
108 :
109  fixedValueFvPatchScalarField(fptpsf, iF),
110  filmRegionName_(fptpsf.filmRegionName_),
111  pyrolysisRegionName_(fptpsf.pyrolysisRegionName_),
112  phiName_(fptpsf.phiName_),
113  rhoName_(fptpsf.rhoName_)
114 {}
115 
116 
117 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
118 
120 {
121  if (updated())
122  {
123  return;
124  }
125 
128 
129  // Since we're inside initEvaluate/evaluate there might be processor
130  // comms underway. Change the tag we use.
131  int oldTag = UPstream::msgType();
132  UPstream::msgType() = oldTag+1;
133 
134  bool filmOk = db().time().foundObject<filmModelType>(filmRegionName_);
135 
136 
137  bool pyrOk = db().time().foundObject<pyrModelType>(pyrolysisRegionName_);
138 
139  if (!filmOk || !pyrOk)
140  {
141  // Do nothing on construction - film model doesn't exist yet
142  return;
143  }
144 
145  scalarField& Tp = *this;
146 
147  const label patchi = patch().index();
148 
149  // Retrieve film model
150  const filmModelType& filmModel =
151  db().time().lookupObject<filmModelType>(filmRegionName_);
152 
153  const label filmPatchi = filmModel.regionPatchID(patchi);
154 
155  scalarField alphaFilm = filmModel.alpha().boundaryField()[filmPatchi];
156  filmModel.toPrimary(filmPatchi, alphaFilm);
157 
158  scalarField TFilm = filmModel.Ts().boundaryField()[filmPatchi];
159  filmModel.toPrimary(filmPatchi, TFilm);
160 
161  // Retrieve pyrolysis model
162  const pyrModelType& pyrModel =
163  db().time().lookupObject<pyrModelType>(pyrolysisRegionName_);
164 
165  const label pyrPatchi = pyrModel.regionPatchID(patchi);
166 
167  scalarField TPyr = pyrModel.T().boundaryField()[pyrPatchi];
168  pyrModel.toPrimary(pyrPatchi, TPyr);
169 
170 
171  // Evaluate temperature
172  Tp = alphaFilm*TFilm + (1.0 - alphaFilm)*TPyr;
173 
174  // Restore tag
175  UPstream::msgType() = oldTag;
176 
177  fixedValueFvPatchScalarField::updateCoeffs();
178 }
179 
180 
182 (
183  Ostream& os
184 ) const
185 {
187  writeEntryIfDifferent<word>
188  (
189  os,
190  "filmRegion",
191  "surfaceFilmProperties",
192  filmRegionName_
193  );
194  writeEntryIfDifferent<word>
195  (
196  os,
197  "pyrolysisRegion",
198  "pyrolysisProperties",
199  pyrolysisRegionName_
200  );
201  writeEntryIfDifferent<word>(os, "phi", "phi", phiName_);
202  writeEntryIfDifferent<word>(os, "rho", "rho", rhoName_);
203  writeEntry("value", os);
204 }
205 
206 
207 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
208 
209 namespace Foam
210 {
212  (
215  );
216 }
217 
218 
219 // ************************************************************************* //
Foam::surfaceFields.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Definition: label.H:59
A list of keyword definitions, which are a keyword followed by any number of values (e...
Definition: dictionary.H:137
filmPyrolysisTemperatureCoupledFvPatchScalarField(const fvPatch &, const DimensionedField< scalar, volMesh > &)
Construct from patch and internal field.
A finiteVolume patch using a polyPatch and a fvBoundaryMesh.
Definition: fvPatch.H:61
Abstract base class with a fat-interface to all derived classes covering all possible ways in which t...
Definition: fvPatchField.H:66
static int & msgType()
Message tag of standard messages.
Definition: UPstream.H:465
virtual void write(Ostream &) const
Write.
Definition: fvPatchField.C:362
Macros for easy insertion into run-time selection tables.
makePatchTypeField(fvPatchVectorField, SRFFreestreamVelocityFvPatchVectorField)
A class for handling words, derived from string.
Definition: word.H:59
Foam::fvPatchFieldMapper.
This boundary condition is designed to be used in conjunction with surface film and pyrolysis modelli...
An Ostream is an abstract base class for all output systems (streams, files, token lists...
Definition: Ostream.H:53
label patchi
T lookupOrDefault(const word &, const T &, bool recursive=false, bool patternMatch=true) const
Find and return a T,.
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
tmp< Field< Type > > T() const
Return the field transpose (only defined for second rank tensors)
Definition: Field.C:717
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
Namespace for OpenFOAM.