SurfaceFilmModel.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 -------------------------------------------------------------------------------
11 License
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 
29 #include "SurfaceFilmModel.H"
30 #include "mathematicalConstants.H"
31 #include "surfaceFilmRegionModel.H"
32 #include "liquidFilmBase.H"
33 
34 using namespace Foam::constant;
35 
36 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
37 
38 template<class CloudType>
40 :
42  g_(owner.g()),
43  ejectedParcelType_(0),
44  injectionOffset_(1.1),
45  minDiameter_(0),
46  massParcelPatch_(0),
47  diameterParcelPatch_(0),
48  UFilmPatch_(0),
49  rhoFilmPatch_(0),
50  deltaFilmPatch_(0),
51  nParcelsTransferred_(0),
52  nParcelsInjected_(0),
53  totalMassTransferred_(0)
54 {}
55 
56 
57 template<class CloudType>
59 (
60  const dictionary& dict,
61  CloudType& owner,
62  const word& type
63 )
64 :
65  CloudSubModelBase<CloudType>(owner, dict, typeName, type),
66  g_(owner.g()),
67  ejectedParcelType_
68  (
69  this->coeffDict().template getOrDefault<label>("ejectedParcelType", -1)
70  ),
71  injectionOffset_
72  (
73  this->coeffDict().template getOrDefault<scalar>("injectionOffset", 1.1)
74  ),
75  minDiameter_
76  (
77  this->coeffDict().template getOrDefault<scalar>("minDiameter", -1)
78  ),
79  massParcelPatch_(0),
80  diameterParcelPatch_(0),
81  UFilmPatch_(0),
82  rhoFilmPatch_(0),
83  deltaFilmPatch_(owner.mesh().boundary().size()),
84  nParcelsTransferred_(0),
85  nParcelsInjected_(0),
86  totalMassTransferred_()
87 {}
88 
89 
90 template<class CloudType>
92 (
94 )
95 :
97  g_(sfm.g_),
98  ejectedParcelType_(sfm.ejectedParcelType_),
99  injectionOffset_(sfm.injectionOffset_),
100  minDiameter_(sfm.minDiameter_),
101  massParcelPatch_(sfm.massParcelPatch_),
102  diameterParcelPatch_(sfm.diameterParcelPatch_),
103  UFilmPatch_(sfm.UFilmPatch_),
104  rhoFilmPatch_(sfm.rhoFilmPatch_),
105  deltaFilmPatch_(sfm.deltaFilmPatch_),
106  nParcelsTransferred_(sfm.nParcelsTransferred_),
107  nParcelsInjected_(sfm.nParcelsInjected_),
108  totalMassTransferred_(sfm.totalMassTransferred_)
109 {}
110 
111 
112 // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
113 
114 template<class CloudType>
116 {}
117 
118 
119 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
120 
121 template<class CloudType>
122 template<class CloudTrackType>
124 (
125  const label primaryPatchi,
126  const labelList& injectorCellsPatch,
127  CloudTrackType& cloud
128 )
129 {
130  const fvMesh& mesh = this->owner().mesh();
131  const vectorField& Cf = mesh.C().boundaryField()[primaryPatchi];
132  const vectorField& Sf = mesh.Sf().boundaryField()[primaryPatchi];
133  const scalarField& magSf =
134  mesh.magSf().boundaryField()[primaryPatchi];
135 
136  forAll(injectorCellsPatch, j)
137  {
138  if (diameterParcelPatch_[j] > 0)
139  {
140  const label celli = injectorCellsPatch[j];
141 
142  const scalar offset =
143  max
144  (
145  diameterParcelPatch_[j],
146  deltaFilmPatch_[primaryPatchi][j]
147  );
148  const point pos = Cf[j] - injectionOffset_*offset*Sf[j]/magSf[j];
149 
150  // Create a new parcel
151  parcelType* pPtr =
152  new parcelType(this->owner().pMesh(), pos, celli);
153 
154  // Check/set new parcel thermo properties
155  cloud.setParcelThermoProperties(*pPtr, 0.0);
156 
157  setParcelProperties(*pPtr, j);
158 
159  if (pPtr->nParticle() > 0.001)
160  {
161  // Check new parcel properties
162  cloud.checkParcelProperties(*pPtr, 0.0, false);
163 
164  // Add the new parcel to the cloud
165  cloud.addParticle(pPtr);
166 
167  nParcelsInjected_++;
168  }
169  else
170  {
171  // TODO: cache mass and re-distribute?
172  delete pPtr;
173  }
174  }
175  }
176 }
177 
178 template<class CloudType>
179 template<class TrackCloudType>
181 {
182  if (!this->active())
183  {
184  return;
185  }
186 
187  const fvMesh& mesh = this->owner().mesh();
188  const polyBoundaryMesh& pbm = mesh.boundaryMesh();
189 
190  // Retrieve the film model from the owner database
192  mesh.time().objectRegistry::template findObject
194  (
195  "surfaceFilmProperties"
196  );
197 
198  // Check the singleLayer type of films
199  if (filmModel && filmModel->active())
200  {
201 
202  const labelList& filmPatches = filmModel->intCoupledPatchIDs();
203  const labelList& primaryPatches = filmModel->primaryPatchIDs();
204 
205  forAll(filmPatches, i)
206  {
207  const label filmPatchi = filmPatches[i];
208  const label primaryPatchi = primaryPatches[i];
209 
210  const labelList& injectorCellsPatch = pbm[primaryPatchi].faceCells();
211 
212  cacheFilmFields(filmPatchi, primaryPatchi, *filmModel);
213 
214  injectParticles(primaryPatchi, injectorCellsPatch, cloud);
215  }
216  }
217 
218  // Check finite area films
219  wordList names =
220  mesh.time().objectRegistry::template
221  sortedNames<regionModels::regionFaModel>();
222 
223  forAll (names, i)
224  {
225  const regionModels::regionFaModel* regionFa =
226  mesh.time().objectRegistry::template cfindObject
227  <
229  >(names[i]);
230 
231  // Check that it is a type areaFilm
232  if (regionFa && isA<areaFilm>(*regionFa) && regionFa->active())
233  {
234  areaFilm& film =
235  const_cast<areaFilm&>(refCast<const areaFilm>(*regionFa));
236 
237  const label patchId = regionFa->patchID();
238 
239  const labelList& injectorCellsPatch = pbm[patchId].faceCells();
240 
241  cacheFilmFields(patchId, film);
242 
243  injectParticles(patchId, injectorCellsPatch, cloud);
244 
245  forAll(injectorCellsPatch, facei)
246  {
247  if (diameterParcelPatch_[facei] > 0)
248  {
249  film.addSources
250  (
251  patchId,
252  facei,
253  -massParcelPatch_[facei], // mass
254  Zero, // tangential momentum
255  Zero, // impingement
256  Zero // energy
257  );
258  }
259  }
260  }
261  }
262 }
263 
264 
265 template<class CloudType>
267 (
268  const label filmPatchi,
269  const label primaryPatchi,
271 )
272 {
273  massParcelPatch_ = filmModel.cloudMassTrans().boundaryField()[filmPatchi];
274  filmModel.toPrimary(filmPatchi, massParcelPatch_);
275 
276  diameterParcelPatch_ =
277  filmModel.cloudDiameterTrans().boundaryField()[filmPatchi];
278  filmModel.toPrimary(filmPatchi, diameterParcelPatch_, maxEqOp<scalar>());
279 
280  UFilmPatch_ = filmModel.Us().boundaryField()[filmPatchi];
281  filmModel.toPrimary(filmPatchi, UFilmPatch_);
282 
283  rhoFilmPatch_ = filmModel.rho().boundaryField()[filmPatchi];
284  filmModel.toPrimary(filmPatchi, rhoFilmPatch_);
285 
286  deltaFilmPatch_[primaryPatchi] =
287  filmModel.delta().boundaryField()[filmPatchi];
288  filmModel.toPrimary(filmPatchi, deltaFilmPatch_[primaryPatchi]);
289 }
290 
291 
292 template<class CloudType>
294 (
295  const label filmPatchi,
297 )
298 {
299  const volSurfaceMapping& map = filmModel.region().vsm();
300 
301  massParcelPatch_.setSize(filmModel.Uf().size(), Zero);
302 
303  const scalarField& massParcelPatch =
304  filmModel.cloudMassTrans().boundaryField()[filmPatchi];
305 
306  map.mapToField(massParcelPatch, massParcelPatch_);
307 
308  const scalarField& diameterParcelPatch =
309  filmModel.cloudDiameterTrans().boundaryField()[filmPatchi];
310 
311  diameterParcelPatch_.setSize(filmModel.Uf().size(), Zero);
312  map.mapToField(diameterParcelPatch, diameterParcelPatch_);
313 
314  UFilmPatch_.setSize(filmModel.Uf().size(), vector::zero);
315  map.mapToField(filmModel.Uf(), UFilmPatch_);
316 
317  rhoFilmPatch_.setSize(UFilmPatch_.size(), Zero);
318  map.mapToField(filmModel.rho(), rhoFilmPatch_);
319 
320  deltaFilmPatch_[filmPatchi].setSize(UFilmPatch_.size(), Zero);
321  map.mapToField(filmModel.h(), deltaFilmPatch_[filmPatchi]);
322 }
323 
324 
325 template<class CloudType>
327 (
328  parcelType& p,
329  const label filmFacei
330 ) const
331 {
332  // Set parcel properties
333  scalar vol = mathematical::pi/6.0*pow3(diameterParcelPatch_[filmFacei]);
334  p.d() = diameterParcelPatch_[filmFacei];
335  p.U() = UFilmPatch_[filmFacei];
336  p.rho() = rhoFilmPatch_[filmFacei];
337 
338  p.nParticle() = massParcelPatch_[filmFacei]/p.rho()/vol;
339 
340  if (minDiameter_ != -1)
341  {
342  if (p.d() < minDiameter_)
343  {
344  p.nParticle() = 0;
345  }
346  }
347 
348  if (ejectedParcelType_ >= 0)
349  {
350  p.typeId() = ejectedParcelType_;
351  }
352 }
353 
354 
355 template<class CloudType>
357 {
358  label nTrans0 =
359  this->template getModelProperty<label>("nParcelsTransferred");
360 
361  label nInject0 =
362  this->template getModelProperty<label>("nParcelsInjected");
363 
364  scalar massTransferred0 =
365  this->template getModelProperty<scalar>("massTransferred");
366 
367  label nTransTotal =
368  nTrans0 + returnReduce(nParcelsTransferred_, sumOp<label>());
369 
370  label nInjectTotal =
371  nInject0 + returnReduce(nParcelsInjected_, sumOp<label>());
372 
373  scalar massTransferredTotal =
374  massTransferred0 + returnReduce(totalMassTransferred_, sumOp<scalar>());
375 
376 
377  os << " Surface film:" << nl
378  << " - parcels absorbed = " << nTransTotal << nl
379  << " - mass absorbed = " << massTransferredTotal << nl
380  << " - parcels ejected = " << nInjectTotal << endl;
381 
382  if (this->writeTime())
383  {
384  this->setModelProperty("nParcelsTransferred", nTransTotal);
385  this->setModelProperty("nParcelsInjected", nInjectTotal);
386  this->setModelProperty("massTransferred", massTransferredTotal);
387 
388  nParcelsTransferred_ = 0;
389  nParcelsInjected_ = 0;
390  totalMassTransferred_ = 0;
391  }
392 }
393 
394 
395 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
396 
397 #include "SurfaceFilmModelNew.C"
398 
399 // ************************************************************************* //
Foam::SurfaceFilmModel::cacheFilmFields
virtual void cacheFilmFields(const label filmPatchi, const label primaryPatchi, const regionModels::surfaceFilmModels::surfaceFilmRegionModel &)
Cache the film fields in preparation for injection.
Definition: SurfaceFilmModel.C:267
Foam::regionModels::areaSurfaceFilmModels::liquidFilmBase
Definition: liquidFilmBase.H:60
mathematicalConstants.H
p
volScalarField & p
Definition: createFieldRefs.H:8
Foam::word
A class for handling words, derived from Foam::string.
Definition: word.H:65
Foam::regionModels::regionModel::active
Switch active() const
Return the active flag.
Definition: regionModelI.H:46
Foam::returnReduce
T returnReduce(const T &Value, const BinaryOp &bop, const int tag=Pstream::msgType(), const label comm=UPstream::worldComm)
Definition: PstreamReduceOps.H:94
Foam::polyBoundaryMesh
A polyBoundaryMesh is a polyPatch list with additional search methods and registered IO.
Definition: polyBoundaryMesh.H:63
Foam::Zero
static constexpr const zero Zero
Global zero (0)
Definition: zero.H:131
Foam::SurfaceFilmModel::g_
const dimensionedVector & g_
Gravitational acceleration constant.
Definition: SurfaceFilmModel.H:93
Foam::constant
Different types of constants.
Definition: atomicConstants.C:38
Foam::SurfaceFilmModel::injectionOffset_
scalar injectionOffset_
Injection offset position.
Definition: SurfaceFilmModel.H:101
Foam::SurfaceFilmModel::totalMassTransferred_
scalar totalMassTransferred_
Total mass transferred to the film.
Definition: SurfaceFilmModel.H:137
Foam::regionModels::surfaceFilmModels::surfaceFilmRegionModel::delta
virtual const volScalarField & delta() const =0
Return the film thickness [m].
Foam::SurfaceFilmModel::UFilmPatch_
Field< vector > UFilmPatch_
Film velocity / patch face.
Definition: SurfaceFilmModel.H:116
Foam::CloudSubModelBase
Base class for cloud sub-models.
Definition: CloudSubModelBase.H:51
Foam::SurfaceFilmModel::nParcelsTransferred_
label nParcelsTransferred_
Number of parcels transferred to the film model.
Definition: SurfaceFilmModel.H:128
Foam::polyMesh::boundaryMesh
const polyBoundaryMesh & boundaryMesh() const
Return boundary mesh.
Definition: polyMesh.H:444
Foam::endl
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:369
surfaceFilmRegionModel.H
Foam::regionModels::regionFaModel::vsm
const volSurfaceMapping & vsm() const
Return mapping between surface and volume fields.
Definition: regionFaModel.C:110
Foam::SurfaceFilmModel::~SurfaceFilmModel
virtual ~SurfaceFilmModel()
Destructor.
Definition: SurfaceFilmModel.C:115
Foam::SurfaceFilmModel::nParcelsInjected_
label nParcelsInjected_
Number of parcels injected from the film model.
Definition: SurfaceFilmModel.H:131
Foam::volSurfaceMapping::mapToField
void mapToField(const GeometricField< Type, faPatchField, areaMesh > &af, Field< Type > &f) const
Map surface field to field.
Definition: volSurfaceMapping.C:180
Foam::sumOp
Definition: ops.H:213
forAll
#define forAll(list, i)
Loop across all elements in list.
Definition: stdFoam.H:296
Foam::regionModels::surfaceFilmModels::surfaceFilmRegionModel::cloudDiameterTrans
virtual const volScalarField & cloudDiameterTrans() const =0
Return the parcel diameters originating from film.
Foam::regionModels::areaSurfaceFilmModels::liquidFilmBase::Uf
const areaVectorField & Uf() const
Access const reference Uf.
Definition: liquidFilmBase.C:501
Foam::regionModels::surfaceFilmModels::surfaceFilmRegionModel::Us
virtual const volVectorField & Us() const =0
Return the film surface velocity [m/s].
Foam::regionModels::regionModel::toPrimary
void toPrimary(const label regionPatchi, List< Type > &regionField) const
Convert a local region field to the primary region.
Definition: regionModelTemplates.C:147
Foam::SurfaceFilmModel::deltaFilmPatch_
Field< scalarField > deltaFilmPatch_
Film height of all film patches / patch face.
Definition: SurfaceFilmModel.H:122
Foam::SurfaceFilmModel< Foam::KinematicCloud< Cloud< basicKinematicCollidingParcel > > >::parcelType
Foam::KinematicCloud< Cloud< basicKinematicCollidingParcel > > ::parcelType parcelType
Convenience typedef to the cloud's parcel type.
Definition: SurfaceFilmModel.H:87
Foam::Field< vector >
Foam::regionModels::surfaceFilmModels::surfaceFilmRegionModel::cloudMassTrans
virtual const volScalarField & cloudMassTrans() const =0
Return the film mass available for transfer.
Foam::regionModels::surfaceFilmModels::surfaceFilmRegionModel
Base class for surface film models.
Definition: surfaceFilmRegionModel.H:55
Foam::fvMesh::magSf
const surfaceScalarField & magSf() const
Return cell face area magnitudes.
Definition: fvMeshGeometry.C:330
Foam::pow3
dimensionedScalar pow3(const dimensionedScalar &ds)
Definition: dimensionedScalar.C:89
Foam::SurfaceFilmModel
Templated wall surface film model class.
Definition: KinematicCloud.H:92
Foam::DSMCCloud::mesh
const fvMesh & mesh() const
Return reference to the mesh.
Definition: DSMCCloudI.H:44
Foam::polyBoundaryMesh::faceCells
UPtrList< const labelUList > faceCells() const
Return a list of faceCells for each patch.
Definition: polyBoundaryMesh.C:311
Foam::SurfaceFilmModel::inject
void inject(TrackCloudType &cloud)
Inject parcels into the cloud.
Definition: SurfaceFilmModel.C:180
Foam::SurfaceFilmModel::massParcelPatch_
scalarField massParcelPatch_
Parcel mass / patch face.
Definition: SurfaceFilmModel.H:110
Foam::regionModels::regionFaModel::active
const Switch & active() const
Return the active flag.
Definition: regionFaModelI.H:45
Foam::max
label max(const labelHashSet &set, label maxValue=labelMin)
Find the max value in labelHashSet, optionally limited by second argument.
Definition: hashSets.C:47
Foam::DSMCCloud
Templated base class for dsmc cloud.
Definition: DSMCCloud.H:71
Foam::fvMesh::C
const volVectorField & C() const
Return cell centres as volVectorField.
Definition: fvMeshGeometry.C:341
dict
dictionary dict
Definition: searchingEngine.H:14
Foam::dictionary
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:123
os
OBJstream os(runTime.globalPath()/outputName)
mesh
dynamicFvMesh & mesh
Definition: createDynamicFvMesh.H:6
liquidFilmBase.H
Foam::regionModels::surfaceFilmModels::surfaceFilmRegionModel::rho
virtual const volScalarField & rho() const =0
Return the film density [kg/m3].
Foam::regionModels::areaSurfaceFilmModels::liquidFilmBase::cloudMassTrans
virtual const volScalarField & cloudMassTrans() const =0
Return mass transfer source - Eulerian phase only.
Foam::SurfaceFilmModel::rhoFilmPatch_
scalarField rhoFilmPatch_
Film density / patch face.
Definition: SurfaceFilmModel.H:119
Foam::fvMesh
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:85
Foam::SurfaceFilmModel::minDiameter_
scalar minDiameter_
Minimum diameter particle injection.
Definition: SurfaceFilmModel.H:104
g
const uniformDimensionedVectorField & g
Definition: createFluidFields.H:26
Foam::regionModels::areaSurfaceFilmModels::liquidFilmBase::region
const regionFaModel & region() const
Access to this region.
Definition: liquidFilmBase.C:543
Foam::SurfaceFilmModel::setParcelProperties
virtual void setParcelProperties(parcelType &p, const label filmFacei) const
Set the individual parcel properties.
Definition: SurfaceFilmModel.C:327
Foam::maxEqOp
Definition: ops.H:80
Foam::regionModels::regionModel::primaryPatchIDs
const labelList & primaryPatchIDs() const
Return the list of patch IDs on the primary region coupled.
Definition: regionModelI.H:168
Foam::regionModels::areaSurfaceFilmModels::liquidFilmBase::rho
virtual const areaScalarField & rho() const =0
Access const reference rho.
Foam::fvMesh::boundary
const fvBoundaryMesh & boundary() const
Return reference to boundary mesh.
Definition: fvMesh.C:685
Foam::regionModels::areaSurfaceFilmModels::liquidFilmBase::addSources
virtual void addSources(const label patchi, const label facei, const scalar massSource, const vector &momentumSource, const scalar pressureSource, const scalar energySource=0)
Add sources.
Definition: liquidFilmBase.C:457
Foam::cloud
A cloud is a registry collection of lagrangian particles.
Definition: cloud.H:57
Foam::SurfaceFilmModel::injectParticles
void injectParticles(const label primaryPatchi, const labelList &injectorCellsPatch, TrackCloudType &cloud)
Inject particles in cloud.
Foam::constant::mathematical::pi
constexpr scalar pi(M_PI)
Foam::nl
constexpr char nl
Definition: Ostream.H:404
Foam::Vector< scalar >
Foam::volSurfaceMapping
Volume to surface and surface to volume mapping.
Definition: volSurfaceMapping.H:57
Foam::List< label >
Foam::regionModels::regionFaModel
Base class for area region models.
Definition: regionFaModel.H:113
SurfaceFilmModelNew.C
Foam::regionModels::areaSurfaceFilmModels::liquidFilmBase::h
const areaScalarField & h() const
Access const reference h.
Definition: liquidFilmBase.C:519
Foam::regionModels::regionFaModel::patchID
label patchID() const
Return patch ID.
Definition: regionFaModelI.H:138
Foam::SurfaceFilmModel::info
virtual void info(Ostream &os)
Write surface film info to stream.
Definition: SurfaceFilmModel.C:356
Foam::roots::type
type
Types of root.
Definition: Roots.H:54
Foam::SurfaceFilmModel::ejectedParcelType_
label ejectedParcelType_
Ejected parcel type label - id assigned to identify parcel for.
Definition: SurfaceFilmModel.H:98
Foam::regionModels::areaSurfaceFilmModels::liquidFilmBase::cloudDiameterTrans
virtual const volScalarField & cloudDiameterTrans() const =0
Return the parcel diameters originating from film to cloud.
Foam::fvMesh::time
const Time & time() const
Return the top-level database.
Definition: fvMesh.H:280
SurfaceFilmModel.H
patchId
label patchId(-1)
Foam::Ostream
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:56
Foam::SurfaceFilmModel::SurfaceFilmModel
SurfaceFilmModel(CloudType &owner)
Construct null from owner.
Definition: SurfaceFilmModel.C:39
Foam::PtrListOps::names
List< word > names(const UPtrList< T > &list, const UnaryMatchPredicate &matcher)
Foam::SurfaceFilmModel::diameterParcelPatch_
scalarField diameterParcelPatch_
Parcel diameter / patch face.
Definition: SurfaceFilmModel.H:113
Foam::regionModels::regionModel::intCoupledPatchIDs
const labelList & intCoupledPatchIDs() const
Return the list of patch IDs internally coupled with the.
Definition: regionModelI.H:175
Foam::GeometricField::boundaryField
const Boundary & boundaryField() const
Return const-reference to the boundary field.
Definition: GeometricFieldI.H:62
Foam::pos
dimensionedScalar pos(const dimensionedScalar &ds)
Definition: dimensionedScalar.C:177
Foam::fvMesh::Sf
const surfaceVectorField & Sf() const
Return cell face area vectors.
Definition: fvMeshGeometry.C:319