PatchInteractionFields.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 -------------------------------------------------------------------------------
10 License
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 "PatchInteractionFields.H"
29 
30 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
31 
32 template<class CloudType>
35 ({
36  { resetMode::none, "none" },
37  { resetMode::timeStep, "timeStep" },
38  { resetMode::writeTime, "writeTime" },
39 });
40 
41 // * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * //
42 
43 template<class CloudType>
45 (
46  autoPtr<volScalarField>& fieldPtr,
47  const word& fieldName,
48  const dimensionSet& dims
49 ) const
50 {
51  if (fieldPtr)
52  {
53  fieldPtr->primitiveFieldRef() = 0.0;
54  }
55  else
56  {
57  const fvMesh& mesh = this->owner().mesh();
58 
59  fieldPtr.reset
60  (
61  new volScalarField
62  (
63  IOobject
64  (
65  this->owner().name() + ":" + this->modelName() + ":" + fieldName,
66  mesh.time().timeName(),
67  mesh,
68  IOobject::READ_IF_PRESENT,
69  IOobject::NO_WRITE
70  ),
71  mesh,
72  dimensionedScalar(dims, Zero)
73  )
74  );
75  }
76 }
77 
78 
79 template<class CloudType>
81 {
82  clearOrReset(massPtr_, "mass", dimMass);
83  clearOrReset(countPtr_, "count", dimless);
84 }
85 
86 
87 template<class CloudType>
89 {
90  if (massPtr_)
91  {
92  massPtr_->write();
93  }
94  else
95  {
97  << "massPtr not valid" << abort(FatalError);
98  }
99 
100  if (countPtr_)
101  {
102  countPtr_->write();
103  }
104  else
105  {
107  << "countPtr not valid" << abort(FatalError);
108  }
109 
110  if (resetMode_ == resetMode::writeTime)
111  {
112  reset();
113  }
114 }
115 
116 
117 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
118 
119 template<class CloudType>
121 (
122  const dictionary& dict,
123  CloudType& owner,
124  const word& modelName
125 )
126 :
127  CloudFunctionObject<CloudType>(dict, owner, modelName, typeName),
128  massPtr_(nullptr),
129  countPtr_(nullptr),
130  resetMode_
131  (
132  resetModeNames_.getOrDefault
133  (
134  "resetMode",
135  this->coeffDict(),
136  resetMode::none
137  )
138  )
139 {
140  reset();
141 }
142 
143 
144 template<class CloudType>
146 (
148 )
149 :
151  massPtr_(nullptr),
152  countPtr_(nullptr),
153  resetMode_(pii.resetMode_)
154 {}
155 
156 
157 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
158 
159 template<class CloudType>
161 (
162  const typename parcelType::trackingData&
163 )
164 {
165  if (resetMode_ == resetMode::timeStep)
166  {
167  reset();
168  }
169 }
170 
171 
172 template<class CloudType>
174 (
175  const parcelType& p,
176  const polyPatch& pp,
177  const typename parcelType::trackingData& td
178 )
179 {
180  const label patchi = pp.index();
181  const label facei = pp.whichFace(p.face());
182 
183  massPtr_->boundaryFieldRef()[patchi][facei] += p.nParticle()*p.mass();
184  countPtr_->boundaryFieldRef()[patchi][facei] += 1;
185 
186  return true;
187 }
188 
189 
190 // ************************************************************************* //
dictionary dict
error FatalError
Error stream (stdout output on all processes), with additional &#39;FOAM FATAL ERROR&#39; header text and sta...
A list of keyword definitions, which are a keyword followed by a number of values (eg...
Definition: dictionary.H:129
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition: error.H:598
virtual bool postPatch(const parcelType &p, const polyPatch &pp, const typename parcelType::trackingData &td)
Post-patch hook.
const dimensionSet dimless
Dimensionless.
void clearOrReset(autoPtr< volScalarField > &fieldPtr, const word &fieldName, const dimensionSet &dims) const
Helper function to clear or reset fields.
static const Enum< resetMode > resetModeNames_
PatchInteractionFields(const dictionary &dict, CloudType &owner, const word &modelName)
Construct from dictionary.
GeometricField< scalar, fvPatchField, volMesh > volScalarField
Definition: volFieldsFwd.H:81
dynamicFvMesh & mesh
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for expressions::valueTypeCode::INVALID.
Definition: exprTraits.C:127
Creates volume fields whose boundaries are used to store patch interaction statistics.
A class for handling words, derived from Foam::string.
Definition: word.H:63
errorManip< error > abort(error &err)
Definition: errorManip.H:139
virtual void write()
Write post-processing info.
virtual void preEvolve(const typename parcelType::trackingData &td)
Pre-evolve hook.
Enum is a wrapper around a list of names/values that represent particular enumeration (or int) values...
Definition: error.H:64
dimensioned< scalar > dimensionedScalar
Dimensioned scalar obtained from generic dimensioned type.
void reset()
Create|read|reset the fields.
const dimensionSet dimMass(1, 0, 0, 0, 0, 0, 0)
Definition: dimensionSets.H:49
volScalarField & p
Templated base class for dsmc cloud.
Definition: DSMCCloud.H:67
Templated cloud function object base class.
uindirectPrimitivePatch pp(UIndirectList< face >(mesh.faces(), faceLabels), mesh.points())
static constexpr const zero Zero
Global zero (0)
Definition: zero.H:127