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-2022 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 viscosity& viscosity,
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  viscosity
86  ),
87 
88  phase_(refCast<const phaseModel>(viscosity)),
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  alphaMinFriction_
134  (
135  "alphaMinFriction",
136  dimless,
137  coeffDict_
138  ),
139  residualAlpha_
140  (
141  "residualAlpha",
142  dimless,
143  coeffDict_
144  ),
145 
146  maxNut_
147  (
148  "maxNut",
149  dimensionSet(0, 2, -1, 0, 0),
150  coeffDict_.lookupOrDefault<scalar>("maxNut", 1000)
151  ),
152 
153  Theta_
154  (
155  IOobject
156  (
157  IOobject::groupName("Theta", phase_.name()),
158  U.time().timeName(),
159  U.mesh(),
162  ),
163  U.mesh()
164  ),
165 
166  lambda_
167  (
168  IOobject
169  (
170  IOobject::groupName("lambda", phase_.name()),
171  U.time().timeName(),
172  U.mesh(),
173  IOobject::NO_READ,
175  ),
176  U.mesh(),
177  dimensionedScalar(dimensionSet(0, 2, -1, 0, 0), 0)
178  ),
179 
180  gs0_
181  (
182  IOobject
183  (
184  IOobject::groupName("gs0", phase_.name()),
185  U.time().timeName(),
186  U.mesh(),
187  IOobject::NO_READ,
189  ),
190  U.mesh(),
191  dimensionedScalar(dimensionSet(0, 0, 0, 0, 0), 0)
192  ),
193 
194  kappa_
195  (
196  IOobject
197  (
198  IOobject::groupName("kappa", phase_.name()),
199  U.time().timeName(),
200  U.mesh(),
201  IOobject::NO_READ,
203  ),
204  U.mesh(),
205  dimensionedScalar(dimensionSet(1, -1, -1, 0, 0), 0)
206  ),
207 
208  nuFric_
209  (
210  IOobject
211  (
212  IOobject::groupName("nuFric", phase_.name()),
213  U.time().timeName(),
214  U.mesh(),
215  IOobject::NO_READ,
217  ),
218  U.mesh(),
219  dimensionedScalar(dimensionSet(0, 2, -1, 0, 0), 0)
220  )
221 {
222  if (type == typeName)
223  {
224  printCoeffs(type);
225  }
226 }
227 
228 
229 // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
230 
232 {}
233 
234 
235 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
236 
238 {
239  if
240  (
241  eddyViscosity<RASModel<phaseCompressible::momentumTransportModel>>::
242  read()
243  )
244  {
245  coeffDict().lookup("equilibrium") >> equilibrium_;
246  e_.readIfPresent(coeffDict());
247  alphaMinFriction_.readIfPresent(coeffDict());
248 
249  viscosityModel_->read();
250  conductivityModel_->read();
251  radialModel_->read();
252  granularPressureModel_->read();
253  frictionalStressModel_->read();
254 
255  return true;
256  }
257  else
258  {
259  return false;
260  }
261 }
262 
263 
266 {
268  return nut_;
269 }
270 
271 
274 {
276  return nut_;
277 }
278 
279 
282 {
284  return nut_;
285 }
286 
287 
290 {
291  return tmp<volSymmTensorField>
292  (
294  (
295  IOobject::groupName("R", U_.group()),
296  - (nut_)*dev(twoSymm(fvc::grad(U_)))
297  - (lambda_*fvc::div(phi_))*symmTensor::I
298  )
299  );
300 }
301 
302 
305 {
306  const volScalarField& rho = phase_.rho();
307 
308  tmp<volScalarField> tpPrime
309  (
311  (
312  IOobject::groupName("pPrime", U_.group()),
313  Theta_
314  *granularPressureModel_->granularPressureCoeffPrime
315  (
316  alpha_,
317  radialModel_->g0
318  (
319  alpha_,
320  alphaMinFriction_,
321  phase_.alphaMax()
322  ),
323  radialModel_->g0prime
324  (
325  alpha_,
326  alphaMinFriction_,
327  phase_.alphaMax()
328  ),
329  rho,
330  e_
331  )
332  + frictionalStressModel_->frictionalPressurePrime
333  (
334  phase_,
335  alphaMinFriction_,
336  phase_.alphaMax()
337  )
338  )
339  );
340 
341  volScalarField::Boundary& bpPrime = tpPrime.ref().boundaryFieldRef();
342 
343  forAll(bpPrime, patchi)
344  {
345  if (!bpPrime[patchi].coupled())
346  {
347  bpPrime[patchi] == 0;
348  }
349  }
350 
351  return tpPrime;
352 }
353 
354 
357 {
359  (
360  IOobject::groupName("pPrimef", U_.group()),
361  fvc::interpolate(pPrime())
362  );
363 }
364 
365 
368 {
369  return tmp<volSymmTensorField>
370  (
372  (
373  IOobject::groupName("devTau", U_.group()),
374  - (rho_*nut_)
375  *dev(twoSymm(fvc::grad(U_)))
376  - ((rho_*lambda_)*fvc::div(phi_))*symmTensor::I
377  )
378  );
379 }
380 
381 
384 (
385  volVectorField& U
386 ) const
387 {
388  return
389  (
390  - fvm::laplacian(rho_*nut_, U)
391  - fvc::div
392  (
393  (rho_*nut_)*dev2(T(fvc::grad(U)))
394  + ((rho_*lambda_)*fvc::div(phi_))
395  *dimensioned<symmTensor>("I", dimless, symmTensor::I),
396  "divDevTau(" + U_.name() + ')'
397  )
398  );
399 }
400 
401 
403 {
404  // Local references
405  const volScalarField alpha(max(alpha_, scalar(0)));
406  const phaseSystem& fluid = phase_.fluid();
407  const phaseModel& continuousPhase = this->continuousPhase();
408  const volScalarField& rho = phase_.rho();
409  const surfaceScalarField& alphaRhoPhi = alphaRhoPhi_;
410  const volVectorField& U = U_;
411  const volVectorField& Uc_ = continuousPhase.U();
412 
413  const scalar sqrtPi = sqrt(constant::mathematical::pi);
414  const dimensionedScalar ThetaSmall("ThetaSmall", Theta_.dimensions(), 1e-6);
415  const dimensionedScalar ThetaSmallSqrt(sqrt(ThetaSmall));
416 
417  tmp<volScalarField> tda(phase_.d());
418  const volScalarField& da = tda();
419 
420  tmp<volTensorField> tgradU(fvc::grad(U_));
421  const volTensorField& gradU(tgradU());
422  const volSymmTensorField D(symm(gradU));
423 
424  // Calculating the radial distribution function
425  gs0_ = radialModel_->g0(alpha, alphaMinFriction_, phase_.alphaMax());
426 
427  if (!equilibrium_)
428  {
429  // Particle viscosity (Table 3.2, p.47)
430  nut_ = viscosityModel_->nu(alpha, Theta_, gs0_, rho, da, e_);
431 
432  const volScalarField ThetaSqrt("sqrtTheta", sqrt(Theta_));
433 
434  // Bulk viscosity p. 45 (Lun et al. 1984).
435  lambda_ = (4.0/3.0)*sqr(alpha)*da*gs0_*(1 + e_)*ThetaSqrt/sqrtPi;
436 
437  // Stress tensor, Definitions, Table 3.1, p. 43
438  const volSymmTensorField tau
439  (
440  rho*(2*nut_*D + (lambda_ - (2.0/3.0)*nut_)*tr(D)*I)
441  );
442 
443  // Dissipation (Eq. 3.24, p.50)
444  const volScalarField gammaCoeff
445  (
446  "gammaCoeff",
447  12*(1 - sqr(e_))
448  *max(sqr(alpha), residualAlpha_)
449  *rho*gs0_*(1.0/da)*ThetaSqrt/sqrtPi
450  );
451 
452  // Drag
453  const dispersedPhaseInterface interface(phase_, continuousPhase);
454  const volScalarField beta
455  (
456  fluid.foundInterfacialModel<dragModel>(interface)
457  ? fluid.lookupInterfacialModel<dragModel>(interface).K()
459  (
460  "beta",
461  phase_.mesh(),
463  )
464  );
465 
466  // Eq. 3.25, p. 50 Js = J1 - J2
467  const volScalarField J1("J1", 3*beta);
468  const volScalarField J2
469  (
470  "J2",
471  0.25*sqr(beta)*da*magSqr(U - Uc_)
472  /(
473  max(alpha, residualAlpha_)*rho
474  *sqrtPi*(ThetaSqrt + ThetaSmallSqrt)
475  )
476  );
477 
478  // particle pressure - coefficient in front of Theta (Eq. 3.22, p. 45)
479  const volScalarField PsCoeff
480  (
481  granularPressureModel_->granularPressureCoeff
482  (
483  alpha,
484  gs0_,
485  rho,
486  e_
487  )
488  );
489 
490  // 'thermal' conductivity (Table 3.3, p. 49)
491  kappa_ = conductivityModel_->kappa(alpha, Theta_, gs0_, rho, da, e_);
492 
495  (
497  );
498 
499  // Construct the granular temperature equation (Eq. 3.20, p. 44)
500  // NB. note that there are two typos in Eq. 3.20:
501  // Ps should be without grad
502  // the laplacian has the wrong sign
503  fvScalarMatrix ThetaEqn
504  (
505  1.5*
506  (
507  fvm::ddt(alpha, rho, Theta_)
508  + fvm::div(alphaRhoPhi, Theta_)
509  - fvc::Sp(fvc::ddt(alpha, rho) + fvc::div(alphaRhoPhi), Theta_)
510  )
511  - fvm::laplacian(kappa_, Theta_, "laplacian(kappa,Theta)")
512  ==
513  - fvm::SuSp((PsCoeff*I) && gradU, Theta_)
514  + (tau && gradU)
515  + fvm::Sp(-gammaCoeff, Theta_)
516  + fvm::Sp(-J1, Theta_)
517  + fvm::Sp(J2/(Theta_ + ThetaSmall), Theta_)
518  + fvModels.source(alpha, rho, Theta_)
519  );
520 
521  ThetaEqn.relax();
522  fvConstraints.constrain(ThetaEqn);
523  ThetaEqn.solve();
524  fvConstraints.constrain(Theta_);
525  }
526  else
527  {
528  // Equilibrium => dissipation == production
529  // Eq. 4.14, p.82
530  const volScalarField K1("K1", 2*(1 + e_)*rho*gs0_);
531  const volScalarField K3
532  (
533  "K3",
534  0.5*da*rho*
535  (
536  (sqrtPi/(3*(3.0 - e_)))
537  *(1 + 0.4*(1 + e_)*(3*e_ - 1)*alpha*gs0_)
538  +1.6*alpha*gs0_*(1 + e_)/sqrtPi
539  )
540  );
541 
542  const volScalarField K2
543  (
544  "K2",
545  4*da*rho*(1 + e_)*alpha*gs0_/(3*sqrtPi) - 2*K3/3.0
546  );
547 
548  const volScalarField K4("K4", 12*(1 - sqr(e_))*rho*gs0_/(da*sqrtPi));
549 
550  const volScalarField trD
551  (
552  "trD",
553  alpha/(alpha + residualAlpha_)
554  *fvc::div(phi_)
555  );
556  const volScalarField tr2D("tr2D", sqr(trD));
557  const volScalarField trD2("trD2", tr(D & D));
558 
559  const volScalarField t1("t1", K1*alpha + rho);
560  const volScalarField l1("l1", -t1*trD);
561  const volScalarField l2("l2", sqr(t1)*tr2D);
562  const volScalarField l3
563  (
564  "l3",
565  4.0
566  *K4
567  *alpha
568  *(2*K3*trD2 + K2*tr2D)
569  );
570 
571  Theta_ = sqr
572  (
573  (l1 + sqrt(l2 + l3))
574  /(2*max(alpha, residualAlpha_)*K4)
575  );
576 
577  kappa_ = conductivityModel_->kappa(alpha, Theta_, gs0_, rho, da, e_);
578  }
579 
580  Theta_.max(0);
581  Theta_.min(100);
582 
583  {
584  // particle viscosity (Table 3.2, p.47)
585  nut_ = viscosityModel_->nu(alpha, Theta_, gs0_, rho, da, e_);
586 
587  const volScalarField ThetaSqrt("sqrtTheta", sqrt(Theta_));
588 
589  // Bulk viscosity p. 45 (Lun et al. 1984).
590  lambda_ = (4.0/3.0)*sqr(alpha)*da*gs0_*(1 + e_)*ThetaSqrt/sqrtPi;
591 
592  // Frictional pressure
593  const volScalarField pf
594  (
595  frictionalStressModel_->frictionalPressure
596  (
597  phase_,
598  alphaMinFriction_,
599  phase_.alphaMax()
600  )
601  );
602 
603  // Limit viscosity
604  nut_.min(maxNut_);
605 
606  nuFric_ = min
607  (
608  frictionalStressModel_->nu
609  (
610  phase_,
611  alphaMinFriction_,
612  phase_.alphaMax(),
613  pf/rho,
614  D
615  ),
616  maxNut_ - nut_
617  );
618 
619  // Add frictional viscosity
620  nut_ += nuFric_;
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 // ************************************************************************* //
GeometricField< symmTensor, fvPatchField, volMesh > volSymmTensorField
Definition: volFieldsFwd.H:62
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.
layerAndWeight max(const layerAndWeight &a, const layerAndWeight &b)
tmp< fvMatrix< Type > > SuSp(const volScalarField::Internal &, const GeometricField< Type, fvPatchField, volMesh > &)
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
#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:63
dimensionedSymmTensor sqr(const dimensionedVector &dv)
tmp< GeometricField< Type, fvPatchField, volMesh > > div(const GeometricField< Type, fvsPatchField, surfaceMesh > &ssf)
Definition: fvcDiv.C:47
eddyViscosity(const word &modelName, const alphaField &alpha, const rhoField &rho, const volVectorField &U, const surfaceScalarField &alphaRhoPhi, const surfaceScalarField &phi, const viscosity &viscosity)
Construct from components.
Definition: eddyViscosity.C:34
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
GeometricBoundaryField< scalar, fvPatchField, volMesh > Boundary
Type of the boundary field.
const dimensionSet dimless
tmp< fvMatrix< Type > > Sp(const volScalarField::Internal &, const GeometricField< Type, fvPatchField, volMesh > &)
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.
GeometricField< vector, fvPatchField, volMesh > volVectorField
Definition: volFieldsFwd.H:59
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:58
dictionary coeffDict_
Model coefficients dictionary.
Definition: RASModel.H:72
dimensionedSymmTensor dev(const dimensionedSymmTensor &dt)
const fileName & name() const
Return the dictionary name.
Definition: dictionary.H:109
static const SymmTensor I
Definition: SymmTensor.H:72
static autoPtr< RASModel > New(const alphaField &alpha, const rhoField &rho, const volVectorField &U, const surfaceScalarField &alphaRhoPhi, const surfaceScalarField &phi, const viscosity &viscosity)
Return a reference to the selected RAS model.
Definition: RASModel.C:135
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
momentumTransportModel(const volVectorField &U, const surfaceScalarField &alphaRhoPhi, const surfaceScalarField &phi, const viscosity &viscosity)
Construct from components.
layerAndWeight min(const layerAndWeight &a, const layerAndWeight &b)
virtual void correct()
Solve the kinetic theory equations and correct the viscosity.
word timeName
Definition: getTimeIndex.H:3
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
const word & name() const
Return const reference to name.
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
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:83
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:318
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.
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 viscosity &viscosity)
Construct from components.
Definition: RASModel.C:45
const doubleScalar e
Elementary charge.
Definition: doubleScalar.H:105
A class for managing temporary objects.
Definition: PtrList.H:53
GeometricField< scalar, fvsPatchField, surfaceMesh > surfaceScalarField
#define NotImplemented
Issue a FatalErrorIn for a function not currently implemented.
Definition: error.H:353
Single incompressible phase derived from the phase-fraction. Used as part of the multiPhaseMixture fo...
Definition: phaseModel.H:53
virtual tmp< volScalarField > omega() const
Return the turbulence specific dissipation rate.
ITstream & lookup(const word &, bool recursive=false, bool patternMatch=true) const
Find and return an entry data stream.
Definition: dictionary.C:864
IOerror FatalIOError