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 | Copyright (C) 2011-2015 OpenFOAM Foundation
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 
26 #include "rotorDiskSource.H"
28 #include "trimModel.H"
29 #include "fvMatrices.H"
30 #include "geometricOneField.H"
31 #include "syncTools.H"
32 
33 using namespace Foam::constant;
34 
35 // * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
36 
37 namespace Foam
38 {
39  namespace fv
40  {
41  defineTypeNameAndDebug(rotorDiskSource, 0);
42  addToRunTimeSelectionTable(option, rotorDiskSource, dictionary);
43  }
44 
45  template<> const char* NamedEnum<fv::rotorDiskSource::geometryModeType, 2>::
46  names[] =
47  {
48  "auto",
49  "specified"
50  };
51 
52  const NamedEnum<fv::rotorDiskSource::geometryModeType, 2>
54 
55  template<> const char* NamedEnum<fv::rotorDiskSource::inletFlowType, 3>::
56  names[] =
57  {
58  "fixed",
59  "surfaceNormal",
60  "local"
61  };
62 
63  const NamedEnum<fv::rotorDiskSource::inletFlowType, 3>
65 }
66 
67 
68 // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
69 
71 {
72  // Set inflow type
73  switch (selectionMode())
74  {
75  case smCellSet:
76  case smCellZone:
77  case smAll:
78  {
79  // Set the profile ID for each blade section
80  profiles_.connectBlades(blade_.profileName(), blade_.profileID());
81  switch (inletFlow_)
82  {
83  case ifFixed:
84  {
85  coeffs_.lookup("inletVelocity") >> inletVelocity_;
86  break;
87  }
88  case ifSurfaceNormal:
89  {
90  scalar UIn
91  (
92  readScalar(coeffs_.lookup("inletNormalVelocity"))
93  );
94  inletVelocity_ = -coordSys_.R().e3()*UIn;
95  break;
96  }
97  case ifLocal:
98  {
99  // Do nothing
100  break;
101  }
102  default:
103  {
105  << "Unknown inlet velocity type" << abort(FatalError);
106  }
107  }
108 
109 
110  break;
111  }
112  default:
113  {
115  << "Source cannot be used with '"
116  << selectionModeTypeNames_[selectionMode()]
117  << "' mode. Please use one of: " << nl
118  << selectionModeTypeNames_[smCellSet] << nl
119  << selectionModeTypeNames_[smCellZone] << nl
120  << selectionModeTypeNames_[smAll]
121  << exit(FatalError);
122  }
123  }
124 }
125 
126 
128 {
129  area_ = 0.0;
130 
131  static const scalar tol = 0.8;
132 
133  const label nInternalFaces = mesh_.nInternalFaces();
134  const polyBoundaryMesh& pbm = mesh_.boundaryMesh();
135  const vectorField& Sf = mesh_.Sf();
136  const scalarField& magSf = mesh_.magSf();
137 
139 
140  // Calculate cell addressing for selected cells
141  labelList cellAddr(mesh_.nCells(), -1);
142  UIndirectList<label>(cellAddr, cells_) = identity(cells_.size());
143  labelList nbrFaceCellAddr(mesh_.nFaces() - nInternalFaces, -1);
144  forAll(pbm, patchI)
145  {
146  const polyPatch& pp = pbm[patchI];
147 
148  if (pp.coupled())
149  {
150  forAll(pp, i)
151  {
152  label faceI = pp.start() + i;
153  label nbrFaceI = faceI - nInternalFaces;
154  label own = mesh_.faceOwner()[faceI];
155  nbrFaceCellAddr[nbrFaceI] = cellAddr[own];
156  }
157  }
158  }
159 
160  // Correct for parallel running
161  syncTools::swapBoundaryFaceList(mesh_, nbrFaceCellAddr);
162 
163  // Add internal field contributions
164  for (label faceI = 0; faceI < nInternalFaces; faceI++)
165  {
166  const label own = cellAddr[mesh_.faceOwner()[faceI]];
167  const label nbr = cellAddr[mesh_.faceNeighbour()[faceI]];
168 
169  if ((own != -1) && (nbr == -1))
170  {
171  vector nf = Sf[faceI]/magSf[faceI];
172 
173  if ((nf & axis) > tol)
174  {
175  area_[own] += magSf[faceI];
176  n += Sf[faceI];
177  }
178  }
179  else if ((own == -1) && (nbr != -1))
180  {
181  vector nf = Sf[faceI]/magSf[faceI];
182 
183  if ((-nf & axis) > tol)
184  {
185  area_[nbr] += magSf[faceI];
186  n -= Sf[faceI];
187  }
188  }
189  }
190 
191 
192  // Add boundary contributions
193  forAll(pbm, patchI)
194  {
195  const polyPatch& pp = pbm[patchI];
196  const vectorField& Sfp = mesh_.Sf().boundaryField()[patchI];
197  const scalarField& magSfp = mesh_.magSf().boundaryField()[patchI];
198 
199  if (pp.coupled())
200  {
201  forAll(pp, j)
202  {
203  const label faceI = pp.start() + j;
204  const label own = cellAddr[mesh_.faceOwner()[faceI]];
205  const label nbr = nbrFaceCellAddr[faceI - nInternalFaces];
206  const vector nf = Sfp[j]/magSfp[j];
207 
208  if ((own != -1) && (nbr == -1) && ((nf & axis) > tol))
209  {
210  area_[own] += magSfp[j];
211  n += Sfp[j];
212  }
213  }
214  }
215  else
216  {
217  forAll(pp, j)
218  {
219  const label faceI = pp.start() + j;
220  const label own = cellAddr[mesh_.faceOwner()[faceI]];
221  const vector nf = Sfp[j]/magSfp[j];
222 
223  if ((own != -1) && ((nf & axis) > tol))
224  {
225  area_[own] += magSfp[j];
226  n += Sfp[j];
227  }
228  }
229  }
230  }
231 
232  if (correct)
233  {
234  reduce(n, sumOp<vector>());
235  axis = n/mag(n);
236  }
237 
238  if (debug)
239  {
240  volScalarField area
241  (
242  IOobject
243  (
244  name_ + ":area",
245  mesh_.time().timeName(),
246  mesh_,
249  ),
250  mesh_,
251  dimensionedScalar("0", dimArea, 0)
252  );
253  UIndirectList<scalar>(area.internalField(), cells_) = area_;
254 
255  Info<< type() << ": " << name_ << " writing field " << area.name()
256  << endl;
257 
258  area.write();
259  }
260 }
261 
262 
264 {
265  // Construct the local rotor co-prdinate system
266  vector origin(vector::zero);
267  vector axis(vector::zero);
268  vector refDir(vector::zero);
269 
270  geometryModeType gm =
271  geometryModeTypeNames_.read(coeffs_.lookup("geometryMode"));
272 
273  switch (gm)
274  {
275  case gmAuto:
276  {
277  // Determine rotation origin (cell volume weighted)
278  scalar sumV = 0.0;
279  const scalarField& V = mesh_.V();
280  const vectorField& C = mesh_.C();
281  forAll(cells_, i)
282  {
283  const label cellI = cells_[i];
284  sumV += V[cellI];
285  origin += V[cellI]*C[cellI];
286  }
287  reduce(origin, sumOp<vector>());
288  reduce(sumV, sumOp<scalar>());
289  origin /= sumV;
290 
291  // Determine first radial vector
292  vector dx1(vector::zero);
293  scalar magR = -GREAT;
294  forAll(cells_, i)
295  {
296  const label cellI = cells_[i];
297  vector test = C[cellI] - origin;
298  if (mag(test) > magR)
299  {
300  dx1 = test;
301  magR = mag(test);
302  }
303  }
304  reduce(dx1, maxMagSqrOp<vector>());
305  magR = mag(dx1);
306 
307  // Determine second radial vector and cross to determine axis
308  forAll(cells_, i)
309  {
310  const label cellI = cells_[i];
311  vector dx2 = C[cellI] - origin;
312  if (mag(dx2) > 0.5*magR)
313  {
314  axis = dx1 ^ dx2;
315  if (mag(axis) > SMALL)
316  {
317  break;
318  }
319  }
320  }
321  reduce(axis, maxMagSqrOp<vector>());
322  axis /= mag(axis);
323 
324  // Correct the axis direction using a point above the rotor
325  {
326  vector pointAbove(coeffs_.lookup("pointAbove"));
327  vector dir = pointAbove - origin;
328  dir /= mag(dir);
329  if ((dir & axis) < 0)
330  {
331  axis *= -1.0;
332  }
333  }
334 
335  coeffs_.lookup("refDirection") >> refDir;
336 
337  cylindrical_.reset
338  (
339  new cylindrical
340  (
341  mesh_,
342  axis,
343  origin,
344  cells_
345  )
346  );
347 
348  // Set the face areas and apply correction to calculated axis
349  // e.g. if cellZone is more than a single layer in thickness
350  setFaceArea(axis, true);
351 
352  break;
353  }
354  case gmSpecified:
355  {
356  coeffs_.lookup("origin") >> origin;
357  coeffs_.lookup("axis") >> axis;
358  coeffs_.lookup("refDirection") >> refDir;
359 
360  cylindrical_.reset
361  (
362  new cylindrical
363  (
364  mesh_,
365  axis,
366  origin,
367  cells_
368  )
369  );
370 
371  setFaceArea(axis, false);
372 
373  break;
374  }
375  default:
376  {
378  << "Unknown geometryMode " << geometryModeTypeNames_[gm]
379  << ". Available geometry modes include "
380  << geometryModeTypeNames_ << exit(FatalError);
381  }
382  }
383 
384  coordSys_ = cylindricalCS("rotorCoordSys", origin, axis, refDir, false);
385 
386  const scalar sumArea = gSum(area_);
387  const scalar diameter = Foam::sqrt(4.0*sumArea/mathematical::pi);
388  Info<< " Rotor gometry:" << nl
389  << " - disk diameter = " << diameter << nl
390  << " - disk area = " << sumArea << nl
391  << " - origin = " << coordSys_.origin() << nl
392  << " - r-axis = " << coordSys_.R().e1() << nl
393  << " - psi-axis = " << coordSys_.R().e2() << nl
394  << " - z-axis = " << coordSys_.R().e3() << endl;
395 }
396 
397 
399 {
400  const vectorField& C = mesh_.C();
401 
402  forAll(cells_, i)
403  {
404  if (area_[i] > ROOTVSMALL)
405  {
406  const label cellI = cells_[i];
407 
408  // Position in (planar) rotor co-ordinate system
409  x_[i] = coordSys_.localPosition(C[cellI]);
410 
411  // Cache max radius
412  rMax_ = max(rMax_, x_[i].x());
413 
414  // Swept angle relative to rDir axis [radians] in range 0 -> 2*pi
415  scalar psi = x_[i].y();
416 
417  // Blade flap angle [radians]
418  scalar beta =
419  flap_.beta0 - flap_.beta1c*cos(psi) - flap_.beta2s*sin(psi);
420 
421  // Determine rotation tensor to convert from planar system into the
422  // rotor cone system
423  scalar c = cos(beta);
424  scalar s = sin(beta);
425  R_[i] = tensor(c, 0, -s, 0, 1, 0, s, 0, c);
426  invR_[i] = R_[i].T();
427  }
428  }
429 }
430 
431 
433 (
434  const volVectorField& U
435 ) const
436 {
437  switch (inletFlow_)
438  {
439  case ifFixed:
440  case ifSurfaceNormal:
441  {
442  return tmp<vectorField>
443  (
444  new vectorField(mesh_.nCells(), inletVelocity_)
445  );
446 
447  break;
448  }
449  case ifLocal:
450  {
451  return U.internalField();
452 
453  break;
454  }
455  default:
456  {
458  << "Unknown inlet flow specification" << abort(FatalError);
459  }
460  }
461 
462  return tmp<vectorField>(new vectorField(mesh_.nCells(), vector::zero));
463 }
464 
465 
466 // * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * * //
467 
469 (
470  const word& name,
471  const word& modelType,
472  const dictionary& dict,
473  const fvMesh& mesh
474 
475 )
476 :
477  cellSetOption(name, modelType, dict, mesh),
478  rhoRef_(1.0),
479  omega_(0.0),
480  nBlades_(0),
481  inletFlow_(ifLocal),
482  inletVelocity_(vector::zero),
483  tipEffect_(1.0),
484  flap_(),
485  x_(cells_.size(), vector::zero),
486  R_(cells_.size(), I),
487  invR_(cells_.size(), I),
488  area_(cells_.size(), 0.0),
489  coordSys_(false),
490  cylindrical_(),
491  rMax_(0.0),
492  trim_(trimModel::New(*this, coeffs_)),
493  blade_(coeffs_.subDict("blade")),
494  profiles_(coeffs_.subDict("profiles"))
495 {
496  read(dict);
497 }
498 
499 
500 // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
501 
503 {}
504 
505 
506 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
507 
509 (
510  fvMatrix<vector>& eqn,
511  const label fieldI
512 )
513 {
514  volVectorField force
515  (
516  IOobject
517  (
518  name_ + ":rotorForce",
519  mesh_.time().timeName(),
520  mesh_
521  ),
522  mesh_,
524  (
525  "zero",
526  eqn.dimensions()/dimVolume,
528  )
529  );
530 
531  // Read the reference density for incompressible flow
532  coeffs_.lookup("rhoRef") >> rhoRef_;
533 
534  const vectorField Uin(inflowVelocity(eqn.psi()));
535  trim_->correct(Uin, force);
536  calculate(geometricOneField(), Uin, trim_->thetag(), force);
537 
538  // Add source to rhs of eqn
539  eqn -= force;
540 
541  if (mesh_.time().outputTime())
542  {
543  force.write();
544  }
545 }
546 
547 
549 (
550  const volScalarField& rho,
551  fvMatrix<vector>& eqn,
552  const label fieldI
553 )
554 {
555  volVectorField force
556  (
557  IOobject
558  (
559  name_ + ":rotorForce",
560  mesh_.time().timeName(),
561  mesh_
562  ),
563  mesh_,
565  (
566  "zero",
567  eqn.dimensions()/dimVolume,
569  )
570  );
571 
572  const vectorField Uin(inflowVelocity(eqn.psi()));
573  trim_->correct(rho, Uin, force);
574  calculate(rho, Uin, trim_->thetag(), force);
575 
576  // Add source to rhs of eqn
577  eqn -= force;
578 
579  if (mesh_.time().outputTime())
580  {
581  force.write();
582  }
583 }
584 
585 
587 {
589  {
590  coeffs_.lookup("fieldNames") >> fieldNames_;
591  applied_.setSize(fieldNames_.size(), false);
592 
593  // Read co-ordinate system/geometry invariant properties
594  scalar rpm(readScalar(coeffs_.lookup("rpm")));
595  omega_ = rpm/60.0*mathematical::twoPi;
596 
597  coeffs_.lookup("nBlades") >> nBlades_;
598 
599  inletFlow_ = inletFlowTypeNames_.read(coeffs_.lookup("inletFlowType"));
600 
601  coeffs_.lookup("tipEffect") >> tipEffect_;
602 
603  const dictionary& flapCoeffs(coeffs_.subDict("flapCoeffs"));
604  flapCoeffs.lookup("beta0") >> flap_.beta0;
605  flapCoeffs.lookup("beta1c") >> flap_.beta1c;
606  flapCoeffs.lookup("beta2s") >> flap_.beta2s;
607  flap_.beta0 = degToRad(flap_.beta0);
608  flap_.beta1c = degToRad(flap_.beta1c);
609  flap_.beta2s = degToRad(flap_.beta2s);
610 
611 
612  // Create co-ordinate system
613  createCoordinateSystem();
614 
615  // Read co-odinate system dependent properties
616  checkData();
617 
618  constructGeometry();
619 
620  trim_->read(coeffs_);
621 
622  if (debug)
623  {
624  writeField("thetag", trim_->thetag()(), true);
625  writeField("faceArea", area_, true);
626  }
627 
628  return true;
629  }
630  else
631  {
632  return false;
633  }
634 }
635 
636 
637 // ************************************************************************* //
Foam::fv::rotorDiskSource::checkData
void checkData()
Check data.
Definition: rotorDiskSource.C:70
test
double test(hashFn hash)
Definition: Test-HashingSpeed.C:1036
beta
dimensionedScalar beta("beta", dimless/dimTemperature, laminarTransport)
Foam::fv::rotorDiskSource::read
virtual bool read(const dictionary &dict)
Read source dictionary.
Definition: rotorDiskSource.C:586
Foam::IOobject
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
Definition: IOobject.H:91
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::fv::rotorDiskSource::addSup
virtual void addSup(fvMatrix< vector > &eqn, const label fieldI)
Source term to momentum equation.
Definition: rotorDiskSource.C:509
Foam::fv::rotorDiskSource::createCoordinateSystem
void createCoordinateSystem()
Create the co-ordinate system.
Definition: rotorDiskSource.C:263
Foam::polyBoundaryMesh
Foam::polyBoundaryMesh.
Definition: polyBoundaryMesh.H:60
forAll
#define forAll(list, i)
Loop across all elements in list.
Definition: UList.H:406
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:127
Foam::tmp
A class for managing temporary objects.
Definition: PtrList.H:118
Foam::addToRunTimeSelectionTable
addToRunTimeSelectionTable(ensightPart, ensightPartCells, istream)
Foam::constant
Collection of constants.
Definition: atomicConstants.C:37
Foam::sin
dimensionedScalar sin(const dimensionedScalar &ds)
Definition: dimensionedScalar.C:255
Foam::read
bool read(const char *, int32_t &)
Definition: int32IO.C:87
Foam::fvMatrix::dimensions
const dimensionSet & dimensions() const
Definition: fvMatrix.H:286
Foam::tensor
Tensor< scalar > tensor
Tensor of scalars.
Definition: tensor.H:51
Foam::polyPatch::coupled
virtual bool coupled() const
Return true if this patch is geometrically coupled (i.e. faces and.
Definition: polyPatch.H:322
Foam::dictionary::lookup
ITstream & lookup(const word &, bool recursive=false, bool patternMatch=true) const
Find and return an entry data stream.
Definition: dictionary.C:449
Foam::geometricOneField
A class representing the concept of a GeometricField of 1 used to avoid unnecessary manipulations for...
Definition: geometricOneField.H:52
Foam::fv::rotorDiskSource::geometryModeType
geometryModeType
Definition: rotorDiskSource.H:132
Foam::cylindrical
A local coordinate rotation. The cell based rotational field can be created in two ways:
Definition: cylindrical.H:63
Foam::endl
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:251
Foam::cylindricalCS
Cylindrical coordinate system.
Definition: cylindricalCS.H:48
Foam::gSum
Type gSum(const FieldField< Field, Type > &f)
Definition: FieldFieldFunctions.C:564
Foam::constant::mathematical::twoPi
const scalar twoPi(2 *pi)
Foam::mag
dimensioned< scalar > mag(const dimensioned< Type > &)
syncTools.H
Foam::fvMatrix::psi
const GeometricField< Type, fvPatchField, volMesh > & psi() const
Definition: fvMatrix.H:281
Foam::IOobject::NO_WRITE
@ NO_WRITE
Definition: IOobject.H:118
U
U
Definition: pEqn.H:46
Foam::fv::rotorDiskSource::~rotorDiskSource
virtual ~rotorDiskSource()
Destructor.
Definition: rotorDiskSource.C:502
Foam::vectorField
Field< vector > vectorField
Specialisation of Field<T> for vector.
Definition: primitiveFieldsFwd.H:49
fvMatrices.H
A special matrix type and solver, designed for finite volume solutions of scalar equations.
Foam::maxMagSqrOp
Definition: ops.H:175
Foam::fv::rotorDiskSource::inletFlowTypeNames_
static const NamedEnum< inletFlowType, 3 > inletFlowTypeNames_
Definition: rotorDiskSource.H:145
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:43
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::IOobject::NO_READ
@ NO_READ
Definition: IOobject.H:111
Foam::nl
static const char nl
Definition: Ostream.H:260
Foam::Info
messageStream Info
Foam::polyPatch
A patch is a list of labels that address the faces in the global face list.
Definition: polyPatch.H:66
correct
fvOptions correct(rho)
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:469
Foam::GeometricField::internalField
InternalField & internalField()
Return internal field.
Definition: GeometricField.C:724
Foam::fv::rotorDiskSource::constructGeometry
void constructGeometry()
Construct geometry.
Definition: rotorDiskSource.C:398
Foam::I
static const sphericalTensor I(1)
Foam::identity
labelList identity(const label len)
Create identity map (map[i] == i) of given length.
Definition: ListOps.C:104
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::C::C
C()
Construct null.
Definition: C.C:41
trimModel.H
Foam::fvMesh
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:78
Foam
Namespace for OpenFOAM.
Definition: combustionModel.C:30
Foam::abort
errorManip< error > abort(error &err)
Definition: errorManip.H:131
s
gmvFile<< "tracers "<< particles.size()<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().x()<< " ";}gmvFile<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().y()<< " ";}gmvFile<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().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))
Foam::polyPatch::start
label start() const
Return start label of this patch in the polyMesh face list.
Definition: polyPatch.H:312
Foam::exit
errorManipArg< error, int > exit(error &err, const int errNo=1)
Definition: errorManip.H:124
rho
rho
Definition: pEqn.H:3
Foam::max
dimensioned< Type > max(const dimensioned< Type > &, const dimensioned< Type > &)
fv
labelList fv(nPoints)
Foam::syncTools::swapBoundaryFaceList
static void swapBoundaryFaceList(const polyMesh &mesh, UList< T > &l)
Swap coupled boundary face values.
Definition: syncTools.H:430
FatalErrorInFunction
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition: error.H:318
geometricOneField.H
psi
const volScalarField & psi
Definition: setRegionFluidFields.H:13
Foam::sumOp
Definition: ops.H:162
Foam::readScalar
bool readScalar(const char *buf, doubleScalar &s)
Read whole of buf as a scalar. Return true if succesful.
Definition: doubleScalar.H:63
Foam::Vector< scalar >
Foam::fv::rotorDiskSource::geometryModeTypeNames_
static const NamedEnum< geometryModeType, 2 > geometryModeTypeNames_
Definition: rotorDiskSource.H:137
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::sqrt
dimensionedScalar sqrt(const dimensionedScalar &ds)
Definition: dimensionedScalar.C:142
Foam::fv::rotorDiskSource::inflowVelocity
tmp< vectorField > inflowVelocity(const volVectorField &U) const
Return the inlet flow field.
Definition: rotorDiskSource.C:433
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:68
Foam::constant::mathematical::pi
const scalar pi(M_PI)
Foam::constant::universal::c
const dimensionedScalar c
Speed of light in a vacuum.
Foam::UIndirectList
A List with indirect addressing.
Definition: fvMatrix.H:106
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:31
Foam::C
Graphite solid properties.
Definition: C.H:57
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::defineTypeNameAndDebug
defineTypeNameAndDebug(combustionModel, 0)
Foam::name
word name(const complex &)
Return a string representation of a complex.
Definition: complex.C:47
Foam::degToRad
scalar degToRad(const scalar deg)
Conversion from degrees to radians.
Definition: unitConversion.H:45
Foam::cos
dimensionedScalar cos(const dimensionedScalar &ds)
Definition: dimensionedScalar.C:256