ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / regionModels / regionCoupling / derivedFvPatchFields / filmPyrolysisTemperatureCoupled / filmPyrolysisTemperatureCoupledFvPatchScalarField.C
blobe28b862bbff035160bf91002259d7dbe3c219e36
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 \*---------------------------------------------------------------------------*/
26 #include "filmPyrolysisTemperatureCoupledFvPatchScalarField.H"
27 #include "addToRunTimeSelectionTable.H"
28 #include "surfaceFields.H"
29 #include "pyrolysisModel.H"
30 #include "surfaceFilmModel.H"
32 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
34 Foam::filmPyrolysisTemperatureCoupledFvPatchScalarField::
35 filmPyrolysisTemperatureCoupledFvPatchScalarField
37     const fvPatch& p,
38     const DimensionedField<scalar, volMesh>& iF
41     fixedValueFvPatchScalarField(p, iF),
42     phiName_("phi"),
43     rhoName_("rho"),
44     deltaWet_(1e-6)
48 Foam::filmPyrolysisTemperatureCoupledFvPatchScalarField::
49 filmPyrolysisTemperatureCoupledFvPatchScalarField
51     const filmPyrolysisTemperatureCoupledFvPatchScalarField& ptf,
52     const fvPatch& p,
53     const DimensionedField<scalar, volMesh>& iF,
54     const fvPatchFieldMapper& mapper
57     fixedValueFvPatchScalarField(ptf, p, iF, mapper),
58     phiName_(ptf.phiName_),
59     rhoName_(ptf.rhoName_),
60     deltaWet_(ptf.deltaWet_)
64 Foam::filmPyrolysisTemperatureCoupledFvPatchScalarField::
65 filmPyrolysisTemperatureCoupledFvPatchScalarField
67     const fvPatch& p,
68     const DimensionedField<scalar, volMesh>& iF,
69     const dictionary& dict
72     fixedValueFvPatchScalarField(p, iF),
73     phiName_(dict.lookupOrDefault<word>("phi", "phi")),
74     rhoName_(dict.lookupOrDefault<word>("rho", "rho")),
75     deltaWet_(dict.lookupOrDefault<scalar>("deltaWet", 1e-6))
77     fvPatchScalarField::operator=(scalarField("value", dict, p.size()));
81 Foam::filmPyrolysisTemperatureCoupledFvPatchScalarField::
82 filmPyrolysisTemperatureCoupledFvPatchScalarField
84     const filmPyrolysisTemperatureCoupledFvPatchScalarField& fptpsf
87     fixedValueFvPatchScalarField(fptpsf),
88     phiName_(fptpsf.phiName_),
89     rhoName_(fptpsf.rhoName_),
90     deltaWet_(fptpsf.deltaWet_)
94 Foam::filmPyrolysisTemperatureCoupledFvPatchScalarField::
95 filmPyrolysisTemperatureCoupledFvPatchScalarField
97     const filmPyrolysisTemperatureCoupledFvPatchScalarField& fptpsf,
98     const DimensionedField<scalar, volMesh>& iF
101     fixedValueFvPatchScalarField(fptpsf, iF),
102     phiName_(fptpsf.phiName_),
103     rhoName_(fptpsf.rhoName_),
104     deltaWet_(fptpsf.deltaWet_)
108 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
110 void Foam::filmPyrolysisTemperatureCoupledFvPatchScalarField::updateCoeffs()
112     if (updated())
113     {
114         return;
115     }
117     typedef regionModels::surfaceFilmModels::surfaceFilmModel filmModelType;
118     typedef regionModels::pyrolysisModels::pyrolysisModel pyrModelType;
120     // Since we're inside initEvaluate/evaluate there might be processor
121     // comms underway. Change the tag we use.
122     int oldTag = UPstream::msgType();
123     UPstream::msgType() = oldTag+1;
125     bool filmOk =
126         db().objectRegistry::foundObject<filmModelType>
127         (
128             "surfaceFilmProperties"
129         );
132     bool pyrOk =
133         db().objectRegistry::foundObject<pyrModelType>
134         (
135             "pyrolysisProperties"
136         );
138     if (!filmOk || !pyrOk)
139     {
140         // do nothing on construction - film model doesn't exist yet
141         return;
142     }
144     scalarField& Tp = *this;
146     const label patchI = patch().index();
148     // Retrieve film model
149     const filmModelType& filmModel =
150         db().lookupObject<filmModelType>("surfaceFilmProperties");
152     const label filmPatchI = filmModel.regionPatchID(patchI);
154     const mapDistribute& filmMap = filmModel.mappedPatches()[filmPatchI].map();
156     scalarField deltaFilm = filmModel.delta().boundaryField()[filmPatchI];
157     filmMap.distribute(deltaFilm);
159     scalarField TFilm = filmModel.Ts().boundaryField()[filmPatchI];
160     filmMap.distribute(TFilm);
163     // Retrieve pyrolysis model
164     const pyrModelType& pyrModel =
165         db().lookupObject<pyrModelType>("pyrolysisProperties");
167     const label pyrPatchI = pyrModel.regionPatchID(patchI);
169     const mapDistribute& pyrMap = pyrModel.mappedPatches()[pyrPatchI].map();
171     scalarField TPyr = pyrModel.T().boundaryField()[pyrPatchI];
172     pyrMap.distribute(TPyr);
175     forAll(deltaFilm, i)
176     {
177         if (deltaFilm[i] > deltaWet_)
178         {
179             // temperature set by film
180             Tp[i] = TFilm[i];
181         }
182         else
183         {
184             // temperature set by pyrolysis model
185             Tp[i] = TPyr[i];
186         }
187     }
189     // Restore tag
190     UPstream::msgType() = oldTag;
192     fixedValueFvPatchScalarField::updateCoeffs();
196 void Foam::filmPyrolysisTemperatureCoupledFvPatchScalarField::write
198     Ostream& os
199 ) const
201     fvPatchScalarField::write(os);
202     writeEntryIfDifferent<word>(os, "phi", "phi", phiName_);
203     writeEntryIfDifferent<word>(os, "rho", "rho", rhoName_);
204     os.writeKeyword("deltaWet") << deltaWet_ << token::END_STATEMENT << nl;
205     writeEntry("value", os);
209 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
211 namespace Foam
213     makePatchTypeField
214     (
215         fvPatchScalarField,
216         filmPyrolysisTemperatureCoupledFvPatchScalarField
217     );
221 // ************************************************************************* //