kineticTheoryModel.C
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration | Website: https://openfoam.org
5  \\ / A nd | Copyright (C) 2011-2026 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 "kineticTheoryModel.H"
27 #include "mathematicalConstants.H"
28 #include "phaseSystem.H"
29 #include "fvcDdt.H"
30 #include "fvcSup.H"
31 #include "fvModels.H"
32 #include "fvConstraints.H"
33 
34 // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
35 
36 const Foam::phaseModel&
37 Foam::RASModels::kineticTheoryModel::continuousPhase() const
38 {
39  const phaseSystem& fluid = phase_.fluid();
40 
41  if (continuousPhaseName_ == word::null)
42  {
43  if (fluid.movingPhases().size() != 2)
44  {
45  FatalIOErrorInFunction(typeDict())
46  << "Continuous phase name must be specified "
47  << "when there are more than two moving phases."
48  << exit(FatalIOError);
49  }
50 
51  forAll(fluid.movingPhases(), movingPhasei)
52  {
53  const phaseModel& otherPhase = fluid.movingPhases()[movingPhasei];
54 
55  if (&otherPhase != &phase_)
56  {
57  return otherPhase;
58  }
59  }
60  }
61 
62  return fluid.phases()[continuousPhaseName_];
63 };
64 
65 
66 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
67 
69 (
70  const volScalarField& alpha,
71  const volScalarField& rho,
72  const volVectorField& U,
73  const surfaceScalarField& alphaRhoPhi,
74  const surfaceScalarField& phi,
75  const viscosity& viscosity,
76  const word& type
77 )
78 :
79  eddyViscosity<RASModel<phaseCompressible::momentumTransportModel>>
80  (
81  type,
82  alpha,
83  rho,
84  U,
85  alphaRhoPhi,
86  phi,
87  viscosity
88  ),
89 
90  phase_(refCast<const phaseModel>(viscosity)),
91 
92  continuousPhaseName_
93  (
94  typeDict().lookupOrDefault("continuousPhase", word::null)
95  ),
96 
97  viscosityModel_
98  (
99  kineticTheoryModels::viscosityModel::New
100  (
101  typeDict()
102  )
103  ),
104  conductivityModel_
105  (
106  kineticTheoryModels::conductivityModel::New
107  (
108  typeDict()
109  )
110  ),
111  radialModel_
112  (
113  kineticTheoryModels::radialModel::New
114  (
115  typeDict()
116  )
117  ),
118  granularPressureModel_
119  (
120  kineticTheoryModels::granularPressureModel::New
121  (
122  typeDict()
123  )
124  ),
125  frictionalStressModel_
126  (
127  kineticTheoryModels::frictionalStressModel::New
128  (
129  typeDict()
130  )
131  ),
132 
133  equilibrium_(typeDict().lookup("equilibrium")),
134  e_("e", dimless, typeDict()),
135  alphaMinFriction_
136  (
137  "alphaMinFriction",
138  dimless,
139  typeDict()
140  ),
141  residualAlpha_
142  (
143  "residualAlpha",
144  dimless,
145  typeDict()
146  ),
147 
148  maxNut_
149  (
150  "maxNut",
151  dimensionSet(0, 2, -1, 0, 0),
152  typeDict().lookupOrDefault<scalar>("maxNut", 1000)
153  ),
154 
155  Theta_
156  (
157  IOobject
158  (
159  IOobject::groupName("Theta", phase_.name()),
160  U.time().name(),
161  U.mesh(),
162  IOobject::MUST_READ,
163  IOobject::AUTO_WRITE
164  ),
165  U.mesh(),
166  dimensions::kinematicStress
167  ),
168 
169  lambda_
170  (
171  IOobject
172  (
173  IOobject::groupName(typedName("lambda"), phase_.name()),
174  U.time().name(),
175  U.mesh(),
176  IOobject::NO_READ,
177  IOobject::NO_WRITE
178  ),
179  U.mesh(),
180  dimensionedScalar(dimensionSet(0, 2, -1, 0, 0), 0)
181  ),
182 
183  gs0_
184  (
185  IOobject
186  (
187  IOobject::groupName(typedName("gs0"), phase_.name()),
188  U.time().name(),
189  U.mesh(),
190  IOobject::NO_READ,
191  IOobject::NO_WRITE
192  ),
193  U.mesh(),
194  dimensionedScalar(dimensionSet(0, 0, 0, 0, 0), 0)
195  ),
196 
197  kappa_
198  (
199  IOobject
200  (
201  IOobject::groupName(typedName("kappa"), phase_.name()),
202  U.time().name(),
203  U.mesh(),
204  IOobject::NO_READ,
205  IOobject::NO_WRITE
206  ),
207  U.mesh(),
208  dimensionedScalar(dimensionSet(1, -1, -1, 0, 0), 0)
209  ),
210 
211  nuFric_
212  (
213  IOobject
214  (
215  IOobject::groupName(typedName("nuFric"), phase_.name()),
216  U.time().name(),
217  U.mesh(),
218  IOobject::NO_READ,
219  IOobject::AUTO_WRITE
220  ),
221  U.mesh(),
222  dimensionedScalar(dimensionSet(0, 2, -1, 0, 0), 0)
223  )
224 {}
225 
226 
227 // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
228 
230 {}
231 
232 
233 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
234 
236 {
237  if
238  (
240  read()
241  )
242  {
243  const dictionary& coeffDict = this->typeDict();
244  coeffDict.lookup("equilibrium") >> equilibrium_;
245  e_.readIfPresent(coeffDict);
246  alphaMinFriction_.readIfPresent(coeffDict);
247 
248  viscosityModel_->read(coeffDict);
249  conductivityModel_->read(coeffDict);
250  radialModel_->read(coeffDict);
251  granularPressureModel_->read(coeffDict);
252  frictionalStressModel_->read(coeffDict);
253 
254  return true;
255  }
256  else
257  {
258  return false;
259  }
260 }
261 
262 
265 {
267  return nut_;
268 }
269 
270 
273 {
275  return nut_;
276 }
277 
278 
281 {
283  return nut_;
284 }
285 
286 
289 {
291  (
293  (
294  IOobject::groupName("R", U_.group()),
295  - (nut_ + nuFric_)*dev(twoSymm(fvc::grad(U_)))
296  - (lambda_*fvc::div(phi_))*symmTensor::I
297  )
298  );
299 }
300 
301 
303 Foam::RASModels::kineticTheoryModel::pPrime() const
304 {
305  const volScalarField& rho = phase_.rho();
306 
307  tmp<volScalarField> tpPrime
308  (
310  (
311  IOobject::groupName("pPrime", U_.group()),
312  Theta_
313  *granularPressureModel_->granularPressureCoeffPrime
314  (
315  alpha_,
316  radialModel_->g0
317  (
318  alpha_,
319  alphaMinFriction_,
320  phase_.alphaMax()
321  ),
322  radialModel_->g0prime
323  (
324  alpha_,
325  alphaMinFriction_,
326  phase_.alphaMax()
327  ),
328  rho,
329  e_
330  )
331  + frictionalStressModel_->frictionalPressurePrime
332  (
333  phase_,
334  alphaMinFriction_,
335  phase_.alphaMax()
336  )
337  )
338  );
339 
340  volScalarField::Boundary& bpPrime = tpPrime.ref().boundaryFieldRef();
341 
342  forAll(bpPrime, patchi)
343  {
344  if (!bpPrime[patchi].coupled())
345  {
346  bpPrime[patchi] == 0;
347  }
348  }
349 
350  return tpPrime;
351 }
352 
353 
356 {
358  (
359  IOobject::groupName("pPrimef", U_.group()),
360  fvc::interpolate(pPrime())
361  );
362 }
363 
364 
367 {
368  const surfaceScalarField rhoNuEff(fvc::interpolate(rho_*(nut_ + nuFric_)));
369 
371  (
373  (
374  IOobject::groupName("devTau", U_.group()),
375  - rhoNuEff
376  *(
377  fvc::dotInterpolate(mesh().nf(), dev2(T(fvc::grad(U_))))
378  + fvc::snGrad(U_)
379  )
380  - fvc::interpolate((rho_*lambda_)*fvc::div(phi_))*mesh().nf()
381  )
382  );
383 }
384 
385 
388 (
390 ) const
391 {
392  const surfaceScalarField rhoNuEff(fvc::interpolate(rho_*(nut_ + nuFric_)));
393 
394  return
395  (
396  - fvc::div
397  (
398  rhoNuEff
400  + fvc::interpolate((rho_*lambda_)*fvc::div(phi_))*mesh().Sf()
401  )
402  - fvm::laplacian(rhoNuEff, U)
403  );
404 }
405 
406 
408 {
409  // Local references
410  const volScalarField alpha(max(alpha_, scalar(0)));
411  const phaseSystem& fluid = phase_.fluid();
412  const phaseModel& continuousPhase = this->continuousPhase();
413  const volScalarField& rho = phase_.rho();
414  const surfaceScalarField& alphaRhoPhi = alphaRhoPhi_;
415  const volVectorField& U = U_;
416 
417  tmp<volVectorField> tUc(continuousPhase.U());
418  const volVectorField& Uc = tUc();
419 
420  const scalar sqrtPi = sqrt(constant::mathematical::pi);
421  const dimensionedScalar ThetaSmall("ThetaSmall", Theta_.dimensions(), 1e-6);
422  const dimensionedScalar ThetaSmallSqrt(sqrt(ThetaSmall));
423 
424  tmp<volScalarField> tda(phase_.d());
425  const volScalarField& da = tda();
426 
427  tmp<volTensorField> tgradU(fvc::grad(U_));
428  const volTensorField& gradU(tgradU());
429  const volSymmTensorField D(symm(gradU));
430 
431  // Calculating the radial distribution function
432  gs0_ = radialModel_->g0(alpha, alphaMinFriction_, phase_.alphaMax());
433 
434  if (!equilibrium_)
435  {
436  // Particle viscosity (Table 3.2, p.47)
437  nut_ = viscosityModel_->nu(alpha, Theta_, gs0_, rho, da, e_);
438 
439  const volScalarField ThetaSqrt("sqrtTheta", sqrt(Theta_));
440 
441  // Bulk viscosity p. 45 (Lun et al. 1984).
442  lambda_ = (4.0/3.0)*sqr(alpha)*da*gs0_*(1 + e_)*ThetaSqrt/sqrtPi;
443 
444  // Stress tensor, Definitions, Table 3.1, p. 43
445  const volSymmTensorField tau
446  (
447  rho*(2*nut_*D + (lambda_ - (2.0/3.0)*nut_)*tr(D)*I)
448  );
449 
450  // Dissipation (Eq. 3.24, p.50)
451  const volScalarField gammaCoeff
452  (
453  "gammaCoeff",
454  12*(1 - sqr(e_))
455  *max(sqr(alpha), residualAlpha_)
456  *rho*gs0_*(1.0/da)*ThetaSqrt/sqrtPi
457  );
458 
459  // Drag
460  const dispersedPhaseInterface interface(phase_, continuousPhase);
461  const volScalarField beta
462  (
463  fluid.foundInterfacialModel<dragModel>(interface)
464  ? fluid.lookupInterfacialModel<dragModel>(interface).K()
466  (
467  "beta",
468  phase_.mesh(),
470  )
471  );
472 
473  // Eq. 3.25, p. 50 Js = J1 - J2
474  const volScalarField J1("J1", 3*beta);
475  const volScalarField J2
476  (
477  "J2",
478  0.25*sqr(beta)*da*magSqr(U - Uc)
479  /(
480  max(alpha, residualAlpha_)*rho
481  *sqrtPi*(ThetaSqrt + ThetaSmallSqrt)
482  )
483  );
484 
485  // particle pressure - coefficient in front of Theta (Eq. 3.22, p. 45)
486  const volScalarField PsCoeff
487  (
488  granularPressureModel_->granularPressureCoeff
489  (
490  alpha,
491  gs0_,
492  rho,
493  e_
494  )
495  );
496 
497  // 'thermal' conductivity (Table 3.3, p. 49)
498  kappa_ = conductivityModel_->kappa(alpha, Theta_, gs0_, rho, da, e_);
499 
502  (
504  );
505 
506  // Construct the granular temperature equation (Eq. 3.20, p. 44)
507  // NB. note that there are two typos in Eq. 3.20:
508  // Ps should be without grad
509  // the laplacian has the wrong sign
510  fvScalarMatrix ThetaEqn
511  (
512  1.5*(fvm::ddt(alpha, rho, Theta_) + fvm::div(alphaRhoPhi, Theta_))
513  - 0.5*fvm::Sp(fvc::ddt(alpha, rho) + fvc::div(alphaRhoPhi), Theta_)
514  - fvm::laplacian(kappa_, Theta_, "laplacian(kappa,Theta)")
515  ==
516  - fvm::SuSp((PsCoeff*I) && gradU, Theta_)
517  + (tau && gradU)
518  + fvm::Sp(-gammaCoeff, Theta_)
519  + fvm::Sp(-J1, Theta_)
520  + fvm::Sp(J2/(Theta_ + ThetaSmall), Theta_)
521  + fvModels.source(alpha, rho, Theta_)
522  );
523 
524  ThetaEqn.relax();
525  fvConstraints.constrain(ThetaEqn);
526  ThetaEqn.solve();
527  fvConstraints.constrain(Theta_);
528  }
529  else
530  {
531  // Equilibrium => dissipation == production
532  // Eq. 4.14, p.82
533  const volScalarField K1("K1", 2*(1 + e_)*rho*gs0_);
534  const volScalarField K3
535  (
536  "K3",
537  0.5*da*rho*
538  (
539  (sqrtPi/(3*(3.0 - e_)))
540  *(1 + 0.4*(1 + e_)*(3*e_ - 1)*alpha*gs0_)
541  +1.6*alpha*gs0_*(1 + e_)/sqrtPi
542  )
543  );
544 
545  const volScalarField K2
546  (
547  "K2",
548  4*da*rho*(1 + e_)*alpha*gs0_/(3*sqrtPi) - 2*K3/3.0
549  );
550 
551  const volScalarField K4("K4", 12*(1 - sqr(e_))*rho*gs0_/(da*sqrtPi));
552 
553  const volScalarField trD
554  (
555  "trD",
556  alpha/(alpha + residualAlpha_)
557  *fvc::div(phi_)
558  );
559  const volScalarField tr2D("tr2D", sqr(trD));
560  const volScalarField trD2("trD2", tr(D & D));
561 
562  const volScalarField t1("t1", K1*alpha + rho);
563  const volScalarField l1("l1", -t1*trD);
564  const volScalarField l2("l2", sqr(t1)*tr2D);
565  const volScalarField l3
566  (
567  "l3",
568  4.0
569  *K4
570  *alpha
571  *(2*K3*trD2 + K2*tr2D)
572  );
573 
574  Theta_ = sqr
575  (
576  (l1 + sqrt(l2 + l3))
577  /(2*max(alpha, residualAlpha_)*K4)
578  );
579 
580  kappa_ = conductivityModel_->kappa(alpha, Theta_, gs0_, rho, da, e_);
581  }
582 
583  Theta_.max(0);
584  Theta_.min(100);
585 
586  {
587  // particle viscosity (Table 3.2, p.47)
588  nut_ = viscosityModel_->nu(alpha, Theta_, gs0_, rho, da, e_);
589 
590  const volScalarField ThetaSqrt("sqrtTheta", sqrt(Theta_));
591 
592  // Bulk viscosity p. 45 (Lun et al. 1984).
593  lambda_ = (4.0/3.0)*sqr(alpha)*da*gs0_*(1 + e_)*ThetaSqrt/sqrtPi;
594 
595  // Frictional pressure
596  const volScalarField pf
597  (
598  frictionalStressModel_->frictionalPressure
599  (
600  phase_,
601  alphaMinFriction_,
602  phase_.alphaMax()
603  )
604  );
605 
606  // Limit viscosity
607  nut_.min(maxNut_);
608 
609  nuFric_ = min
610  (
611  frictionalStressModel_->nu
612  (
613  phase_,
614  alphaMinFriction_,
615  phase_.alphaMax(),
616  pf/rho,
617  D
618  ),
619  maxNut_ - nut_
620  );
621  }
622 
623  if (debug)
624  {
625  Info<< typeName << ':' << nl
626  << " max(Theta) = " << max(Theta_).value() << nl
627  << " max(nut) = " << max(nut_).value() << endl;
628  }
629 }
630 
631 
632 // ************************************************************************* //
#define K3
Definition: SHA1.C:169
#define K1
Definition: SHA1.C:167
#define K4
Definition: SHA1.C:170
#define K2
Definition: SHA1.C:168
#define forAll(list, i)
Loop across all elements in list.
Definition: UList.H:449
static fvModels & New(const word &name, const fvMesh &mesh)
Construct and return the named DemandDrivenMeshObject.
Generic GeometricBoundaryField class.
Generic GeometricField class.
static tmp< GeometricField< Type, GeoMesh, PrimitiveField > > New(const word &name, const Internal &, const PtrList< Patch > &, const HashPtrTable< Source > &=HashPtrTable< Source >())
Return a temporary field constructed from name,.
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
Definition: IOobject.H:99
static word groupName(Name name, const word &group)
virtual Istream & read(token &)
Return next token from stream.
Definition: ITstream.C:56
virtual Istream & read(token &)=0
Return next token from stream.
Templated abstract base class for RAS turbulence models.
Definition: RASModel.H:56
virtual tmp< volScalarField > epsilon() const
Return the turbulence kinetic energy dissipation rate.
virtual tmp< volSymmTensorField > R() const
Return the stress tensor [m^2/s^2].
virtual tmp< surfaceVectorField > devTau() const
Return the effective stress.
virtual void correct()
Solve the kinetic theory equations and correct the viscosity.
virtual tmp< volScalarField > k() const
Return the turbulence kinetic energy.
virtual tmp< surfaceScalarField > pPrimef() const
Return the face-phase-pressure'.
virtual tmp< fvVectorMatrix > divDevTau(volVectorField &U) const
Return the source term for the momentum equation.
kineticTheoryModel(const volScalarField &alpha, const volScalarField &rho, const volVectorField &U, const surfaceScalarField &alphaRhoPhi, const surfaceScalarField &phi, const viscosity &viscosity, const word &type=typeName)
Construct from components.
virtual tmp< volScalarField > omega() const
Return the turbulence specific dissipation rate.
virtual bool read()
Re-read model coefficients if they have changed.
static const SymmTensor I
Definition: SymmTensor.H:72
A list of keywords followed by any number of values (e.g. words and numbers) or sub-dictionaries.
Definition: dictionary.H:162
ITstream & lookup(const word &, bool recursive=false, bool patternMatch=true) const
Find and return an entry data stream.
Definition: dictionary.C:669
Dimension set for the base types.
Definition: dimensionSet.H:125
Class to represent a interface between phases where one phase is considered dispersed within the othe...
Model for drag between phases.
Definition: dragModel.H:55
virtual tmp< volScalarField > K() const =0
Return the drag coefficient K.
static const dimensionSet dimK
Coefficient dimensions.
Definition: dragModel.H:81
Eddy viscosity turbulence model base class.
Definition: eddyViscosity.H:52
Finite volume constraints.
Definition: fvConstraints.H:68
bool constrain(fvMatrix< Type > &eqn) const
Apply constraints to an equation.
A special matrix type and solver, designed for finite volume solutions of scalar equations....
Definition: fvMatrix.H:118
void relax(const scalar alpha)
Relax matrix (for steady-state solution).
Definition: fvMatrix.C:602
SolverPerformance< Type > solve(const dictionary &)
Solve segregated or coupled returning the solution statistics.
Definition: fvMatrixSolve.C:58
Finite volume models.
Definition: fvModels.H:69
tmp< fvMatrix< Type > > source(const VolField< Type > &field) const
Return source for an equation.
Abstract base class for momentum transport models (RAS, LES and laminar).
const phaseSystem & fluid() const
Return the system to which this phase belongs.
Definition: phaseModel.C:110
virtual tmp< volVectorField > U() const =0
Return the velocity.
Class to represent a system of phases.
Definition: phaseSystem.H:74
bool foundInterfacialModel(const phaseInterface &interface) const
Check availability of a sub model for a given interface.
const ModelType & lookupInterfacialModel(const phaseInterface &interface) const
Return a sub model for an interface.
A class for managing temporary objects.
Definition: tmp.H:55
Template function which returns the un-mangled name of a given type. Useful for types which do not ha...
An abstract base class for Newtonian viscosity models.
Abstract base class for all fluid physical properties.
Definition: viscosity.H:50
A class for handling words, derived from string.
Definition: word.H:63
static const word null
An empty word.
Definition: word.H:78
Foam::fvConstraints & fvConstraints(Foam::fvConstraints::New(mesh))
Foam::fvModels & fvModels(Foam::fvModels::New(mesh))
Foam::fvMesh mesh(Foam::IOobject(regionName, runTime.name(), runTime, Foam::IOobject::MUST_READ), false)
#define NotImplemented
Issue a FatalErrorIn for a function not currently implemented.
Definition: error.H:381
#define FatalIOErrorInFunction(ios)
Report an error message using Foam::FatalIOError.
Definition: error.H:346
const vector tau
Calculate the first temporal derivative.
Calculate the field for explicit evaluation of implicit and explicit sources.
label patchi
U
Definition: pEqn.H:72
rho
Definition: pEqn.H:1
volScalarField alpha(IOobject("alpha", runTime.name(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE), lambda *max(Ua &U, zeroSensitivity))
const dimensionSet dimless
const dimensionSet time
const dimensionSet kinematicStress
static tmp< SurfaceField< Type > > interpolate(const VolField< Type > &tvf, const surfaceScalarField &faceFlux, Istream &schemeData)
Interpolate field onto faces using scheme given by Istream.
tmp< VolField< Type > > ddt(const dimensioned< Type > dt, const fvMesh &mesh)
Definition: fvcDdt.C:45
static tmp< SurfaceField< typename innerProduct< vector, Type >::type > > dotInterpolate(const surfaceVectorField &Sf, const VolField< Type > &tvf)
Interpolate field onto faces.
tmp< VolField< typename outerProduct< vector, Type >::type > > grad(const SurfaceField< Type > &ssf)
Definition: fvcGrad.C:46
tmp< VolField< Type > > div(const SurfaceField< Type > &ssf)
Definition: fvcDiv.C:47
tmp< SurfaceField< Type > > snGrad(const VolField< Type > &vf, const word &name)
Definition: fvcSnGrad.C:45
tmp< fvMatrix< Type > > laplacian(const VolField< Type > &vf, const word &name)
Definition: fvmLaplacian.C:47
tmp< fvMatrix< Type > > div(const surfaceScalarField &flux, const VolField< Type > &vf, const word &name)
Definition: fvmDiv.C:48
tmp< fvMatrix< Type > > Sp(const volScalarField::Internal &, const VolField< Type > &)
tmp< fvMatrix< Type > > SuSp(const volScalarField::Internal &, const VolField< Type > &)
tmp< fvMatrix< Type > > ddt(const VolField< Type > &vf)
Definition: fvmDdt.C:46
static const coefficient D("D", dimTemperature, 257.14)
const unitSet & lookup(const word &unitName)
Lookup and return the named unit from the table.
Definition: units.C:346
errorManipArg< error, int > exit(error &err, const int errNo=1)
Definition: errorManip.H:124
const doubleScalar e
Definition: doubleScalar.H:106
bool read(const char *, int32_t &)
Definition: int32IO.C:85
To & refCast(From &r)
Reference type cast template function.
Definition: typeInfo.H:141
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:288
messageStream Info
void dev2(pointPatchField< tensor > &, const pointPatchField< tensor > &)
static const Identity< scalar > I
Definition: Identity.H:93
void tr(pointPatchField< scalar > &, const pointPatchField< tensor > &)
tmp< DimensionedField< typename outerProduct< Type, Type >::type, GeoMesh, Field >> sqr(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)
void dev(pointPatchField< tensor > &, const pointPatchField< tensor > &)
dimensioned< Type > min(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)
word typedName(Name name)
Return the name of the object within the given type.
Definition: typeInfo.H:188
void symm(pointPatchField< tensor > &, const pointPatchField< tensor > &)
IOerror FatalIOError
word name(const LagrangianState state)
Return a string representation of a Lagrangian state enumeration.
void twoSymm(pointPatchField< tensor > &, const pointPatchField< tensor > &)
void sqrt(LagrangianPatchField< scalar > &f, const LagrangianPatchField< scalar > &f1)
tmp< DimensionedField< scalar, GeoMesh, Field > > magSqr(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)
tmp< DimensionedField< TypeR, GeoMesh, Field > > New(const tmp< DimensionedField< TypeR, GeoMesh, Field >> &tdf1, const word &name, const dimensionSet &dimensions)
void T(GeometricField< Type, GeoMesh, PrimitiveField1 > &gf, const GeometricField< Type, GeoMesh, PrimitiveField2 > &gf1)
static const char nl
Definition: Ostream.H:297
dimensioned< Type > max(const DimensionedField< Type, GeoMesh, PrimitiveField > &df)
fileType type(const fileName &, const bool checkVariants=true, const bool followLink=true)
Return the file type: directory or file.
Definition: POSIX.C:488