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-2025 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(coeffDict())
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  coeffDict().lookupOrDefault("continuousPhase", word::null)
95  ),
96 
97  viscosityModel_
98  (
99  kineticTheoryModels::viscosityModel::New
100  (
101  coeffDict()
102  )
103  ),
104  conductivityModel_
105  (
106  kineticTheoryModels::conductivityModel::New
107  (
108  coeffDict()
109  )
110  ),
111  radialModel_
112  (
113  kineticTheoryModels::radialModel::New
114  (
115  coeffDict()
116  )
117  ),
118  granularPressureModel_
119  (
120  kineticTheoryModels::granularPressureModel::New
121  (
122  coeffDict()
123  )
124  ),
125  frictionalStressModel_
126  (
127  kineticTheoryModels::frictionalStressModel::New
128  (
129  coeffDict()
130  )
131  ),
132 
133  equilibrium_(coeffDict().lookup("equilibrium")),
134  e_("e", dimless, coeffDict()),
135  alphaMinFriction_
136  (
137  "alphaMinFriction",
138  dimless,
139  coeffDict()
140  ),
141  residualAlpha_
142  (
143  "residualAlpha",
144  dimless,
145  coeffDict()
146  ),
147 
148  maxNut_
149  (
150  "maxNut",
151  dimensionSet(0, 2, -1, 0, 0),
152  coeffDict().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  ),
167 
168  lambda_
169  (
170  IOobject
171  (
172  IOobject::groupName(typedName("lambda"), phase_.name()),
173  U.time().name(),
174  U.mesh(),
175  IOobject::NO_READ,
176  IOobject::NO_WRITE
177  ),
178  U.mesh(),
179  dimensionedScalar(dimensionSet(0, 2, -1, 0, 0), 0)
180  ),
181 
182  gs0_
183  (
184  IOobject
185  (
186  IOobject::groupName(typedName("gs0"), phase_.name()),
187  U.time().name(),
188  U.mesh(),
189  IOobject::NO_READ,
190  IOobject::NO_WRITE
191  ),
192  U.mesh(),
193  dimensionedScalar(dimensionSet(0, 0, 0, 0, 0), 0)
194  ),
195 
196  kappa_
197  (
198  IOobject
199  (
200  IOobject::groupName(typedName("kappa"), phase_.name()),
201  U.time().name(),
202  U.mesh(),
203  IOobject::NO_READ,
204  IOobject::NO_WRITE
205  ),
206  U.mesh(),
207  dimensionedScalar(dimensionSet(1, -1, -1, 0, 0), 0)
208  ),
209 
210  nuFric_
211  (
212  IOobject
213  (
214  IOobject::groupName(typedName("nuFric"), phase_.name()),
215  U.time().name(),
216  U.mesh(),
217  IOobject::NO_READ,
218  IOobject::AUTO_WRITE
219  ),
220  U.mesh(),
221  dimensionedScalar(dimensionSet(0, 2, -1, 0, 0), 0)
222  )
223 {}
224 
225 
226 // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
227 
229 {}
230 
231 
232 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
233 
235 {
236  if
237  (
239  read()
240  )
241  {
242  const dictionary& coeffDict = this->coeffDict();
243  coeffDict.lookup("equilibrium") >> equilibrium_;
244  e_.readIfPresent(coeffDict);
245  alphaMinFriction_.readIfPresent(coeffDict);
246 
247  viscosityModel_->read(coeffDict);
248  conductivityModel_->read(coeffDict);
249  radialModel_->read(coeffDict);
250  granularPressureModel_->read(coeffDict);
251  frictionalStressModel_->read(coeffDict);
252 
253  return true;
254  }
255  else
256  {
257  return false;
258  }
259 }
260 
261 
264 {
266  return nut_;
267 }
268 
269 
272 {
274  return nut_;
275 }
276 
277 
280 {
282  return nut_;
283 }
284 
285 
288 {
290  (
292  (
293  IOobject::groupName("R", U_.group()),
294  - (nut_ + nuFric_)*dev(twoSymm(fvc::grad(U_)))
295  - (lambda_*fvc::div(phi_))*symmTensor::I
296  )
297  );
298 }
299 
300 
302 Foam::RASModels::kineticTheoryModel::pPrime() const
303 {
304  const volScalarField& rho = phase_.rho();
305 
306  tmp<volScalarField> tpPrime
307  (
309  (
310  IOobject::groupName("pPrime", U_.group()),
311  Theta_
312  *granularPressureModel_->granularPressureCoeffPrime
313  (
314  alpha_,
315  radialModel_->g0
316  (
317  alpha_,
318  alphaMinFriction_,
319  phase_.alphaMax()
320  ),
321  radialModel_->g0prime
322  (
323  alpha_,
324  alphaMinFriction_,
325  phase_.alphaMax()
326  ),
327  rho,
328  e_
329  )
330  + frictionalStressModel_->frictionalPressurePrime
331  (
332  phase_,
333  alphaMinFriction_,
334  phase_.alphaMax()
335  )
336  )
337  );
338 
339  volScalarField::Boundary& bpPrime = tpPrime.ref().boundaryFieldRef();
340 
341  forAll(bpPrime, patchi)
342  {
343  if (!bpPrime[patchi].coupled())
344  {
345  bpPrime[patchi] == 0;
346  }
347  }
348 
349  return tpPrime;
350 }
351 
352 
355 {
357  (
358  IOobject::groupName("pPrimef", U_.group()),
359  fvc::interpolate(pPrime())
360  );
361 }
362 
363 
366 {
367  const surfaceScalarField rhoNuEff(fvc::interpolate(rho_*(nut_ + nuFric_)));
368 
370  (
372  (
373  IOobject::groupName("devTau", U_.group()),
374  - rhoNuEff
375  *(
376  fvc::dotInterpolate(mesh().nf(), dev2(T(fvc::grad(U_))))
377  + fvc::snGrad(U_)
378  )
379  - fvc::interpolate((rho_*lambda_)*fvc::div(phi_))*mesh().nf()
380  )
381  );
382 }
383 
384 
387 (
389 ) const
390 {
391  const surfaceScalarField rhoNuEff(fvc::interpolate(rho_*(nut_ + nuFric_)));
392 
393  return
394  (
395  - fvc::div
396  (
397  rhoNuEff
399  + fvc::interpolate((rho_*lambda_)*fvc::div(phi_))*mesh().Sf()
400  )
401  - fvm::laplacian(rhoNuEff, U)
402  );
403 }
404 
405 
407 {
408  // Local references
409  const volScalarField alpha(max(alpha_, scalar(0)));
410  const phaseSystem& fluid = phase_.fluid();
411  const phaseModel& continuousPhase = this->continuousPhase();
412  const volScalarField& rho = phase_.rho();
413  const surfaceScalarField& alphaRhoPhi = alphaRhoPhi_;
414  const volVectorField& U = U_;
415 
416  tmp<volVectorField> tUc(continuousPhase.U());
417  const volVectorField& Uc = tUc();
418 
419  const scalar sqrtPi = sqrt(constant::mathematical::pi);
420  const dimensionedScalar ThetaSmall("ThetaSmall", Theta_.dimensions(), 1e-6);
421  const dimensionedScalar ThetaSmallSqrt(sqrt(ThetaSmall));
422 
423  tmp<volScalarField> tda(phase_.d());
424  const volScalarField& da = tda();
425 
426  tmp<volTensorField> tgradU(fvc::grad(U_));
427  const volTensorField& gradU(tgradU());
428  const volSymmTensorField D(symm(gradU));
429 
430  // Calculating the radial distribution function
431  gs0_ = radialModel_->g0(alpha, alphaMinFriction_, phase_.alphaMax());
432 
433  if (!equilibrium_)
434  {
435  // Particle viscosity (Table 3.2, p.47)
436  nut_ = viscosityModel_->nu(alpha, Theta_, gs0_, rho, da, e_);
437 
438  const volScalarField ThetaSqrt("sqrtTheta", sqrt(Theta_));
439 
440  // Bulk viscosity p. 45 (Lun et al. 1984).
441  lambda_ = (4.0/3.0)*sqr(alpha)*da*gs0_*(1 + e_)*ThetaSqrt/sqrtPi;
442 
443  // Stress tensor, Definitions, Table 3.1, p. 43
444  const volSymmTensorField tau
445  (
446  rho*(2*nut_*D + (lambda_ - (2.0/3.0)*nut_)*tr(D)*I)
447  );
448 
449  // Dissipation (Eq. 3.24, p.50)
450  const volScalarField gammaCoeff
451  (
452  "gammaCoeff",
453  12*(1 - sqr(e_))
454  *max(sqr(alpha), residualAlpha_)
455  *rho*gs0_*(1.0/da)*ThetaSqrt/sqrtPi
456  );
457 
458  // Drag
459  const dispersedPhaseInterface interface(phase_, continuousPhase);
460  const volScalarField beta
461  (
462  fluid.foundInterfacialModel<dragModel>(interface)
463  ? fluid.lookupInterfacialModel<dragModel>(interface).K()
465  (
466  "beta",
467  phase_.mesh(),
469  )
470  );
471 
472  // Eq. 3.25, p. 50 Js = J1 - J2
473  const volScalarField J1("J1", 3*beta);
474  const volScalarField J2
475  (
476  "J2",
477  0.25*sqr(beta)*da*magSqr(U - Uc)
478  /(
479  max(alpha, residualAlpha_)*rho
480  *sqrtPi*(ThetaSqrt + ThetaSmallSqrt)
481  )
482  );
483 
484  // particle pressure - coefficient in front of Theta (Eq. 3.22, p. 45)
485  const volScalarField PsCoeff
486  (
487  granularPressureModel_->granularPressureCoeff
488  (
489  alpha,
490  gs0_,
491  rho,
492  e_
493  )
494  );
495 
496  // 'thermal' conductivity (Table 3.3, p. 49)
497  kappa_ = conductivityModel_->kappa(alpha, Theta_, gs0_, rho, da, e_);
498 
501  (
503  );
504 
505  // Construct the granular temperature equation (Eq. 3.20, p. 44)
506  // NB. note that there are two typos in Eq. 3.20:
507  // Ps should be without grad
508  // the laplacian has the wrong sign
509  fvScalarMatrix ThetaEqn
510  (
511  1.5*(fvm::ddt(alpha, rho, Theta_) + fvm::div(alphaRhoPhi, Theta_))
512  - 0.5*fvm::Sp(fvc::ddt(alpha, rho) + fvc::div(alphaRhoPhi), Theta_)
513  - fvm::laplacian(kappa_, Theta_, "laplacian(kappa,Theta)")
514  ==
515  - fvm::SuSp((PsCoeff*I) && gradU, Theta_)
516  + (tau && gradU)
517  + fvm::Sp(-gammaCoeff, Theta_)
518  + fvm::Sp(-J1, Theta_)
519  + fvm::Sp(J2/(Theta_ + ThetaSmall), Theta_)
520  + fvModels.source(alpha, rho, Theta_)
521  );
522 
523  ThetaEqn.relax();
524  fvConstraints.constrain(ThetaEqn);
525  ThetaEqn.solve();
526  fvConstraints.constrain(Theta_);
527  }
528  else
529  {
530  // Equilibrium => dissipation == production
531  // Eq. 4.14, p.82
532  const volScalarField K1("K1", 2*(1 + e_)*rho*gs0_);
533  const volScalarField K3
534  (
535  "K3",
536  0.5*da*rho*
537  (
538  (sqrtPi/(3*(3.0 - e_)))
539  *(1 + 0.4*(1 + e_)*(3*e_ - 1)*alpha*gs0_)
540  +1.6*alpha*gs0_*(1 + e_)/sqrtPi
541  )
542  );
543 
544  const volScalarField K2
545  (
546  "K2",
547  4*da*rho*(1 + e_)*alpha*gs0_/(3*sqrtPi) - 2*K3/3.0
548  );
549 
550  const volScalarField K4("K4", 12*(1 - sqr(e_))*rho*gs0_/(da*sqrtPi));
551 
552  const volScalarField trD
553  (
554  "trD",
555  alpha/(alpha + residualAlpha_)
556  *fvc::div(phi_)
557  );
558  const volScalarField tr2D("tr2D", sqr(trD));
559  const volScalarField trD2("trD2", tr(D & D));
560 
561  const volScalarField t1("t1", K1*alpha + rho);
562  const volScalarField l1("l1", -t1*trD);
563  const volScalarField l2("l2", sqr(t1)*tr2D);
564  const volScalarField l3
565  (
566  "l3",
567  4.0
568  *K4
569  *alpha
570  *(2*K3*trD2 + K2*tr2D)
571  );
572 
573  Theta_ = sqr
574  (
575  (l1 + sqrt(l2 + l3))
576  /(2*max(alpha, residualAlpha_)*K4)
577  );
578 
579  kappa_ = conductivityModel_->kappa(alpha, Theta_, gs0_, rho, da, e_);
580  }
581 
582  Theta_.max(0);
583  Theta_.min(100);
584 
585  {
586  // particle viscosity (Table 3.2, p.47)
587  nut_ = viscosityModel_->nu(alpha, Theta_, gs0_, rho, da, e_);
588 
589  const volScalarField ThetaSqrt("sqrtTheta", sqrt(Theta_));
590 
591  // Bulk viscosity p. 45 (Lun et al. 1984).
592  lambda_ = (4.0/3.0)*sqr(alpha)*da*gs0_*(1 + e_)*ThetaSqrt/sqrtPi;
593 
594  // Frictional pressure
595  const volScalarField pf
596  (
597  frictionalStressModel_->frictionalPressure
598  (
599  phase_,
600  alphaMinFriction_,
601  phase_.alphaMax()
602  )
603  );
604 
605  // Limit viscosity
606  nut_.min(maxNut_);
607 
608  nuFric_ = min
609  (
610  frictionalStressModel_->nu
611  (
612  phase_,
613  alphaMinFriction_,
614  phase_.alphaMax(),
615  pf/rho,
616  D
617  ),
618  maxNut_ - nut_
619  );
620  }
621 
622  if (debug)
623  {
624  Info<< typeName << ':' << nl
625  << " max(Theta) = " << max(Theta_).value() << nl
626  << " max(nut) = " << max(nut_).value() << endl;
627  }
628 }
629 
630 
631 // ************************************************************************* //
#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:433
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:740
static autoPtr< dictionary > New(Istream &)
Construct top-level dictionary on freestore from Istream.
Definition: dictionaryIO.C:103
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:67
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:603
SolverPerformance< Type > solve(const dictionary &)
Solve segregated or coupled returning the solution statistics.
Definition: fvMatrixSolve.C:58
Finite volume models.
Definition: fvModels.H:65
tmp< fvMatrix< Type > > source(const VolField< Type > &field) const
Return source for an equation.
Abstract base class for turbulence models (RAS, LES and laminar).
const phaseSystem & fluid() const
Return the system to which this phase belongs.
Definition: phaseModel.C:163
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
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:62
static const word null
An empty word.
Definition: word.H:77
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
volScalarField alpha(IOobject("alpha", runTime.name(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE), lambda *max(Ua &U, zeroSensitivity))
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)
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:134
void dev2(LagrangianPatchField< tensor > &f, const LagrangianPatchField< tensor > &f1)
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:258
void dev(LagrangianPatchField< tensor > &f, const LagrangianPatchField< tensor > &f1)
void twoSymm(LagrangianPatchField< tensor > &f, const LagrangianPatchField< tensor > &f1)
const dimensionSet dimless
void T(LagrangianPatchField< Type > &f, const LagrangianPatchField< Type > &f1)
messageStream Info
static const Identity< scalar > I
Definition: Identity.H:93
layerAndWeight min(const layerAndWeight &a, const layerAndWeight &b)
void symm(LagrangianPatchField< tensor > &f, const LagrangianPatchField< tensor > &f1)
word typedName(Name name)
Return the name of the object within the given type.
Definition: typeInfo.H:181
layerAndWeight max(const layerAndWeight &a, const layerAndWeight &b)
IOerror FatalIOError
void sqr(LagrangianPatchField< typename outerProduct< Type, Type >::type > &f, const LagrangianPatchField< Type > &f1)
void tr(LagrangianPatchField< scalar > &f, const LagrangianPatchField< tensor > &f1)
word name(const LagrangianState state)
Return a string representation of a Lagrangian state enumeration.
void magSqr(LagrangianPatchField< scalar > &f, const LagrangianPatchField< Type > &f1)
void sqrt(LagrangianPatchField< scalar > &f, const LagrangianPatchField< scalar > &f1)
tmp< DimensionedField< TypeR, GeoMesh, Field > > New(const tmp< DimensionedField< TypeR, GeoMesh, Field >> &tdf1, const word &name, const dimensionSet &dimensions)
static const char nl
Definition: Ostream.H:267
fileType type(const fileName &, const bool checkVariants=true, const bool followLink=true)
Return the file type: directory or file.
Definition: POSIX.C:488