injectionModelList.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) 2020 OpenCFD Ltd.
9-------------------------------------------------------------------------------
10License
11 This file is part of OpenFOAM.
12
13 OpenFOAM is free software: you can redistribute it and/or modify it
14 under the terms of the GNU General Public License as published by
15 the Free Software Foundation, either version 3 of the License, or
16 (at your option) any later version.
17
18 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
19 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21 for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
25
26\*---------------------------------------------------------------------------*/
27
28#include "injectionModelList.H"
29#include "volFields.H"
30
31// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
32
33namespace Foam
34{
35namespace regionModels
36{
37namespace areaSurfaceFilmModels
38{
39
40// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
41
43:
46{}
47
48
50(
51 liquidFilmBase& film,
52 const dictionary& dict
53)
54:
57 (
58 "injectionModelList",
59 film,
60 dict,
61 "injectionModelList",
62 "injectionModelList"
63 ),
64 massInjected_(Zero)
65{
66 const wordList activeModels(dict.lookup("injectionModels"));
67
68 wordHashSet models(activeModels);
69
70 Info<< " Selecting film injection models" << endl;
71 if (models.size())
72 {
73 this->setSize(models.size());
74
75 label i = 0;
76 for (const word& model : models)
77 {
78 set(i, injectionModel::New(film, dict, model));
79 i++;
80 }
81 }
82 else
83 {
84 Info<< " none" << endl;
85 }
86}
87
88
89// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
90
92{}
93
94
95// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
96
98(
99 scalarField& availableMass,
100 volScalarField& massToInject,
101 volScalarField& diameterToInject
102)
103{
104 const label patchi = film().patchID();
105
106 // Correct models that accumulate mass and diameter transfers
107 forAll(*this, i)
108 {
109 injectionModel& im = operator[](i);
110 im.correct
111 (
112 availableMass,
113 massToInject.boundaryFieldRef()[patchi],
114 diameterToInject.boundaryFieldRef()[patchi]
115 );
116 }
117
118 massInjected_ += gSum(massToInject.boundaryField()[patchi]);
119}
120
121
123{
125
126 scalar injectedMass = 0;
127 scalar patchInjectedMasses = 0;
128
129 forAll(*this, i)
130 {
131 const injectionModel& im = operator[](i);
132 injectedMass += im.injectedMassTotal();
133 im.patchInjectedMassTotals(patchInjectedMasses);
134 }
135
136 os << indent << "injected mass = " << injectedMass << nl;
137
138 const label patchi = film().patchID();
139
140 if (mag(patchInjectedMasses) > VSMALL)
141 {
142 os << indent << indent << "from patch " << pbm[patchi].name()
143 << " = " << patchInjectedMasses << nl;
144 }
145
146 scalar mass0(Zero);
147 this->getBaseProperty("massInjected", mass0);
148
149 scalar mass(massInjected_);
150 mass += mass0;
151
152 Info<< indent << " - patch: " << pbm[patchi].name() << " "
153 << mass << endl;
154
155 if (film().primaryMesh().time().writeTime())
156 {
157 setBaseProperty("massInjected", mass);
158 massInjected_ = 0.0;
159 }
160}
161
162
163// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
164
165} // End namespace areaSurfaceFilmModels
166} // End namespace regionModels
167} // End namespace Foam
168
169// ************************************************************************* //
Boundary & boundaryFieldRef(const bool updateAccessTime=true)
Return a reference to the boundary field.
const Boundary & boundaryField() const
Return const-reference to the boundary field.
label size() const noexcept
The number of elements in table.
Definition: HashTableI.H:52
const word & name() const noexcept
Return the object name.
Definition: IOobjectI.H:65
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:62
A list of pointers to objects of type <T>, with allocation/deallocation management of the pointers....
Definition: PtrList.H:73
const injectionModel * set(const label i) const
Definition: PtrList.H:138
void setSize(const label newLen)
Same as resize()
Definition: PtrList.H:151
virtual void correct()
Solve the turbulence equations and correct the turbulence viscosity.
static autoPtr< Time > New()
Construct (dummy) Time - no functionObjects or libraries.
Definition: Time.C:717
const T & operator[](const label i) const
Return const reference to the element.
Definition: UPtrListI.H:234
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:126
ITstream & lookup(const word &keyword, enum keyType::option matchOpt=keyType::REGEX) const
Definition: dictionary.C:386
InfoProxy< ensightCells > info() const
Return info proxy.
Definition: ensightCells.H:254
A polyBoundaryMesh is a polyPatch list with additional search methods and registered IO.
const polyBoundaryMesh & boundaryMesh() const
Return boundary mesh.
Definition: polyMesh.H:456
const liquidFilmBase & film() const
Return const access to the film surface film model.
virtual bool writeTime() const
Flag to indicate when to write a property.
Base class for film injection models, handling mass transfer from the film.
virtual scalar injectedMassTotal() const
Return the total mass injected.
virtual void patchInjectedMassTotals(scalar &patchMasses) const
const fvMesh & primaryMesh() const
Return the reference to the primary mesh database.
label patchID() const
Return patch ID.
Type getBaseProperty(const word &entryName, const Type &defaultValue=Type(Zero)) const
Retrieve generic property from the base model.
const dictionary & dict() const
Return const access to the cloud dictionary.
Definition: subModelBase.C:113
void setBaseProperty(const word &entryName, const Type &value)
Add generic property to the base model.
A class for handling words, derived from Foam::string.
Definition: word.H:68
OBJstream os(runTime.globalPath()/outputName)
Namespace for OpenFOAM.
Type gSum(const FieldField< Field, Type > &f)
messageStream Info
Information stream (stdout output on master, null elsewhere)
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:372
Ostream & indent(Ostream &os)
Indent stream.
Definition: Ostream.H:342
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
static constexpr const zero Zero
Global zero (0)
Definition: zero.H:131
constexpr char nl
The newline '\n' character (0x0a)
Definition: Ostream.H:53
dictionary dict
#define forAll(list, i)
Loop across all elements in list.
Definition: stdFoam.H:333