directionalPressureGradientExplicitSource.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) 2015 OpenCFD Ltd.
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 
27 #include "fvMatrices.H"
28 #include "DimensionedField.H"
29 #include "IFstream.H"
31 #include "transform.H"
32 #include "surfaceInterpolate.H"
33 #include "turbulenceModel.H"
36 #include "vectorFieldIOField.H"
37 #include "FieldField.H"
38 #include "emptyFvPatchFields.H"
39 
40 // * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
41 
42 namespace Foam
43 {
44 namespace fv
45 {
46  defineTypeNameAndDebug(directionalPressureGradientExplicitSource, 0);
47 
49  (
50  option,
51  directionalPressureGradientExplicitSource,
52  dictionary
53  );
54 }
55 }
56 
57 
58 // * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * * //
59 
60 namespace Foam
61 {
62  template<>
63  const char* Foam::NamedEnum
64  <
68  3
69  >::names[] =
70  {
71  "volumetricFlowRateTable",
72  "constant",
73  "DarcyForchheimer"
74  };
75 }
76 
77 const Foam::NamedEnum
78 <
80  3
82 
83 
84 // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
85 
87 {
88  const faceZone& fZone = mesh_.faceZones()[zoneID_];
89 
90  faceId_.setSize(fZone.size());
91  facePatchId_.setSize(fZone.size());
92 
93  label count = 0;
94  forAll(fZone, i)
95  {
96  label faceI = fZone[i];
97 
98  label faceId = -1;
99  label facePatchId = -1;
100  if (mesh_.isInternalFace(faceI))
101  {
102  faceId = faceI;
103  facePatchId = -1;
104  }
105  else
106  {
107  facePatchId = mesh_.boundaryMesh().whichPatch(faceI);
108  const polyPatch& pp = mesh_.boundaryMesh()[facePatchId];
109  if (isA<coupledPolyPatch>(pp))
110  {
111  if (refCast<const coupledPolyPatch>(pp).owner())
112  {
113  faceId = pp.whichFace(faceI);
114  }
115  else
116  {
117  faceId = -1;
118  }
119  }
120  else if (!isA<emptyPolyPatch>(pp))
121  {
122  faceId = faceI - pp.start();
123  }
124  else
125  {
126  faceId = -1;
127  facePatchId = -1;
128  }
129  }
130 
131  if (faceId >= 0)
132  {
133  facePatchId_[count] = facePatchId;
134  faceId_[count] = faceId;
135  count++;
136  }
137  }
138  faceId_.setSize(count);
139  facePatchId_.setSize(count);
140 }
141 
142 
144 (
145  const vectorField& gradP
146 ) const
147 {
148  // Only write on output time
149  if (mesh_.time().outputTime())
150  {
152  (
153  IOobject
154  (
155  name_ + "Properties",
156  mesh_.time().timeName(),
157  "uniform",
158  mesh_,
161  )
162  );
163  propsDict.add("gradient", gradP);
164  propsDict.regIOobject::write();
165  }
166 }
167 
168 
169 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
170 
173 (
174  const word& sourceName,
175  const word& modelType,
176  const dictionary& dict,
177  const fvMesh& mesh
178 )
179 :
180  cellSetOption(sourceName, modelType, dict, mesh),
181  model_(PressureDropModelNames_.read(coeffs_.lookup("model"))),
182  gradP0_(cells_.size(), vector::zero),
183  dGradP_(cells_.size(), vector::zero),
184  gradPporous_(cells_.size(), vector::zero),
185  flowDir_(coeffs_.lookup("flowDir")),
186  invAPtr_(NULL),
187  D_(0),
188  I_(0),
189  length_(0),
190  pressureDrop_(0),
191  flowRate_(),
192  faceZoneName_(coeffs_.lookup("faceZone")),
193  zoneID_(mesh_.faceZones().findZoneID(faceZoneName_)),
194  faceId_(),
195  facePatchId_(),
196  relaxationFactor_(coeffs_.lookupOrDefault<scalar>("relaxationFactor",0.3)),
197  cellFaceMap_(cells_.size(), -1)
198 {
199  coeffs_.lookup("fieldNames") >> fieldNames_;
200 
201  flowDir_ /= mag(flowDir_);
202 
203  if (fieldNames_.size() != 1)
204  {
206  << "Source can only be applied to a single field. Current "
207  << "settings are:" << fieldNames_ << exit(FatalError);
208  }
209 
210  if (zoneID_ < 0)
211  {
213  << type() << " " << this->name() << ": "
214  << " Unknown face zone name: " << faceZoneName_
215  << ". Valid face zones are: " << mesh_.faceZones().names()
216  << nl << exit(FatalError);
217  }
218 
219  if (model_ == pVolumetricFlowRateTable)
220  {
221  flowRate_ = interpolationTable<scalar>(coeffs_);
222  }
223  else if (model_ == pConstant)
224  {
225  coeffs_.lookup("pressureDrop") >> pressureDrop_;
226  }
227  else if (model_ == pDarcyForchheimer)
228  {
229  coeffs_.lookup("D") >> D_;
230  coeffs_.lookup("I") >> I_;
231  coeffs_.lookup("length") >> length_;
232  }
233  else
234  {
236  << "Did not find mode " << model_
237  << nl
238  << "Please set 'model' to one of "
239  << PressureDropModelNames_.toc()
240  << exit(FatalError);
241  }
242 
243  applied_.setSize(fieldNames_.size(), false);
244 
245  // Read the initial pressure gradient from file if it exists
246  IFstream propsFile
247  (
248  mesh_.time().timePath()/"uniform"/(name_ + "Properties")
249  );
250 
251  if (propsFile.good())
252  {
253  Info<< " Reading pressure gradient from file" << endl;
255  propsDict.lookup("gradient") >> gradP0_;
256  }
257 
258  Info<< " Initial pressure gradient = " << gradP0_ << nl << endl;
259 
260  initialise();
261 }
262 
263 
264 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
265 
267 (
269 )
270 {
271  const scalarField& rAU = invAPtr_().internalField();
272 
273  const scalarField magUn(mag(U), cells_);
274 
275  const surfaceScalarField& phi =
276  mesh().lookupObject<surfaceScalarField>("phi");
277 
278  switch (model_)
279  {
280  case pDarcyForchheimer:
281  {
282  if (phi.dimensions() == dimVelocity*dimArea)
283  {
284  const incompressible::turbulenceModel& turbModel =
285  mesh().lookupObject<incompressible::turbulenceModel>
286  (
288  );
289 
290  const scalarField nu(turbModel.nu(), cells_);
291 
292  gradPporous_ = -flowDir_*(D_*nu + I_*0.5*magUn)*magUn*length_;
293  break;
294  }
295  else
296  {
297  const compressible::turbulenceModel& turbModel =
298  mesh().lookupObject<compressible::turbulenceModel>
299  (
301  );
302 
303  const scalarField mu(turbModel.mu(),cells_);
304 
305  const scalarField rho(turbModel.rho(),cells_);
306 
307  gradPporous_ =
308  - flowDir_*(D_*mu + I_*0.5*rho*magUn)*magUn*length_;
309  }
310  }
311  case pConstant:
312  {
313  gradPporous_ = -flowDir_*pressureDrop_;
314  break;
315  }
316 
317  case pVolumetricFlowRateTable:
318  {
319  scalar volFlowRate = 0;
320  scalar totalphi = 0;
321 
322  forAll(faceId_, i)
323  {
324  label faceI = faceId_[i];
325  if (facePatchId_[i] != -1)
326  {
327  label patchI = facePatchId_[i];
328  totalphi += phi.boundaryField()[patchI][faceI];
329  }
330  else
331  {
332  totalphi += phi[faceI];
333  }
334  }
335  reduce(totalphi, sumOp<scalar>());
336 
337  if (phi.dimensions() == dimVelocity*dimArea)
338  {
339  volFlowRate = mag(totalphi);
340  }
341  else
342  {
343  const compressible::turbulenceModel& turbModel =
344  mesh().lookupObject<compressible::turbulenceModel>
345  (
347  );
348  const scalarField rho(turbModel.rho(),cells_);
349  const scalarField cv(mesh_.V(), cells_);
350  scalar rhoAve = gSumProd(rho, cv)/gSum(cv);
351  volFlowRate = mag(totalphi)/rhoAve;
352  }
353 
354  gradPporous_ = -flowDir_*flowRate_(volFlowRate);
355  break;
356  }
357  }
358 
359  const faceZone& fZone = mesh_.faceZones()[zoneID_];
360 
361  labelList meshToLocal(mesh_.nCells(), -1);
362  forAll(cells_, i)
363  {
364  meshToLocal[cells_[i]] = i;
365  }
366 
367  labelList faceToCellIndex(fZone.size(), -1);
368  const labelList& mc = fZone.masterCells();
369  const labelList& sc = fZone.slaveCells();
370 
371  forAll(fZone, i)
372  {
373  label masterCellI = mc[i];
374 
375  if (meshToLocal[masterCellI] != -1 && masterCellI != -1)
376  {
377  faceToCellIndex[i] = meshToLocal[masterCellI];
378  }
379  else if (meshToLocal[masterCellI] == -1)
380  {
382  << "Did not find cell " << masterCellI
383  << "in cellZone :" << cellSetName()
384  << exit(FatalError);
385  }
386  }
387 
388  // Accumulate 'upstream' velocity into cells
389  vectorField UfCells(cells_.size(), vector::zero);
390  scalarField UfCellWeights(cells_.size(), 0.0);
391 
392  const polyBoundaryMesh& pbm = mesh_.boundaryMesh();
393 
394  FieldField<Field, vector> upwindValues(pbm.size());
395 
396  forAll(U.boundaryField(), patchI)
397  {
398  const fvPatchVectorField& pf = U.boundaryField()[patchI];
399 
400  if (pf.coupled())
401  {
402  upwindValues.set(patchI, pf.patchNeighbourField());
403  }
404  else if (!isA<emptyFvPatchScalarField>(pf))
405  {
406  upwindValues.set(patchI, new vectorField(pf));
407  }
408  }
409 
410  forAll(fZone, i)
411  {
412  label faceI = fZone[i];
413  label cellId = faceToCellIndex[i];
414 
415  if (cellId != -1)
416  {
417  label sourceCellId = sc[i];
418  if (mesh_.isInternalFace(faceI))
419  {
420  scalar w = mesh_.magSf()[faceI];
421  UfCells[cellId] += U[sourceCellId]*w;
422  UfCellWeights[cellId] += w;
423  }
424  else if (fZone.flipMap()[i])
425  {
426  label patchI = pbm.patchID()[faceI-mesh_.nInternalFaces()];
427  label localFaceI = pbm[patchI].whichFace(faceI);
428 
429  scalar w = mesh_.magSf().boundaryField()[patchI][localFaceI];
430 
431  if (upwindValues.set(patchI))
432  {
433  UfCells[cellId] += upwindValues[patchI][localFaceI]*w;
434  UfCellWeights[cellId] += w;
435  }
436  }
437  }
438  }
439 
440  UfCells /= UfCellWeights;
441 
442  forAll(cells_, i)
443  {
444  label cellI = cells_[i];
445 
446  const vector Ufnorm = UfCells[i]/mag(UfCells[i]);
447 
448  const tensor D = rotationTensor(Ufnorm, flowDir_);
449 
450  dGradP_[i] +=
451  relaxationFactor_*
452  (
453  (D & UfCells[i]) - U[cellI]
454  )/rAU[cellI];
455 
456 
457  if (debug)
458  {
459  Info<< "Difference mag(U) = "
460  << mag(UfCells[i]) - mag(U[cellI])
461  << endl;
462  Info<< "Pressure drop in flowDir direction : "
463  << gradPporous_[i] << endl;
464  Info<< "UfCell:= " << UfCells[i] << "U : " << U[cellI] << endl;
465  }
466  }
467 
468  writeProps(gradP0_ + dGradP_);
469 }
470 
471 
473 (
474  fvMatrix<vector>& eqn,
475  const label fieldI
476 )
477 {
479  (
480  IOobject
481  (
482  name_ + fieldNames_[fieldI] + "Sup",
483  mesh_.time().timeName(),
484  mesh_,
487  ),
488  mesh_,
490  );
491 
492  UIndirectList<vector>(Su, cells_) = gradP0_ + dGradP_ + gradPporous_;
493 
494  eqn += Su;
495 }
496 
497 
499 (
500  const volScalarField& rho,
501  fvMatrix<vector>& eqn,
502  const label fieldI
503 )
504 {
505  this->addSup(eqn, fieldI);
506 }
507 
508 
510 (
511  fvMatrix<vector>& eqn,
512  const label
513 )
514 {
515  if (invAPtr_.empty())
516  {
517  invAPtr_.reset
518  (
519  new volScalarField
520  (
521  IOobject
522  (
523  name_ + ":invA",
524  mesh_.time().timeName(),
525  mesh_,
528  ),
529  1.0/eqn.A()
530  )
531  );
532  }
533  else
534  {
535  invAPtr_() = 1.0/eqn.A();
536  }
537 
538  gradP0_ += dGradP_;
539  dGradP_ = vector::zero;
540 }
541 
542 
543 // ************************************************************************* //
Foam::fvPatchField
Abstract base class with a fat-interface to all derived classes covering all possible ways in which t...
Definition: fvPatchField.H:65
Foam::IOdictionary
IOdictionary is derived from dictionary and IOobject to give the dictionary automatic IO functionalit...
Definition: IOdictionary.H:53
Foam::Tensor
Templated 3D tensor derived from VectorSpace adding construction from 9 components,...
Definition: complexI.H:224
Foam::IOobject
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
Definition: IOobject.H:91
w
volScalarField w(IOobject("w", runTime.timeName(), mesh, IOobject::READ_IF_PRESENT, IOobject::NO_WRITE), mesh, dimensionedScalar("w", dimensionSet(0, 0, 0, 0, 0, 0, 0), 0.0))
Foam::Vector< scalar >::zero
static const Vector zero
Definition: Vector.H:80
Foam::word
A class for handling words, derived from string.
Definition: word.H:59
Foam::fv::cellSetOption
Cell-set options abtract base class. Provides a base set of controls, e.g.
Definition: cellSetOption.H:71
Foam::FieldField
Generic field type.
Definition: FieldField.H:51
Foam::polyBoundaryMesh
Foam::polyBoundaryMesh.
Definition: polyBoundaryMesh.H:60
Foam::constant::physicoChemical::mu
const dimensionedScalar mu
Atomic mass unit.
Definition: createFields.H:13
FieldField.H
forAll
#define forAll(list, i)
Loop across all elements in list.
Definition: UList.H:406
Foam::dimVelocity
const dimensionSet dimVelocity
Foam::IFstream
Input from file stream.
Definition: IFstream.H:81
DimensionedField.H
phi
surfaceScalarField & phi
Definition: setRegionFluidFields.H:8
Foam::fvMatrix::dimensions
const dimensionSet & dimensions() const
Definition: fvMatrix.H:286
Foam::fv::directionalPressureGradientExplicitSource::constrain
virtual void constrain(fvMatrix< vector > &eqn, const label fieldI)
Set 1/A coefficient.
Definition: directionalPressureGradientExplicitSource.C:510
turbulentTransportModel.H
Foam::turbulenceModel::propertiesName
static const word propertiesName
Default name of the turbulence properties dictionary.
Definition: turbulenceModel.H:97
Foam::fv::directionalPressureGradientExplicitSource::zoneID_
label zoneID_
Id for the face zone.
Definition: directionalPressureGradientExplicitSource.H:164
Foam::polyMesh::boundaryMesh
const polyBoundaryMesh & boundaryMesh() const
Return boundary mesh.
Definition: polyMesh.H:421
Foam::endl
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:251
Foam::gSum
Type gSum(const FieldField< Field, Type > &f)
Definition: FieldFieldFunctions.C:564
Foam::mag
dimensioned< scalar > mag(const dimensioned< Type > &)
Foam::IOobject::NO_WRITE
@ NO_WRITE
Definition: IOobject.H:118
Foam::fv::option::mesh_
const fvMesh & mesh_
Reference to the mesh database.
Definition: fvOption.H:78
U
U
Definition: pEqn.H:46
Foam::vectorField
Field< vector > vectorField
Specialisation of Field<T> for vector.
Definition: primitiveFieldsFwd.H:49
Foam::polyMesh::faceZones
const faceZoneMesh & faceZones() const
Return face zone mesh.
Definition: polyMesh.H:463
fvMatrices.H
A special matrix type and solver, designed for finite volume solutions of scalar equations.
nu
volScalarField & nu
Definition: readMechanicalProperties.H:179
Foam::polyBoundaryMesh::patchID
const labelList & patchID() const
Per boundary face label the patch index.
Definition: polyBoundaryMesh.C:399
Foam::fv::directionalPressureGradientExplicitSource::directionalPressureGradientExplicitSource
directionalPressureGradientExplicitSource(const directionalPressureGradientExplicitSource &)
Disallow default bitwise copy construct.
Foam::fvPatchField::coupled
virtual bool coupled() const
Return true if this patch field is coupled.
Definition: fvPatchField.H:342
Foam::reduce
void reduce(const List< UPstream::commsStruct > &comms, T &Value, const BinaryOp &bop, const int tag, const label comm)
Definition: PstreamReduceOps.H:43
Foam::fv::directionalPressureGradientExplicitSource::PressureDropModelNames_
static const NamedEnum< pressureDropModel, 3 > PressureDropModelNames_
Definition: directionalPressureGradientExplicitSource.H:125
Foam::fv::directionalPressureGradientExplicitSource::initialise
void initialise()
Init.
Definition: directionalPressureGradientExplicitSource.C:86
Foam::dimArea
const dimensionSet dimArea(sqr(dimLength))
Definition: dimensionSets.H:57
Foam::label
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
Foam::Field
Pre-declare SubField and related Field type.
Definition: Field.H:57
Foam::fvc::Su
tmp< GeometricField< Type, fvPatchField, volMesh > > Su(const GeometricField< Type, fvPatchField, volMesh > &su, const GeometricField< Type, fvPatchField, volMesh > &vf)
Definition: fvcSup.C:44
Foam::faceZone
A subset of mesh faces organised as a primitive patch.
Definition: faceZone.H:64
vectorFieldIOField.H
Foam::IOobject::NO_READ
@ NO_READ
Definition: IOobject.H:111
Foam::nl
static const char nl
Definition: Ostream.H:260
Foam::Info
messageStream Info
directionalPressureGradientExplicitSource.H
Foam::polyPatch
A patch is a list of labels that address the faces in the global face list.
Definition: polyPatch.H:66
faceId
label faceId(-1)
Foam::fv::directionalPressureGradientExplicitSource::facePatchId_
labelList facePatchId_
Local list of patch ID per face.
Definition: directionalPressureGradientExplicitSource.H:170
Foam::faceZone::slaveCells
const labelList & slaveCells() const
Return labels of slave cells.
Definition: faceZone.C:342
propsDict
IOdictionary propsDict(IOobject("particleTrackProperties", runTime.constant(), mesh, IOobject::MUST_READ_IF_MODIFIED))
Foam::polyBoundaryMesh::whichPatch
label whichPatch(const label faceIndex) const
Return patch index for a given face label.
Definition: polyBoundaryMesh.C:703
emptyFvPatchFields.H
IFstream.H
dict
dictionary dict
Definition: searchingEngine.H:14
Foam::FatalError
error FatalError
Foam::dictionary
A list of keyword definitions, which are a keyword followed by any number of values (e....
Definition: dictionary.H:137
mesh
dynamicFvMesh & mesh
Definition: createDynamicFvMesh.H:18
addToRunTimeSelectionTable.H
Macros for easy insertion into run-time selection tables.
Foam::dimensioned
Generic dimensioned Type class.
Definition: dimensionedScalarFwd.H:41
Foam::fvMatrix::A
tmp< volScalarField > A() const
Return the central coefficient.
Definition: fvMatrix.C:734
surfaceInterpolate.H
Surface Interpolation.
gradP
dimensionedVector gradP("gradP", dimensionSet(0, 1, -2, 0, 0), vector::zero)
Foam::fvMesh
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:78
Foam
Namespace for OpenFOAM.
Definition: combustionModel.C:30
Foam::polyPatch::start
label start() const
Return start label of this patch in the polyMesh face list.
Definition: polyPatch.H:312
Foam::fv::directionalPressureGradientExplicitSource::pressureDropModel
pressureDropModel
Modes of pressure drop.
Definition: directionalPressureGradientExplicitSource.H:113
cellId
label cellId
Definition: interrogateWallPatches.H:67
Foam::exit
errorManipArg< error, int > exit(error &err, const int errNo=1)
Definition: errorManip.H:124
Foam::fvPatchField::patchNeighbourField
virtual tmp< Field< Type > > patchNeighbourField() const
Return patchField on the opposite patch of a coupled patch.
Definition: fvPatchField.H:408
rho
rho
Definition: pEqn.H:3
rAU
volScalarField rAU("rAU", 1.0/UEqn().A())
fv
labelList fv(nPoints)
Foam::fv::defineTypeNameAndDebug
defineTypeNameAndDebug(option, 0)
Foam::List::setSize
void setSize(const label)
Reset size of List.
Foam::faceZone::masterCells
const labelList & masterCells() const
Return labels of master cells (cells next to the master face.
Definition: faceZone.C:331
FatalErrorInFunction
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition: error.H:318
Foam::fv::addToRunTimeSelectionTable
addToRunTimeSelectionTable(option, fixedTemperatureConstraint, dictionary)
Foam::polyPatch::whichFace
label whichFace(const label l) const
Return label of face in patch from global face label.
Definition: polyPatch.H:389
Foam::sumOp
Definition: ops.H:162
Foam::fv::directionalPressureGradientExplicitSource::addSup
virtual void addSup(fvMatrix< vector > &eqn, const label fieldI)
Add explicit contribution to momentum equation.
Definition: directionalPressureGradientExplicitSource.C:473
Foam::Vector< scalar >
Foam::ThermalDiffusivity
Templated wrapper class to provide compressible turbulence models thermal diffusivity based thermal t...
Definition: ThermalDiffusivity.H:48
Foam::List
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
Definition: HashTable.H:59
Foam::primitiveMesh::isInternalFace
bool isInternalFace(const label faceIndex) const
Return true if given face label is internal to the mesh.
Definition: primitiveMeshI.H:70
Foam::TurbulenceModel::nu
tmp< volScalarField > nu() const
Return the laminar viscosity.
Definition: TurbulenceModel.H:160
Foam::fv::directionalPressureGradientExplicitSource::writeProps
void writeProps(const vectorField &gradP) const
Write the pressure gradient to file (for restarts etc)
Definition: directionalPressureGradientExplicitSource.C:144
Foam::PtrList::size
label size() const
Return the number of elements in the PtrList.
Definition: PtrListI.H:32
Foam::fvMatrix
A special matrix type and solver, designed for finite volume solutions of scalar equations....
Definition: fvPatchField.H:68
Foam::fv::directionalPressureGradientExplicitSource::faceId_
labelList faceId_
Local list of face IDs.
Definition: directionalPressureGradientExplicitSource.H:167
Foam::UIndirectList
A List with indirect addressing.
Definition: fvMatrix.H:106
Foam::IncompressibleTurbulenceModel
Templated abstract base class for single-phase incompressible turbulence models.
Definition: IncompressibleTurbulenceModel.H:52
Foam::interpolationTable< scalar >
Foam::List::size
void size(const label)
Override size to be inconsistent with allocated storage.
Foam::gSumProd
scalar gSumProd(const UList< Type > &f1, const UList< Type > &f2, const label comm)
Definition: FieldFunctions.C:554
transform.H
3D tensor transformation operations.
Foam::rotationTensor
tensor rotationTensor(const vector &n1, const vector &n2)
Definition: transform.H:46
Foam::IOstream::good
bool good() const
Return true if next operation might succeed.
Definition: IOstream.H:333
Foam::fv::directionalPressureGradientExplicitSource::correct
virtual void correct(volVectorField &U)
Correct the pressure gradient.
Definition: directionalPressureGradientExplicitSource.C:267
Foam::type
fileName::Type type(const fileName &)
Return the file type: DIRECTORY or FILE.
Definition: POSIX.C:588
Foam::dimVolume
const dimensionSet dimVolume(pow3(dimLength))
Definition: dimensionSets.H:58
Foam::GeometricField
Generic GeometricField class.
Definition: surfaceFieldsFwd.H:52
Foam::faceZone::flipMap
const boolList & flipMap() const
Return face flip map.
Definition: faceZone.H:249
turbulenceModel.H
Foam::name
word name(const complex &)
Return a string representation of a complex.
Definition: complex.C:47
turbulentFluidThermoModel.H
Foam::dictionary::null
static const dictionary null
Null dictionary.
Definition: dictionary.H:193
Foam::NamedEnum
Initialise the NamedEnum HashTable from the static list of names.
Definition: NamedEnum.H:52
Foam::DimensionedField
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
Definition: DimensionedField.H:51