rotorDiskSource.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-2016 OpenFOAM Foundation
9  Copyright (C) 2018-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 "rotorDiskSource.H"
31 #include "trimModel.H"
32 #include "fvMatrices.H"
33 #include "geometricOneField.H"
34 #include "syncTools.H"
35 #include "unitConversion.H"
36 
37 using namespace Foam::constant;
38 
39 // * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
40 
41 namespace Foam
42 {
43  namespace fv
44  {
45  defineTypeNameAndDebug(rotorDiskSource, 0);
46  addToRunTimeSelectionTable(option, rotorDiskSource, dictionary);
47  }
48 }
49 
50 
51 const Foam::Enum
52 <
54 >
56 ({
57  { geometryModeType::gmAuto, "auto" },
58  { geometryModeType::gmSpecified, "specified" },
59 });
60 
61 
62 const Foam::Enum
63 <
65 >
67 ({
68  { inletFlowType::ifFixed, "fixed" },
69  { inletFlowType::ifSurfaceNormal, "surfaceNormal" },
70  { inletFlowType::ifLocal, "local" },
71 });
72 
73 
74 // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
75 
77 {
78  // Set inflow type
79  switch (selectionMode())
80  {
81  case smCellSet:
82  case smCellZone:
83  case smAll:
84  {
85  // Set the profile ID for each blade section
86  profiles_.connectBlades(blade_.profileName(), blade_.profileID());
87  switch (inletFlow_)
88  {
89  case ifFixed:
90  {
91  coeffs_.readEntry("inletVelocity", inletVelocity_);
92  break;
93  }
94  case ifSurfaceNormal:
95  {
96  scalar UIn(coeffs_.get<scalar>("inletNormalVelocity"));
97  inletVelocity_ = -coordSys_.e3()*UIn;
98  break;
99  }
100  case ifLocal:
101  {
102  break;
103  }
104  default:
105  {
107  << "Unknown inlet velocity type" << abort(FatalError);
108  }
109  }
110 
111 
112  break;
113  }
114  default:
115  {
117  << "Source cannot be used with '"
118  << selectionModeTypeNames_[selectionMode()]
119  << "' mode. Please use one of: " << nl
120  << selectionModeTypeNames_[smCellSet] << nl
121  << selectionModeTypeNames_[smCellZone] << nl
122  << selectionModeTypeNames_[smAll]
123  << exit(FatalError);
124  }
125  }
126 }
127 
128 
130 {
131  area_ = 0.0;
132 
133  static const scalar tol = 0.8;
134 
135  const label nInternalFaces = mesh_.nInternalFaces();
136  const polyBoundaryMesh& pbm = mesh_.boundaryMesh();
137  const vectorField& Sf = mesh_.Sf();
138  const scalarField& magSf = mesh_.magSf();
139 
140  vector n = Zero;
141 
142  // Calculate cell addressing for selected cells
143  labelList cellAddr(mesh_.nCells(), -1);
144  labelUIndList(cellAddr, cells_) = identity(cells_.size());
145  labelList nbrFaceCellAddr(mesh_.nFaces() - nInternalFaces, -1);
146  forAll(pbm, patchi)
147  {
148  const polyPatch& pp = pbm[patchi];
149 
150  if (pp.coupled())
151  {
152  forAll(pp, i)
153  {
154  label facei = pp.start() + i;
155  label nbrFacei = facei - nInternalFaces;
156  label own = mesh_.faceOwner()[facei];
157  nbrFaceCellAddr[nbrFacei] = cellAddr[own];
158  }
159  }
160  }
161 
162  // Correct for parallel running
163  syncTools::swapBoundaryFaceList(mesh_, nbrFaceCellAddr);
164 
165  // Add internal field contributions
166  for (label facei = 0; facei < nInternalFaces; facei++)
167  {
168  const label own = cellAddr[mesh_.faceOwner()[facei]];
169  const label nbr = cellAddr[mesh_.faceNeighbour()[facei]];
170 
171  if ((own != -1) && (nbr == -1))
172  {
173  vector nf = Sf[facei]/magSf[facei];
174 
175  if ((nf & axis) > tol)
176  {
177  area_[own] += magSf[facei];
178  n += Sf[facei];
179  }
180  }
181  else if ((own == -1) && (nbr != -1))
182  {
183  vector nf = Sf[facei]/magSf[facei];
184 
185  if ((-nf & axis) > tol)
186  {
187  area_[nbr] += magSf[facei];
188  n -= Sf[facei];
189  }
190  }
191  }
192 
193 
194  // Add boundary contributions
195  forAll(pbm, patchi)
196  {
197  const polyPatch& pp = pbm[patchi];
198  const vectorField& Sfp = mesh_.Sf().boundaryField()[patchi];
199  const scalarField& magSfp = mesh_.magSf().boundaryField()[patchi];
200 
201  if (pp.coupled())
202  {
203  forAll(pp, j)
204  {
205  const label facei = pp.start() + j;
206  const label own = cellAddr[mesh_.faceOwner()[facei]];
207  const label nbr = nbrFaceCellAddr[facei - nInternalFaces];
208  const vector nf = Sfp[j]/magSfp[j];
209 
210  if ((own != -1) && (nbr == -1) && ((nf & axis) > tol))
211  {
212  area_[own] += magSfp[j];
213  n += Sfp[j];
214  }
215  }
216  }
217  else
218  {
219  forAll(pp, j)
220  {
221  const label facei = pp.start() + j;
222  const label own = cellAddr[mesh_.faceOwner()[facei]];
223  const vector nf = Sfp[j]/magSfp[j];
224 
225  if ((own != -1) && ((nf & axis) > tol))
226  {
227  area_[own] += magSfp[j];
228  n += Sfp[j];
229  }
230  }
231  }
232  }
233 
234  if (correct)
235  {
236  reduce(n, sumOp<vector>());
237  axis = n/mag(n);
238  }
239 
240  if (debug)
241  {
243  (
244  IOobject
245  (
246  name_ + ":area",
247  mesh_.time().timeName(),
248  mesh_,
251  ),
252  mesh_,
254  );
255  UIndirectList<scalar>(area.primitiveField(), cells_) = area_;
256 
257  Info<< type() << ": " << name_ << " writing field " << area.name()
258  << endl;
259 
260  area.write();
261  }
262 }
263 
264 
266 {
267  // Construct the local rotor coordinate system
268  vector origin(Zero);
269  vector axis(Zero);
270  vector refDir(Zero);
271 
272  geometryModeType gm =
273  geometryModeTypeNames_.get("geometryMode", coeffs_);
274 
275  switch (gm)
276  {
277  case gmAuto:
278  {
279  // Determine rotation origin (cell volume weighted)
280  scalar sumV = 0.0;
281  const scalarField& V = mesh_.V();
282  const vectorField& C = mesh_.C();
283  forAll(cells_, i)
284  {
285  const label celli = cells_[i];
286  sumV += V[celli];
287  origin += V[celli]*C[celli];
288  }
289  reduce(origin, sumOp<vector>());
290  reduce(sumV, sumOp<scalar>());
291  origin /= sumV;
292 
293  // Determine first radial vector
294  vector dx1(Zero);
295  scalar magR = -GREAT;
296  forAll(cells_, i)
297  {
298  const label celli = cells_[i];
299  vector test = C[celli] - origin;
300  if (mag(test) > magR)
301  {
302  dx1 = test;
303  magR = mag(test);
304  }
305  }
306  reduce(dx1, maxMagSqrOp<vector>());
307  magR = mag(dx1);
308 
309  // Determine second radial vector and cross to determine axis
310  forAll(cells_, i)
311  {
312  const label celli = cells_[i];
313  vector dx2 = C[celli] - origin;
314  if (mag(dx2) > 0.5*magR)
315  {
316  axis = dx1 ^ dx2;
317  if (mag(axis) > SMALL)
318  {
319  break;
320  }
321  }
322  }
323  reduce(axis, maxMagSqrOp<vector>());
324  axis.normalise();
325 
326  // Correct the axis direction using a point above the rotor
327  {
328  vector pointAbove(coeffs_.get<vector>("pointAbove"));
329  vector dir = pointAbove - origin;
330  dir.normalise();
331  if ((dir & axis) < 0)
332  {
333  axis *= -1.0;
334  }
335  }
336 
337  coeffs_.readEntry("refDirection", refDir);
338 
339  // Set the face areas and apply correction to calculated axis
340  // e.g. if cellZone is more than a single layer in thickness
341  setFaceArea(axis, true);
342 
343  break;
344  }
345  case gmSpecified:
346  {
347  coeffs_.readEntry("origin", origin);
348  coeffs_.readEntry("axis", axis);
349  coeffs_.readEntry("refDirection", refDir);
350 
351  setFaceArea(axis, false);
352 
353  break;
354  }
355  default:
356  {
358  << "Unknown geometryMode " << geometryModeTypeNames_[gm]
359  << ". Available geometry modes include "
360  << geometryModeTypeNames_
361  << exit(FatalError);
362  }
363  }
364 
365  coordSys_ = coordSystem::cylindrical(origin, axis, refDir);
366 
367  const scalar sumArea = gSum(area_);
368  const scalar diameter = Foam::sqrt(4.0*sumArea/mathematical::pi);
369  Info<< " Rotor gometry:" << nl
370  << " - disk diameter = " << diameter << nl
371  << " - disk area = " << sumArea << nl
372  << " - origin = " << coordSys_.origin() << nl
373  << " - r-axis = " << coordSys_.e1() << nl
374  << " - psi-axis = " << coordSys_.e2() << nl
375  << " - z-axis = " << coordSys_.e3() << endl;
376 }
377 
378 
380 {
381  const pointUIndList cc(mesh_.C(), cells_);
382 
383  // Optional: for later transform(), invTransform()
385 
386  forAll(cells_, i)
387  {
388  if (area_[i] > ROOTVSMALL)
389  {
390  // Position in (planar) rotor coordinate system
391  x_[i] = coordSys_.localPosition(cc[i]);
392 
393  // Cache max radius
394  rMax_ = max(rMax_, x_[i].x());
395 
396  // Swept angle relative to rDir axis [radians] in range 0 -> 2*pi
397  scalar psi = x_[i].y();
398 
399  // Blade flap angle [radians]
400  scalar beta =
401  flap_.beta0 - flap_.beta1c*cos(psi) - flap_.beta2s*sin(psi);
402 
403  // Determine rotation tensor to convert from planar system into the
404  // rotor cone system
405  scalar c = cos(beta);
406  scalar s = sin(beta);
407  Rcone_[i] = tensor(c, 0, -s, 0, 1, 0, s, 0, c);
408  }
409  }
410 }
411 
412 
414 (
415  const volVectorField& U
416 ) const
417 {
418  switch (inletFlow_)
419  {
420  case ifFixed:
421  case ifSurfaceNormal:
422  {
423  return tmp<vectorField>::New(mesh_.nCells(), inletVelocity_);
424 
425  break;
426  }
427  case ifLocal:
428  {
429  return U.primitiveField();
430 
431  break;
432  }
433  default:
434  {
436  << "Unknown inlet flow specification" << abort(FatalError);
437  }
438  }
439 
440  return tmp<vectorField>::New(mesh_.nCells(), Zero);
441 }
442 
443 
444 // * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * * //
445 
447 (
448  const word& name,
449  const word& modelType,
450  const dictionary& dict,
451  const fvMesh& mesh
452 
453 )
454 :
455  cellSetOption(name, modelType, dict, mesh),
456  rhoRef_(1.0),
457  omega_(0.0),
458  nBlades_(0),
459  inletFlow_(ifLocal),
460  inletVelocity_(Zero),
461  tipEffect_(1.0),
462  flap_(),
463  x_(cells_.size(), Zero),
464  Rcone_(cells_.size(), I),
465  area_(cells_.size(), Zero),
466  coordSys_(),
467  rMax_(0.0),
468  trim_(trimModel::New(*this, coeffs_)),
469  blade_(coeffs_.subDict("blade")),
470  profiles_(coeffs_.subDict("profiles"))
471 {
472  read(dict);
473 }
474 
475 
476 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
477 
479 (
480  fvMatrix<vector>& eqn,
481  const label fieldi
482 )
483 {
484  volVectorField force
485  (
486  IOobject
487  (
488  name_ + ":rotorForce",
489  mesh_.time().timeName(),
490  mesh_
491  ),
492  mesh_,
494  );
495 
496  // Read the reference density for incompressible flow
497  coeffs_.readEntry("rhoRef", rhoRef_);
498 
499  const vectorField Uin(inflowVelocity(eqn.psi()));
500  trim_->correct(Uin, force);
501  calculate(geometricOneField(), Uin, trim_->thetag(), force);
502 
503  // Add source to rhs of eqn
504  eqn -= force;
505 
506  if (mesh_.time().writeTime())
507  {
508  force.write();
509  }
510 }
511 
512 
514 (
515  const volScalarField& rho,
516  fvMatrix<vector>& eqn,
517  const label fieldi
518 )
519 {
520  volVectorField force
521  (
522  IOobject
523  (
524  name_ + ":rotorForce",
525  mesh_.time().timeName(),
526  mesh_
527  ),
528  mesh_,
530  );
531 
532  const vectorField Uin(inflowVelocity(eqn.psi()));
533  trim_->correct(rho, Uin, force);
534  calculate(rho, Uin, trim_->thetag(), force);
535 
536  // Add source to rhs of eqn
537  eqn -= force;
538 
539  if (mesh_.time().writeTime())
540  {
541  force.write();
542  }
543 }
544 
545 
547 {
549  {
550  coeffs_.readEntry("fields", fieldNames_);
551  applied_.setSize(fieldNames_.size(), false);
552 
553  // Read coordinate system/geometry invariant properties
554  omega_ = rpmToRads(coeffs_.get<scalar>("rpm"));
555 
556  coeffs_.readEntry("nBlades", nBlades_);
557 
558  inletFlowTypeNames_.readEntry("inletFlowType", coeffs_, inletFlow_);
559 
560  coeffs_.readEntry("tipEffect", tipEffect_);
561 
562  const dictionary& flapCoeffs(coeffs_.subDict("flapCoeffs"));
563  flap_.beta0 = degToRad(flapCoeffs.get<scalar>("beta0"));
564  flap_.beta1c = degToRad(flapCoeffs.get<scalar>("beta1c"));
565  flap_.beta2s = degToRad(flapCoeffs.get<scalar>("beta2s"));
566 
567 
568  // Create coordinate system
569  createCoordinateSystem();
570 
571  // Read coordinate system dependent properties
572  checkData();
573 
574  constructGeometry();
575 
576  trim_->read(coeffs_);
577 
578  if (debug)
579  {
580  writeField("thetag", trim_->thetag()(), true);
581  writeField("faceArea", area_, true);
582  }
583 
584  return true;
585  }
586 
587  return false;
588 }
589 
590 
591 // ************************************************************************* //
Foam::expressions::patchExpr::debug
int debug
Static debugging option.
Foam::addToRunTimeSelectionTable
addToRunTimeSelectionTable(decompositionMethod, kahipDecomp, dictionary)
Foam::fv::rotorDiskSource::checkData
void checkData()
Check data.
Definition: rotorDiskSource.C:76
Foam::IOobject::NO_WRITE
Definition: IOobject.H:130
Foam::fv::rotorDiskSource::read
virtual bool read(const dictionary &dict)
Read source dictionary.
Definition: rotorDiskSource.C:546
Foam::IOobject
Defines the attributes of an object for which implicit objectRegistry management is supported,...
Definition: IOobject.H:104
Foam::Enum
Enum is a wrapper around a list of names/values that represent particular enumeration (or int) values...
Definition: IOstreamOption.H:57
Foam::word
A class for handling words, derived from Foam::string.
Definition: word.H:62
Foam::fv::cellSetOption
Intermediate abstract class for handling cell-set options for the derived fvOptions.
Definition: cellSetOption.H:163
s
gmvFile<< "tracers "<< particles.size()<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().x()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().y()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().z()<< " ";}gmvFile<< nl;forAll(lagrangianScalarNames, i){ word name=lagrangianScalarNames[i];IOField< scalar > s(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
Definition: gmvOutputSpray.H:25
Foam::fv::rotorDiskSource::createCoordinateSystem
void createCoordinateSystem()
Create the coordinate system.
Definition: rotorDiskSource.C:265
Foam::polyBoundaryMesh
A polyBoundaryMesh is a polyPatch list with additional search methods and registered IO.
Definition: polyBoundaryMesh.H:62
Foam::fv::rotorDiskSource::setFaceArea
void setFaceArea(vector &axis, const bool correct)
Set the face areas per cell, and optionally correct the rotor axis.
Definition: rotorDiskSource.C:129
Foam::tmp
A class for managing temporary objects.
Definition: PtrList.H:61
Foam::Zero
static constexpr const zero Zero
Global zero (0)
Definition: zero.H:131
Foam::constant
Different types of constants.
Definition: atomicConstants.C:38
Foam::checkData
label checkData(const fvMesh &mesh, const instantList &timeDirs, wordList &objectNames)
Check if fields are good to use (available at all times)
Foam::sin
dimensionedScalar sin(const dimensionedScalar &ds)
Definition: dimensionedScalar.C:264
Foam::fvMatrix::dimensions
const dimensionSet & dimensions() const
Definition: fvMatrix.H:292
Foam::read
bool read(const char *buf, int32_t &val)
Same as readInt32.
Definition: int32.H:108
Foam::polyPatch::coupled
virtual bool coupled() const
Return true if this patch is geometrically coupled (i.e. faces and.
Definition: polyPatch.H:329
Foam::geometricOneField
A class representing the concept of a GeometricField of 1 used to avoid unnecessary manipulations for...
Definition: geometricOneField.H:55
unitConversion.H
Unit conversion functions.
Foam::syncTools::swapBoundaryFaceList
static void swapBoundaryFaceList(const polyMesh &mesh, UList< T > &faceValues)
Swap coupled boundary face values. Uses eqOp.
Definition: syncTools.H:439
Foam::fv::rotorDiskSource::geometryModeType
geometryModeType
Options for the geometry type specification.
Definition: rotorDiskSource.H:339
Foam::endl
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:350
Foam::gSum
Type gSum(const FieldField< Field, Type > &f)
Definition: FieldFieldFunctions.C:594
Foam::Vector::normalise
Vector< Cmpt > & normalise()
Normalise the vector by its magnitude.
Definition: VectorI.H:123
rho
rho
Definition: readInitialConditions.H:88
syncTools.H
Foam::fvMatrix::psi
const GeometricField< Type, fvPatchField, volMesh > & psi() const
Definition: fvMatrix.H:287
Foam::sumOp
Definition: ops.H:213
forAll
#define forAll(list, i)
Loop across all elements in list.
Definition: stdFoam.H:296
Foam::dimensionedVector
dimensioned< vector > dimensionedVector
Dimensioned vector obtained from generic dimensioned type.
Definition: dimensionedVector.H:50
fvMatrices.H
A special matrix type and solver, designed for finite volume solutions of scalar equations.
Foam::fv::rotorDiskSource::addSup
virtual void addSup(fvMatrix< vector > &eqn, const label fieldi)
Add explicit contribution to momentum equation.
Definition: rotorDiskSource.C:479
n
label n
Definition: TABSMDCalcMethod2.H:31
Foam::reduce
void reduce(const List< UPstream::commsStruct > &comms, T &Value, const BinaryOp &bop, const int tag, const label comm)
Definition: PstreamReduceOps.H:51
Foam::dimArea
const dimensionSet dimArea(sqr(dimLength))
Definition: dimensionSets.H:60
Foam::Field< vector >
Foam::Info
messageStream Info
Information stream (uses stdout - output is on the master only)
Foam::polyPatch
A patch is a list of labels that address the faces in the global face list.
Definition: polyPatch.H:68
Foam::name
word name(const complex &c)
Return string representation of complex.
Definition: complex.C:76
correct
fvOptions correct(rho)
beta
dimensionedScalar beta("beta", dimless/dimTemperature, laminarTransport)
rotorDiskSource.H
Foam::fv::rotorDiskSource::rotorDiskSource
rotorDiskSource(const word &name, const word &modelType, const dictionary &dict, const fvMesh &mesh)
Construct from components.
Definition: rotorDiskSource.C:447
Foam::dimensionedScalar
dimensioned< scalar > dimensionedScalar
Dimensioned scalar obtained from generic dimensioned type.
Definition: dimensionedScalarFwd.H:43
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::fv::rotorDiskSource::constructGeometry
void constructGeometry()
Construct geometry.
Definition: rotorDiskSource.C:379
Foam::coordSystem::cylindrical
A cylindrical coordinate system (r-theta-z). The coordinate system angle theta is always in radians.
Definition: cylindricalCS.H:71
Foam::blockMeshTools::read
void read(Istream &, label &, const dictionary &)
In-place read with dictionary lookup.
Definition: blockMeshTools.C:33
dict
dictionary dict
Definition: searchingEngine.H:14
Foam::FatalError
error FatalError
Foam::dictionary
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:121
mesh
dynamicFvMesh & mesh
Definition: createDynamicFvMesh.H:6
addToRunTimeSelectionTable.H
Macros for easy insertion into run-time selection tables.
Foam::C::C
C()
Construct null.
Definition: C.C:43
trimModel.H
Foam::fvMesh
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:83
Foam
Namespace for OpenFOAM.
Definition: atmBoundaryLayer.C:33
Foam::abort
errorManip< error > abort(error &err)
Definition: errorManip.H:144
Foam::polyPatch::start
label start() const
Return start label of this patch in the polyMesh face list.
Definition: polyPatch.H:313
Foam::fv::rotorDiskSource::geometryModeTypeNames_
static const Enum< geometryModeType > geometryModeTypeNames_
Names for geometryModeType.
Definition: rotorDiskSource.H:346
Foam::degToRad
constexpr scalar degToRad(const scalar deg) noexcept
Conversion from degrees to radians.
Definition: unitConversion.H:48
Foam::fv::rotorDiskSource::inletFlowTypeNames_
static const Enum< inletFlowType > inletFlowTypeNames_
Names for inletFlowType.
Definition: rotorDiskSource.H:357
Foam::exit
errorManipArg< error, int > exit(error &err, const int errNo=1)
Definition: errorManip.H:130
Foam::rpmToRads
constexpr scalar rpmToRads(const scalar rpm) noexcept
Conversion from revolutions/minute to radians/sec.
Definition: unitConversion.H:73
fv
labelList fv(nPoints)
U
U
Definition: pEqn.H:72
FatalErrorInFunction
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition: error.H:381
Foam::ensightOutput::writeField
bool writeField(ensightFile &os, const Field< Type > &fld, const ensightCells &part, bool parallel)
Definition: ensightOutputTemplates.C:260
geometricOneField.H
Foam::constant::mathematical::pi
constexpr scalar pi(M_PI)
Foam::nl
constexpr char nl
Definition: Ostream.H:385
Foam::maxMagSqrOp
Definition: ops.H:226
Foam::Vector< scalar >
Foam::List< label >
Foam::sqrt
dimensionedScalar sqrt(const dimensionedScalar &ds)
Definition: dimensionedScalar.C:144
Foam::mag
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
Foam::type
fileName::Type type(const fileName &name, const bool followLink=true)
Return the file type: DIRECTORY or FILE, normally following symbolic links.
Definition: MSwindows.C:590
Foam::fv::rotorDiskSource::inletFlowType
inletFlowType
Options for the inlet flow type specification.
Definition: rotorDiskSource.H:349
Foam::identity
labelList identity(const label len, label start=0)
Create identity map of the given length with (map[i] == i)
Definition: labelList.C:38
Foam::fv::rotorDiskSource::inflowVelocity
tmp< vectorField > inflowVelocity(const volVectorField &U) const
Return the inlet flow field.
Definition: rotorDiskSource.C:414
Foam::tmp::New
static tmp< T > New(Args &&... args)
Construct tmp of T with forwarding arguments.
x
x
Definition: LISASMDCalcMethod2.H:52
Foam::fvMatrix
A special matrix type and solver, designed for finite volume solutions of scalar equations....
Definition: fvPatchField.H:76
Foam::fieldTypes::area
const wordList area
Standard area field types (scalar, vector, tensor, etc)
Foam::constant::universal::c
const dimensionedScalar c
Speed of light in a vacuum.
Foam::UIndirectList
A List with indirect addressing.
Definition: faMatrix.H:60
Foam::trimModel::New
static autoPtr< trimModel > New(const fv::rotorDiskSource &rotor, const dictionary &dict)
Return a reference to the selected trim model.
Definition: trimModelNew.C:34
Foam::C
Graphite solid properties.
Definition: C.H:50
Foam::dimVolume
const dimensionSet dimVolume(pow3(dimLength))
Definition: dimensionSets.H:61
Foam::GeometricField< scalar, fvPatchField, volMesh >
psi
const volScalarField & psi
Definition: createFieldRefs.H:1
Foam::IOobject::NO_READ
Definition: IOobject.H:123
Foam::defineTypeNameAndDebug
defineTypeNameAndDebug(combustionModel, 0)
Foam::tensor
Tensor< scalar > tensor
Tensor of scalars, i.e. Tensor<scalar>.
Definition: symmTensor.H:61
Foam::I
static const Identity< scalar > I
Definition: Identity.H:95
Foam::cos
dimensionedScalar cos(const dimensionedScalar &ds)
Definition: dimensionedScalar.C:265
Foam::labelUIndList
UIndirectList< label > labelUIndList
UIndirectList of labels.
Definition: UIndirectList.H:58