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-2021 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 "fvModels.H"
30 #include "fvConstraints.H"
31 
32 // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
33 
34 const Foam::phaseModel&
35 Foam::RASModels::kineticTheoryModel::continuousPhase() const
36 {
37  const phaseSystem& fluid = phase_.fluid();
38 
39  if (continuousPhaseName_ == word::null)
40  {
41  if (fluid.movingPhases().size() != 2)
42  {
44  << "Continuous phase name must be specified "
45  << "when there are more than two moving phases."
46  << exit(FatalIOError);
47  }
48 
49  forAll(fluid.movingPhases(), movingPhasei)
50  {
51  const phaseModel& otherPhase = fluid.movingPhases()[movingPhasei];
52 
53  if (&otherPhase != &phase_)
54  {
55  return otherPhase;
56  }
57  }
58  }
59 
60  return fluid.phases()[continuousPhaseName_];
61 };
62 
63 
64 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
65 
67 (
68  const volScalarField& alpha,
69  const volScalarField& rho,
70  const volVectorField& U,
71  const surfaceScalarField& alphaRhoPhi,
72  const surfaceScalarField& phi,
73  const transportModel& transport,
74  const word& type
75 )
76 :
77  eddyViscosity<RASModel<phaseCompressible::momentumTransportModel>>
78  (
79  type,
80  alpha,
81  rho,
82  U,
83  alphaRhoPhi,
84  phi,
85  transport
86  ),
87 
88  phase_(refCast<const phaseModel>(transport)),
89 
90  continuousPhaseName_
91  (
92  coeffDict_.lookupOrDefault("continuousPhase", word::null)
93  ),
94 
95  viscosityModel_
96  (
97  kineticTheoryModels::viscosityModel::New
98  (
100  )
101  ),
102  conductivityModel_
103  (
104  kineticTheoryModels::conductivityModel::New
105  (
106  coeffDict_
107  )
108  ),
109  radialModel_
110  (
111  kineticTheoryModels::radialModel::New
112  (
113  coeffDict_
114  )
115  ),
116  granularPressureModel_
117  (
118  kineticTheoryModels::granularPressureModel::New
119  (
120  coeffDict_
121  )
122  ),
123  frictionalStressModel_
124  (
125  kineticTheoryModels::frictionalStressModel::New
126  (
127  coeffDict_
128  )
129  ),
130 
131  equilibrium_(coeffDict_.lookup("equilibrium")),
132  e_("e", dimless, coeffDict_),
133  alphaMax_("alphaMax", dimless, coeffDict_),
134  alphaMinFriction_
135  (
136  "alphaMinFriction",
137  dimless,
138  coeffDict_
139  ),
140  residualAlpha_
141  (
142  "residualAlpha",
143  dimless,
144  coeffDict_
145  ),
146 
147  maxNut_
148  (
149  "maxNut",
150  dimensionSet(0, 2, -1, 0, 0),
151  coeffDict_.lookupOrDefault<scalar>("maxNut", 1000)
152  ),
153 
154  Theta_
155  (
156  IOobject
157  (
158  IOobject::groupName("Theta", phase_.name()),
159  U.time().timeName(),
160  U.mesh(),
163  ),
164  U.mesh()
165  ),
166 
167  lambda_
168  (
169  IOobject
170  (
171  IOobject::groupName("lambda", phase_.name()),
172  U.time().timeName(),
173  U.mesh(),
174  IOobject::NO_READ,
176  ),
177  U.mesh(),
178  dimensionedScalar(dimensionSet(0, 2, -1, 0, 0), 0)
179  ),
180 
181  gs0_
182  (
183  IOobject
184  (
185  IOobject::groupName("gs0", phase_.name()),
186  U.time().timeName(),
187  U.mesh(),
188  IOobject::NO_READ,
190  ),
191  U.mesh(),
192  dimensionedScalar(dimensionSet(0, 0, 0, 0, 0), 0)
193  ),
194 
195  kappa_
196  (
197  IOobject
198  (
199  IOobject::groupName("kappa", phase_.name()),
200  U.time().timeName(),
201  U.mesh(),
202  IOobject::NO_READ,
204  ),
205  U.mesh(),
206  dimensionedScalar(dimensionSet(1, -1, -1, 0, 0), 0)
207  ),
208 
209  nuFric_
210  (
211  IOobject
212  (
213  IOobject::groupName("nuFric", phase_.name()),
214  U.time().timeName(),
215  U.mesh(),
216  IOobject::NO_READ,
218  ),
219  U.mesh(),
220  dimensionedScalar(dimensionSet(0, 2, -1, 0, 0), 0)
221  )
222 {
223  if (type == typeName)
224  {
225  printCoeffs(type);
226  }
227 }
228 
229 
230 // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
231 
233 {}
234 
235 
236 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
237 
239 {
240  if
241  (
242  eddyViscosity<RASModel<phaseCompressible::momentumTransportModel>>::
243  read()
244  )
245  {
246  coeffDict().lookup("equilibrium") >> equilibrium_;
247  e_.readIfPresent(coeffDict());
248  alphaMax_.readIfPresent(coeffDict());
249  alphaMinFriction_.readIfPresent(coeffDict());
250 
251  viscosityModel_->read();
252  conductivityModel_->read();
253  radialModel_->read();
254  granularPressureModel_->read();
255  frictionalStressModel_->read();
256 
257  return true;
258  }
259  else
260  {
261  return false;
262  }
263 }
264 
265 
268 {
270  return nut_;
271 }
272 
273 
276 {
278  return nut_;
279 }
280 
281 
284 {
285  return tmp<volSymmTensorField>
286  (
288  (
289  IOobject::groupName("R", U_.group()),
290  - (nut_)*dev(twoSymm(fvc::grad(U_)))
291  - (lambda_*fvc::div(phi_))*symmTensor::I
292  )
293  );
294 }
295 
296 
299 {
300  const volScalarField& rho = phase_.rho();
301 
302  tmp<volScalarField> tpPrime
303  (
305  (
306  IOobject::groupName("pPrime", U_.group()),
307  Theta_
308  *granularPressureModel_->granularPressureCoeffPrime
309  (
310  alpha_,
311  radialModel_->g0(alpha_, alphaMinFriction_, alphaMax_),
312  radialModel_->g0prime(alpha_, alphaMinFriction_, alphaMax_),
313  rho,
314  e_
315  )
316  + frictionalStressModel_->frictionalPressurePrime
317  (
318  phase_,
319  alphaMinFriction_,
320  alphaMax_
321  )
322  )
323  );
324 
325  volScalarField::Boundary& bpPrime = tpPrime.ref().boundaryFieldRef();
326 
327  forAll(bpPrime, patchi)
328  {
329  if (!bpPrime[patchi].coupled())
330  {
331  bpPrime[patchi] == 0;
332  }
333  }
334 
335  return tpPrime;
336 }
337 
338 
341 {
343  (
344  IOobject::groupName("pPrimef", U_.group()),
345  fvc::interpolate(pPrime())
346  );
347 }
348 
349 
352 {
353  return tmp<volSymmTensorField>
354  (
356  (
357  IOobject::groupName("devTau", U_.group()),
358  - (rho_*nut_)
359  *dev(twoSymm(fvc::grad(U_)))
360  - ((rho_*lambda_)*fvc::div(phi_))*symmTensor::I
361  )
362  );
363 }
364 
365 
368 (
369  volVectorField& U
370 ) const
371 {
372  return
373  (
374  - fvm::laplacian(rho_*nut_, U)
375  - fvc::div
376  (
377  (rho_*nut_)*dev2(T(fvc::grad(U)))
378  + ((rho_*lambda_)*fvc::div(phi_))
379  *dimensioned<symmTensor>("I", dimless, symmTensor::I)
380  )
381  );
382 }
383 
384 
386 {
387  // Local references
388  const volScalarField alpha(max(alpha_, scalar(0)));
389  const phaseSystem& fluid = phase_.fluid();
390  const phaseModel& continuousPhase = this->continuousPhase();
391  const volScalarField& rho = phase_.rho();
392  const surfaceScalarField& alphaRhoPhi = alphaRhoPhi_;
393  const volVectorField& U = U_;
394  const volVectorField& Uc_ = continuousPhase.U();
395 
396  const scalar sqrtPi = sqrt(constant::mathematical::pi);
397  const dimensionedScalar ThetaSmall("ThetaSmall", Theta_.dimensions(), 1e-6);
398  const dimensionedScalar ThetaSmallSqrt(sqrt(ThetaSmall));
399 
400  tmp<volScalarField> tda(phase_.d());
401  const volScalarField& da = tda();
402 
403  tmp<volTensorField> tgradU(fvc::grad(U_));
404  const volTensorField& gradU(tgradU());
405  const volSymmTensorField D(symm(gradU));
406 
407  // Calculating the radial distribution function
408  gs0_ = radialModel_->g0(alpha, alphaMinFriction_, alphaMax_);
409 
410  if (!equilibrium_)
411  {
412  // Particle viscosity (Table 3.2, p.47)
413  nut_ = viscosityModel_->nu(alpha, Theta_, gs0_, rho, da, e_);
414 
415  const volScalarField ThetaSqrt("sqrtTheta", sqrt(Theta_));
416 
417  // Bulk viscosity p. 45 (Lun et al. 1984).
418  lambda_ = (4.0/3.0)*sqr(alpha)*da*gs0_*(1 + e_)*ThetaSqrt/sqrtPi;
419 
420  // Stress tensor, Definitions, Table 3.1, p. 43
421  const volSymmTensorField tau
422  (
423  rho*(2*nut_*D + (lambda_ - (2.0/3.0)*nut_)*tr(D)*I)
424  );
425 
426  // Dissipation (Eq. 3.24, p.50)
427  const volScalarField gammaCoeff
428  (
429  "gammaCoeff",
430  12*(1 - sqr(e_))
431  *max(sqr(alpha), residualAlpha_)
432  *rho*gs0_*(1.0/da)*ThetaSqrt/sqrtPi
433  );
434 
435  // Drag
436  const volScalarField beta
437  (
438  fluid.foundSubModel<dragModel>(phase_, continuousPhase)
439  ? fluid.lookupSubModel<dragModel>(phase_, continuousPhase).K()
441  (
442  "beta",
443  phase_.mesh(),
445  )
446  );
447 
448  // Eq. 3.25, p. 50 Js = J1 - J2
449  const volScalarField J1("J1", 3*beta);
450  const volScalarField J2
451  (
452  "J2",
453  0.25*sqr(beta)*da*magSqr(U - Uc_)
454  /(
455  max(alpha, residualAlpha_)*rho
456  *sqrtPi*(ThetaSqrt + ThetaSmallSqrt)
457  )
458  );
459 
460  // particle pressure - coefficient in front of Theta (Eq. 3.22, p. 45)
461  const volScalarField PsCoeff
462  (
463  granularPressureModel_->granularPressureCoeff
464  (
465  alpha,
466  gs0_,
467  rho,
468  e_
469  )
470  );
471 
472  // 'thermal' conductivity (Table 3.3, p. 49)
473  kappa_ = conductivityModel_->kappa(alpha, Theta_, gs0_, rho, da, e_);
474 
477  (
479  );
480 
481  // Construct the granular temperature equation (Eq. 3.20, p. 44)
482  // NB. note that there are two typos in Eq. 3.20:
483  // Ps should be without grad
484  // the laplacian has the wrong sign
485  fvScalarMatrix ThetaEqn
486  (
487  1.5*
488  (
489  fvm::ddt(alpha, rho, Theta_)
490  + fvm::div(alphaRhoPhi, Theta_)
491  - fvc::Sp(fvc::ddt(alpha, rho) + fvc::div(alphaRhoPhi), Theta_)
492  )
493  - fvm::laplacian(kappa_, Theta_, "laplacian(kappa,Theta)")
494  ==
495  - fvm::SuSp((PsCoeff*I) && gradU, Theta_)
496  + (tau && gradU)
497  + fvm::Sp(-gammaCoeff, Theta_)
498  + fvm::Sp(-J1, Theta_)
499  + fvm::Sp(J2/(Theta_ + ThetaSmall), Theta_)
500  + fvModels.source(alpha, rho, Theta_)
501  );
502 
503  ThetaEqn.relax();
504  fvConstraints.constrain(ThetaEqn);
505  ThetaEqn.solve();
506  fvConstraints.constrain(Theta_);
507  }
508  else
509  {
510  // Equilibrium => dissipation == production
511  // Eq. 4.14, p.82
512  const volScalarField K1("K1", 2*(1 + e_)*rho*gs0_);
513  const volScalarField K3
514  (
515  "K3",
516  0.5*da*rho*
517  (
518  (sqrtPi/(3*(3.0 - e_)))
519  *(1 + 0.4*(1 + e_)*(3*e_ - 1)*alpha*gs0_)
520  +1.6*alpha*gs0_*(1 + e_)/sqrtPi
521  )
522  );
523 
524  const volScalarField K2
525  (
526  "K2",
527  4*da*rho*(1 + e_)*alpha*gs0_/(3*sqrtPi) - 2*K3/3.0
528  );
529 
530  const volScalarField K4("K4", 12*(1 - sqr(e_))*rho*gs0_/(da*sqrtPi));
531 
532  const volScalarField trD
533  (
534  "trD",
535  alpha/(alpha + residualAlpha_)
536  *fvc::div(phi_)
537  );
538  const volScalarField tr2D("tr2D", sqr(trD));
539  const volScalarField trD2("trD2", tr(D & D));
540 
541  const volScalarField t1("t1", K1*alpha + rho);
542  const volScalarField l1("l1", -t1*trD);
543  const volScalarField l2("l2", sqr(t1)*tr2D);
544  const volScalarField l3
545  (
546  "l3",
547  4.0
548  *K4
549  *alpha
550  *(2*K3*trD2 + K2*tr2D)
551  );
552 
553  Theta_ = sqr
554  (
555  (l1 + sqrt(l2 + l3))
556  /(2*max(alpha, residualAlpha_)*K4)
557  );
558 
559  kappa_ = conductivityModel_->kappa(alpha, Theta_, gs0_, rho, da, e_);
560  }
561 
562  Theta_.max(0);
563  Theta_.min(100);
564 
565  {
566  // particle viscosity (Table 3.2, p.47)
567  nut_ = viscosityModel_->nu(alpha, Theta_, gs0_, rho, da, e_);
568 
569  const volScalarField ThetaSqrt("sqrtTheta", sqrt(Theta_));
570 
571  // Bulk viscosity p. 45 (Lun et al. 1984).
572  lambda_ = (4.0/3.0)*sqr(alpha)*da*gs0_*(1 + e_)*ThetaSqrt/sqrtPi;
573 
574  // Frictional pressure
575  const volScalarField pf
576  (
577  frictionalStressModel_->frictionalPressure
578  (
579  phase_,
580  alphaMinFriction_,
581  alphaMax_
582  )
583  );
584 
585  // Limit viscosity
586  nut_.min(maxNut_);
587 
588  nuFric_ = min
589  (
590  frictionalStressModel_->nu
591  (
592  phase_,
593  alphaMinFriction_,
594  alphaMax_,
595  pf/rho,
596  D
597  ),
598  maxNut_ - nut_
599  );
600 
601  // Add frictional viscosity
602  nut_ += nuFric_;
603  }
604 
605  if (debug)
606  {
607  Info<< typeName << ':' << nl
608  << " max(Theta) = " << max(Theta_).value() << nl
609  << " max(nut) = " << max(nut_).value() << endl;
610  }
611 }
612 
613 
614 // ************************************************************************* //
GeometricField< symmTensor, fvPatchField, volMesh > volSymmTensorField
Definition: volFieldsFwd.H:61
virtual tmp< volSymmTensorField > devTau() const
Return the effective stress tensor.
tmp< GeometricField< typename outerProduct< vector, Type >::type, fvPatchField, volMesh >> grad(const GeometricField< Type, fvsPatchField, surfaceMesh > &ssf)
Definition: fvcGrad.C:52
fvMatrix< scalar > fvScalarMatrix
Definition: fvMatricesFwd.H:42
#define forAll(list, i)
Loop across all elements in list.
Definition: UList.H:434
virtual tmp< volScalarField > epsilon() const
Return the turbulence kinetic energy dissipation rate.
tmp< fvMatrix< Type > > SuSp(const volScalarField::Internal &, const GeometricField< Type, fvPatchField, volMesh > &)
static autoPtr< RASModel > New(const alphaField &alpha, const rhoField &rho, const volVectorField &U, const surfaceScalarField &alphaRhoPhi, const surfaceScalarField &phi, const transportModel &transport)
Return a reference to the selected RAS model.
Definition: RASModel.C:114
errorManipArg< error, int > exit(error &err, const int errNo=1)
Definition: errorManip.H:124
#define K1
Definition: SHA1.C:167
virtual tmp< volSymmTensorField > sigma() const
Return the stress tensor [m^2/s^2].
#define K4
Definition: SHA1.C:170
dimensioned< Type > max(const dimensioned< Type > &, const dimensioned< Type > &)
#define K2
Definition: SHA1.C:168
virtual tmp< surfaceScalarField > pPrimef() const
Return the face-phase-pressure&#39;.
GeometricField< tensor, fvPatchField, volMesh > volTensorField
Definition: volFieldsFwd.H:62
dimensionedSymmTensor sqr(const dimensionedVector &dv)
tmp< GeometricField< Type, fvPatchField, volMesh > > div(const GeometricField< Type, fvsPatchField, surfaceMesh > &ssf)
Definition: fvcDiv.C:47
To & refCast(From &r)
Reference type cast template function.
Definition: typeInfo.H:106
virtual tmp< fvVectorMatrix > divDevTau(volVectorField &U) const
Return the source term for the momentum equation.
IOobject(const word &name, const fileName &instance, const objectRegistry &registry, readOption r=NO_READ, writeOption w=NO_WRITE, bool registerObject=true)
Construct from name, instance, registry, io options.
Definition: IOobject.C:167
volScalarField alpha(IOobject("alpha", runTime.timeName(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE), lambda *max(Ua &U, zeroSensitivity))
#define K3
Definition: SHA1.C:169
static tmp< GeometricField< symmTensor, fvPatchField, volMesh > > New(const word &name, const Internal &, const PtrList< fvPatchField< symmTensor >> &)
Return a temporary field constructed from name,.
dimensionedScalar sqrt(const dimensionedScalar &ds)
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:251
tmp< GeometricField< Type, fvPatchField, volMesh > > Sp(const volScalarField &sp, const GeometricField< Type, fvPatchField, volMesh > &vf)
Definition: fvcSup.C:67
const dimensionSet dimless
tmp< fvMatrix< Type > > Sp(const volScalarField::Internal &, const GeometricField< Type, fvPatchField, volMesh > &)
GeometricField< vector, fvPatchField, volMesh > volVectorField
Definition: volFieldsFwd.H:58
dimensionedSymmTensor twoSymm(const dimensionedSymmTensor &dt)
tmp< GeometricField< Type, fvPatchField, volMesh > > ddt(const dimensioned< Type > dt, const fvMesh &mesh)
Definition: fvcDdt.C:45
GeometricField< scalar, fvPatchField, volMesh > volScalarField
Definition: volFieldsFwd.H:57
dictionary coeffDict_
Model coefficients dictionary.
Definition: RASModel.H:68
dimensionedSymmTensor dev(const dimensionedSymmTensor &dt)
const fileName & name() const
Return the dictionary name.
Definition: dictionary.H:109
RASModel< phaseCompressible::momentumTransportModel > ::transportModel transportModel
Definition: eddyViscosity.H:72
static const SymmTensor I
Definition: SymmTensor.H:72
Foam::fvConstraints & fvConstraints
static word groupName(Name name, const word &group)
Finite volume models.
Definition: fvModels.H:60
tmp< fvMatrix< Type > > ddt(const GeometricField< Type, fvPatchField, volMesh > &vf)
Definition: fvmDdt.C:46
static const dictionary null
Null dictionary.
Definition: dictionary.H:242
static const word null
An empty word.
Definition: word.H:77
virtual void correct()
Solve the kinetic theory equations and correct the viscosity.
word timeName
Definition: getTimeIndex.H:3
void min(const dimensioned< Type > &)
dimensionedScalar tr(const dimensionedSphericalTensor &dt)
dimensioned< scalar > magSqr(const dimensioned< Type > &)
virtual ~kineticTheoryModel()
Destructor.
static const char nl
Definition: Ostream.H:260
tmp< fvMatrix< Type > > div(const surfaceScalarField &flux, const GeometricField< Type, fvPatchField, volMesh > &vf, const word &name)
Definition: fvmDiv.C:46
static autoPtr< dictionary > New(Istream &)
Construct top-level dictionary on freestore from Istream.
Definition: dictionaryIO.C:96
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
dimensioned< Type > min(const dimensioned< Type > &, const dimensioned< Type > &)
momentumTransportModel(const volVectorField &U, const surfaceScalarField &alphaRhoPhi, const surfaceScalarField &phi)
Construct from components.
static tmp< GeometricField< Type, fvsPatchField, surfaceMesh > > interpolate(const GeometricField< Type, fvPatchField, volMesh > &tvf, const surfaceScalarField &faceFlux, Istream &schemeData)
Interpolate field onto faces using scheme given by Istream.
bool constrain(fvMatrix< Type > &eqn) const
Apply constraints to an equation.
Foam::fvModels & fvModels
label patchi
dimensionedSymmTensor dev2(const dimensionedSymmTensor &dt)
static const dimensionSet dimK
Coefficient dimensions.
Definition: dragModel.H:93
T lookupOrDefault(const word &, const T &, bool recursive=false, bool patternMatch=true) const
Find and return a T,.
#define FatalIOErrorInFunction(ios)
Report an error message using Foam::FatalIOError.
Definition: error.H:335
Finite volume constraints.
Definition: fvConstraints.H:57
dimensionedSymmTensor symm(const dimensionedSymmTensor &dt)
dimensioned< scalar > dimensionedScalar
Dimensioned scalar obtained from generic dimensioned type.
tmp< fvMatrix< Type > > laplacian(const GeometricField< Type, fvPatchField, volMesh > &vf, const word &name)
Definition: fvmLaplacian.C:46
virtual tmp< volScalarField > pPrime() const
Return the phase-pressure&#39;.
const phaseSystem & fluid() const
Return the system to which this phase belongs.
eddyViscosity(const word &modelName, const alphaField &alpha, const rhoField &rho, const volVectorField &U, const surfaceScalarField &alphaRhoPhi, const surfaceScalarField &phi, const transportModel &transport)
Construct from components.
Definition: eddyViscosity.C:34
virtual bool read()
Re-read model coefficients if they have changed.
messageStream Info
virtual tmp< volScalarField > k() const
Return the turbulence kinetic energy.
RASModel(const word &type, const alphaField &alpha, const rhoField &rho, const volVectorField &U, const surfaceScalarField &alphaRhoPhi, const surfaceScalarField &phi, const transportModel &transport)
Construct from components.
Definition: RASModel.C:44
const doubleScalar e
Elementary charge.
Definition: doubleScalar.H:105
A class for managing temporary objects.
Definition: PtrList.H:53
GeometricField< scalar, fvsPatchField, surfaceMesh > surfaceScalarField
kineticTheoryModel(const volScalarField &alpha, const volScalarField &rho, const volVectorField &U, const surfaceScalarField &alphaRhoPhi, const surfaceScalarField &phi, const transportModel &transport, const word &type=typeName)
Construct from components.
#define NotImplemented
Issue a FatalErrorIn for a function not currently implemented.
Definition: error.H:370
Single incompressible phase derived from the phase-fraction. Used as part of the multiPhaseMixture fo...
Definition: phaseModel.H:53
ITstream & lookup(const word &, bool recursive=false, bool patternMatch=true) const
Find and return an entry data stream.
Definition: dictionary.C:844
IOerror FatalIOError