thermophysicalPredictor.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) 2022-2023 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 "XiFluid.H"
27 #include "fvcSnGrad.H"
28 #include "fvcLaplacian.H"
29 #include "fvcDdt.H"
30 #include "fvcMeshPhi.H"
31 #include "fvmDiv.H"
32 #include "fvmSup.H"
33 
34 // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
35 
37 (
39 )
40 {
41  volScalarField& ft = composition.Y("ft");
42 
43  fvScalarMatrix ftEqn
44  (
45  fvm::ddt(rho, ft)
46  + mvConvection.fvmDiv(phi, ft)
48  ==
49  fvModels().source(rho, ft)
50  );
51 
52  fvConstraints().constrain(ftEqn);
53 
54  ftEqn.solve();
55 
57 }
58 
59 
61 (
62  const volScalarField& c,
63  const surfaceScalarField& nf,
64  const dimensionedScalar& dMgb
65 ) const
66 {
67  dimensionedScalar StCorr("StCorr", dimless, 1.0);
68 
69  if (ign.igniting())
70  {
71  // Calculate volume of ignition kernel
72  const dimensionedScalar Vk("Vk", dimVolume, gSum(c*mesh.V().field()));
73  dimensionedScalar Ak("Ak", dimArea, 0.0);
74 
75  if (Vk.value() > small)
76  {
77  // Calculate kernel area from its volume
78  // and the dimensionality of the case
79 
80  switch(mesh.nGeometricD())
81  {
82  case 3:
83  {
84  // Assume it is part-spherical
85  const scalar sphereFraction
86  (
87  combustionProperties.lookup<scalar>
88  (
89  "ignitionSphereFraction"
90  )
91  );
92 
93  Ak = sphereFraction*4.0*constant::mathematical::pi
94  *pow
95  (
96  3.0*Vk
97  /(sphereFraction*4.0*constant::mathematical::pi),
98  2.0/3.0
99  );
100  }
101  break;
102 
103  case 2:
104  {
105  // Assume it is part-circular
106  const dimensionedScalar thickness
107  (
108  combustionProperties.lookup("ignitionThickness")
109  );
110 
111  const scalar circleFraction
112  (
113  combustionProperties.lookup<scalar>
114  (
115  "ignitionCircleFraction"
116  )
117  );
118 
119  Ak = circleFraction*constant::mathematical::pi*thickness
120  *sqrt
121  (
122  4.0*Vk
123  /(
124  circleFraction
125  *thickness
127  )
128  );
129  }
130  break;
131 
132  case 1:
133  // Assume it is plane or two planes
134  Ak = dimensionedScalar
135  (
136  combustionProperties.lookup("ignitionKernelArea")
137  );
138  break;
139  }
140 
141  // Calculate kernel area from b field consistent with the
142  // discretisation of the b equation.
143  const volScalarField mgb
144  (
145  fvc::div(nf, b, "div(phiSt,b)") - b*fvc::div(nf) + dMgb
146  );
147  const dimensionedScalar AkEst = gSum(mgb*mesh.V().field());
148 
149  StCorr.value() = max(min((Ak/AkEst).value(), 10.0), 1.0);
150 
151  Info<< "StCorr = " << StCorr.value() << endl;
152  }
153  }
154 
155  return StCorr;
156 }
157 
158 
160 (
162 )
163 {
164  volScalarField& b(b_);
165  volScalarField& Xi(Xi_);
166 
167  // progress variable
168  // ~~~~~~~~~~~~~~~~~
169  const volScalarField c("c", scalar(1) - b);
170 
171  // Unburnt gas density
172  // ~~~~~~~~~~~~~~~~~~~
173  const volScalarField rhou(thermo.rhou());
174 
175  // Calculate flame normal etc.
176  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~
177 
178  volVectorField n("n", fvc::grad(b));
179 
180  volScalarField mgb(mag(n));
181 
182  const dimensionedScalar dMgb = 1.0e-3*
183  (b*c*mgb)().weightedAverage(mesh.V())
184  /((b*c)().weightedAverage(mesh.V()) + small)
185  + dimensionedScalar(mgb.dimensions(), small);
186 
187  mgb += dMgb;
188 
189  const surfaceVectorField SfHat(mesh.Sf()/mesh.magSf());
191  nfVec += SfHat*(fvc::snGrad(b) - (SfHat & nfVec));
192  nfVec /= (mag(nfVec) + dMgb);
193  surfaceScalarField nf((mesh.Sf() & nfVec));
194  n /= mgb;
195 
196  // Calculate turbulent flame speed flux
197  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
198  const surfaceScalarField phiSt
199  (
200  "phiSt",
201  fvc::interpolate(rhou*StCorr(c, nf, dMgb)*Su*Xi)*nf
202  );
203 
204  const scalar StCoNum = max
205  (
206  mesh.surfaceInterpolation::deltaCoeffs()
207  *mag(phiSt)/(fvc::interpolate(rho)*mesh.magSf())
208  ).value()*runTime.deltaTValue();
209 
210  Info<< "Max St-Courant Number = " << StCoNum << endl;
211 
212  // Create b equation
213  // ~~~~~~~~~~~~~~~~~
214  fvScalarMatrix bEqn
215  (
216  fvm::ddt(rho, b)
217  + mvConvection.fvmDiv(phi, b)
218  + fvm::div(phiSt, b)
219  - fvm::Sp(fvc::div(phiSt), b)
221  ==
222  fvModels().source(rho, b)
223  );
224 
225 
226  // Add ignition cell contribution to b-equation
227  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
228  forAll(ign.sites(), i)
229  {
230  const ignitionSite& ignSite = ign.sites()[i];
231 
232  if (ignSite.igniting())
233  {
234  forAll(ignSite.cells(), icelli)
235  {
236  label ignCell = ignSite.cells()[icelli];
237  Info<< "Igniting cell " << ignCell;
238 
239  Info<< " state :"
240  << ' ' << b[ignCell]
241  << ' ' << Xi[ignCell]
242  << ' ' << Su[ignCell]
243  << ' ' << mgb[ignCell]
244  << endl;
245 
246  bEqn.diag()[ignSite.cells()[icelli]] +=
247  (
248  ignSite.strength()*ignSite.cellVolumes()[icelli]
249  *rhou[ignSite.cells()[icelli]]/ignSite.duration()
250  )/(b[ignSite.cells()[icelli]] + 0.001);
251  }
252  }
253  }
254 
255 
256  // Solve for b
257  // ~~~~~~~~~~~
258  bEqn.relax();
259 
260  fvConstraints().constrain(bEqn);
261 
262  bEqn.solve();
263 
265 
266  Info<< "min(b) = " << min(b).value() << endl;
267 
268 
269  // Calculate coefficients for Gulder's flame speed correlation
270  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
271 
272  const volScalarField up(uPrimeCoef*sqrt((2.0/3.0)*momentumTransport->k()));
273  // volScalarField up(sqrt(mag(diag(n * n) & diag(momentumTransport->r()))));
274 
275  const volScalarField epsilon
276  (
277  pow(uPrimeCoef, 3)*momentumTransport->epsilon()
278  );
279 
280  const volScalarField tauEta(sqrt(thermo.muu()/(rhou*epsilon)));
281 
282  const volScalarField Reta
283  (
284  up
285  / (
286  sqrt(epsilon*tauEta)
287  + dimensionedScalar(up.dimensions(), 1e-8)
288  )
289  );
290 
291  // volScalarField l = 0.337*k*sqrt(k)/epsilon;
292  // Reta *= max((l - dimensionedScalar(dimLength, 1.5e-3))/l, 0);
293 
294  // Calculate Xi flux
295  // ~~~~~~~~~~~~~~~~~
296  const surfaceScalarField phiXi
297  (
298  phiSt
300  (
302  )*nf
303  + fvc::interpolate(rho)*fvc::interpolate(Su*(1.0/Xi - Xi))*nf
304  );
305 
306 
307  // Calculate mean and turbulent strain rates
308  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
309 
310  const volVectorField Ut(U + Su*Xi*n);
311  const volScalarField sigmat((n & n)*fvc::div(Ut) - (n & fvc::grad(Ut) & n));
312 
313  const volScalarField sigmas
314  (
315  ((n & n)*fvc::div(U) - (n & fvc::grad(U) & n))/Xi
316  + (
317  (n & n)*fvc::div(Su*n)
318  - (n & fvc::grad(Su*n) & n)
319  )*(Xi + scalar(1))/(2*Xi)
320  );
321 
322 
323  // Calculate the unstrained laminar flame speed
324  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
326 
327 
328  // Calculate the laminar flame speed in equilibrium with the applied strain
329  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
330  const volScalarField SuInf
331  (
332  Su0*max(scalar(1) - sigmas/sigmaExt, scalar(0.01))
333  );
334 
335  if (SuModel == "unstrained")
336  {
337  Su == Su0;
338  }
339  else if (SuModel == "equilibrium")
340  {
341  Su == SuInf;
342  }
343  else if (SuModel == "transport")
344  {
345  // Solve for the strained laminar flame speed
346  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
347 
348  const volScalarField Rc
349  (
350  (sigmas*SuInf*(Su0 - SuInf) + sqr(SuMin)*sigmaExt)
351  /(sqr(Su0 - SuInf) + sqr(SuMin))
352  );
353 
354  fvScalarMatrix SuEqn
355  (
356  fvm::ddt(rho, Su)
357  + fvm::div(phi + phiXi, Su, "div(phiXi,Su)")
358  - fvm::Sp(fvc::div(phiXi), Su)
359  ==
360  - fvm::SuSp(-rho*Rc*Su0/Su, Su)
361  - fvm::SuSp(rho*(sigmas + Rc), Su)
362  + fvModels().source(rho, Su)
363  );
364 
365  SuEqn.relax();
366 
367  fvConstraints().constrain(SuEqn);
368 
369  SuEqn.solve();
370 
372 
373  // Limit the maximum Su
374  // ~~~~~~~~~~~~~~~~~~~~
375  Su.min(SuMax);
376  Su.max(SuMin);
377  }
378  else
379  {
381  << "Unknown Su model " << SuModel
382  << abort(FatalError);
383  }
384 
385 
386  // Calculate Xi according to the selected flame wrinkling model
387  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
388 
389  if (XiModel == "fixed")
390  {
391  // Do nothing, Xi is fixed!
392  }
393  else if (XiModel == "algebraic")
394  {
395  // Simple algebraic model for Xi based on Gulders correlation
396  // with a linear correction function to give a plausible profile for Xi
397  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
398  Xi == scalar(1) +
399  (scalar(1) + (2*XiShapeCoef)*(scalar(0.5) - b))
400  *XiCoef*sqrt(up/(Su + SuMin))*Reta;
401  }
402  else if (XiModel == "transport")
403  {
404  // Calculate Xi transport coefficients based on Gulders correlation
405  // and DNS data for the rate of generation
406  // with a linear correction function to give a plausible profile for Xi
407  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
408 
409  const volScalarField XiEqStar
410  (
411  scalar(1.001) + XiCoef*sqrt(up/(Su + SuMin))*Reta
412  );
413 
414  const volScalarField XiEq
415  (
416  scalar(1.001)
417  + (
418  scalar(1)
419  + (2*XiShapeCoef)
420  *(scalar(0.5) - min(max(b, scalar(0)), scalar(1)))
421  )*(XiEqStar - scalar(1.001))
422  );
423 
424  const volScalarField Gstar(0.28/tauEta);
425  const volScalarField R(Gstar*XiEqStar/(XiEqStar - scalar(1)));
426  const volScalarField G(R*(XiEq - scalar(1.001))/XiEq);
427 
428  // R *= (Gstar + 2*mag(dev(symm(fvc::grad(U)))))/Gstar;
429 
430  // Solve for the flame wrinkling
431  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
432  fvScalarMatrix XiEqn
433  (
434  fvm::ddt(rho, Xi)
435  + fvm::div(phi + phiXi, Xi, "div(phiXi,Xi)")
436  - fvm::Sp(fvc::div(phiXi), Xi)
437  ==
438  rho*R
439  - fvm::Sp(rho*(R - G), Xi)
440  - fvm::Sp
441  (
442  rho*max
443  (
444  sigmat - sigmas,
445  dimensionedScalar(sigmat.dimensions(), 0)
446  ),
447  Xi
448  )
449  + fvModels().source(rho, Xi)
450  );
451 
452  XiEqn.relax();
453 
454  fvConstraints().constrain(XiEqn);
455 
456  XiEqn.solve();
457 
458  fvConstraints().constrain(Xi);
459 
460  // Correct boundedness of Xi
461  // ~~~~~~~~~~~~~~~~~~~~~~~~~
462  Xi.max(1.0);
463  Info<< "max(Xi) = " << max(Xi).value() << endl;
464  Info<< "max(XiEq) = " << max(XiEq).value() << endl;
465  }
466  else
467  {
469  << "Unknown Xi model " << XiModel
470  << abort(FatalError);
471  }
472 
473  Info<< "Combustion progress = "
474  << 100*(scalar(1) - b)().weightedAverage(mesh.V()).value() << "%"
475  << endl;
476 
477  St = Xi*Su;
478 }
479 
480 
482 (
484 )
485 {
486  volScalarField& heau = thermo_.heu();
487 
488  const volScalarField::Internal rhoByRhou(rho()/thermo.rhou()());
489 
490  fvScalarMatrix heauEqn
491  (
492  fvm::ddt(rho, heau) + mvConvection.fvmDiv(phi, heau)
493  + rhoByRhou
494  *(
495  (fvc::ddt(rho, K) + fvc::div(phi, K))()
496  + pressureWork
497  (
498  heau.name() == "eau"
499  ? mvConvection.fvcDiv(phi, p/rho)()
500  : -dpdt
501  )
502  )
503  + thermophysicalTransport.divq(heau)
504 
505  // These terms cannot be used in partially-premixed combustion due to
506  // the resultant inconsistency between ft and heau transport.
507  // A possible solution would be to solve for ftu as well as ft.
508  //- fvm::div(muEff*fvc::grad(b)/(b + 0.001), heau)
509  //+ fvm::Sp(fvc::div(muEff*fvc::grad(b)/(b + 0.001)), heau)
510 
511  ==
512  fvModels().source(rho, heau)
513  );
514 
515  fvConstraints().constrain(heauEqn);
516 
517  heauEqn.solve();
518 
519  fvConstraints().constrain(heau);
520 }
521 
522 
524 (
526 )
527 {
528  volScalarField& hea = thermo_.he();
529 
531  (
532  fvm::ddt(rho, hea) + mvConvection.fvmDiv(phi, hea)
533  + fvc::ddt(rho, K) + fvc::div(phi, K)
534  + pressureWork
535  (
536  hea.name() == "ea"
537  ? mvConvection.fvcDiv(phi, p/rho)()
538  : -dpdt
539  )
540  + thermophysicalTransport.divq(hea)
541  ==
542  (
543  buoyancy.valid()
544  ? fvModels().source(rho, hea) + rho*(U & buoyancy->g)
545  : fvModels().source(rho, hea)
546  )
547  );
548 
549  EaEqn.relax();
550 
552 
553  EaEqn.solve();
554 
555  fvConstraints().constrain(hea);
556 }
557 
558 
560 {
562  (
564  (
565  mesh,
566  fields,
567  phi,
568  mesh.schemes().div("div(phi,ft_b_ha_hau)")
569  )
570  );
571 
572  if (composition.contains("ft"))
573  {
574  ftSolve(mvConvection());
575  }
576 
577  if (ign.ignited())
578  {
579  bSolve(mvConvection());
580  EauSolve(mvConvection());
581  }
582 
583  EaSolve(mvConvection());
584 
585  if (!ign.ignited())
586  {
587  thermo_.heu() == thermo.he();
588  }
589 
590  thermo_.correct();
591 }
592 
593 
594 // ************************************************************************* //
fvScalarMatrix EaEqn(betav *fvm::ddt(rho, hea)+mvConvection->fvmDiv(phi, hea)+betav *fvc::ddt(rho, K)+fvc::div(phi, K)+(hea.name()=="ea" ? fvc::div(fvc::absolute(phi, rho, U), p/rho) :-betav *dpdt) - fvm::laplacian(Db, hea)+betav *fvModels.source(rho, hea))
dimensionedScalar StCorr("StCorr", dimless, 1.0)
StCoNum
Definition: StCourantNo.H:36
label n
#define forAll(list, i)
Loop across all elements in list.
Definition: UList.H:434
tmp< fv::convectionScheme< scalar > > mvConvection(fv::convectionScheme< scalar >::New(mesh, fields, phi, mesh.schemes().div("div(phi,ft_b_ha_hau)")))
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
const dimensionSet & dimensions() const
Return dimensions.
const Field< Type > & field() const
Generic GeometricField class.
void max(const dimensioned< Type > &)
const word & name() const
Return name.
Definition: IOobject.H:310
Base-class for all Xi models used by the b-Xi combustion model. See Technical Report SH/RE/01R for de...
Definition: XiModel.H:109
volScalarField & Y(const word &specieName)
Return the mass-fraction field for a specie given by name.
const Type & value() const
Return const reference to value.
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:604
SolverPerformance< Type > solve(const dictionary &)
Solve segregated or coupled returning the solution statistics.
Definition: fvMatrixSolve.C:58
Finite volume models.
Definition: fvModels.H:65
Abstract base class for convection schemes.
Foam::ignitionSite.
Definition: ignitionSite.H:58
const labelList & cells() const
Return the ignition cells updated if the mesh moved.
Definition: ignitionSite.C:86
scalar duration() const
Definition: ignitionSite.H:145
const scalarList & cellVolumes() const
Definition: ignitionSite.H:158
scalar strength() const
Definition: ignitionSite.H:150
bool igniting() const
Definition: ignitionSite.C:98
scalarField & diag()
Definition: lduMatrix.C:186
Foam::fvConstraints & fvConstraints() const
Return the fvConstraints that are created on demand.
Definition: solver.C:96
virtual void thermophysicalPredictor()
Construct and solve the energy equation,.
void bSolve(const fv::convectionScheme< scalar > &mvConvection)
Solve the Xi and regress variable equations.
void ftSolve(const fv::convectionScheme< scalar > &mvConvection)
Solve the ft equation for partially-premixed mixtures.
turbulenceThermophysicalTransportModels::unityLewisEddyDiffusivity< RASThermophysicalTransportModel< ThermophysicalTransportModel< compressibleMomentumTransportModel, fluidThermo > > > thermophysicalTransport
Definition: XiFluid.H:176
void EauSolve(const fv::convectionScheme< scalar > &mvConvection)
Solve the unburnt energy equation.
basicCombustionMixture & composition
Reference to the combustion mixture.
Definition: XiFluid.H:109
void EaSolve(const fv::convectionScheme< scalar > &mvConvection)
Solve the energy equation.
dimensionedScalar StCorr(const volScalarField &c, const surfaceScalarField &nf, const dimensionedScalar &dMgb) const
Calculate and return the turbulent flame-speed kernel correction.
Buoyancy related data for the Foam::solvers::isothermalFluid solver module when solving buoyant cases...
Definition: buoyancy.H:70
uniformDimensionedVectorField g
Gravitational acceleration.
Definition: buoyancy.H:83
const surfaceScalarField & phi
Mass-flux field.
const volScalarField & rho
Reference to the continuity density field.
A class for managing temporary objects.
Definition: tmp.H:55
Foam::fvConstraints & fvConstraints(Foam::fvConstraints::New(mesh))
Foam::fvModels & fvModels(Foam::fvModels::New(mesh))
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition: error.H:306
const scalar epsilon
Calculate the first temporal derivative.
Calculate the laplacian of the given field.
Calculate the mesh motion flux and convert fluxes from absolute to relative and back.
Calculate the snGrad of the given volField.
Calculate the matrix for the divergence of the given field and flux.
Calculate the matrix for implicit and explicit sources.
Info<< "Creating field dpdt\n"<< endl;volScalarField dpdt(IOobject("dpdt", runTime.name(), mesh), mesh, dimensionedScalar(p.dimensions()/dimTime, 0));Info<< "Creating field kinetic energy K\n"<< endl;volScalarField K("K", 0.5 *magSqr(U));Info<< "Creating the unstrained laminar flame speed\n"<< endl;autoPtr< laminarFlameSpeed > unstrainedLaminarFlameSpeed(laminarFlameSpeed::New(thermo))
volScalarField & b
Definition: createFields.H:27
Info<< "Creating thermophysical transport model\n"<< endl;turbulenceThermophysicalTransportModels::unityLewisEddyDiffusivity< RASThermophysicalTransportModel< ThermophysicalTransportModel< compressibleMomentumTransportModel, fluidThermo > >> thermophysicalTransport(turbulence(), thermo, true)
Info<< "Calculating turbulent flame speed field St\n"<< endl;volScalarField St(IOobject("St", runTime.name(), mesh, IOobject::NO_READ, IOobject::AUTO_WRITE), flameWrinkling->Xi() *Su);multivariateSurfaceInterpolationScheme< scalar >::fieldTable fields
Definition: createFields.H:230
K
Definition: pEqn.H:75
U
Definition: pEqn.H:72
const dimensionedScalar G
Newtonian constant of gravitation.
const dimensionedScalar c
Speed of light in a vacuum.
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
tmp< VolField< Type > > laplacian(const VolField< Type > &vf, const word &name)
Definition: fvcLaplacian.C:45
tmp< VolField< Type > > Su(const VolField< Type > &su, const VolField< Type > &vf)
Definition: fvcSup.C:44
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 > > Sp(const volScalarField::Internal &, const VolField< Type > &)
tmp< fvMatrix< Type > > SuSp(const volScalarField::Internal &, const VolField< Type > &)
tmp< fvMatrix< Type > > div(const surfaceScalarField &flux, const VolField< Type > &vf, const word &name)
Definition: fvmDiv.C:48
tmp< fvMatrix< Type > > ddt(const VolField< Type > &vf)
Definition: fvmDdt.C:46
dimensioned< scalar > dimensionedScalar
Dimensioned scalar obtained from generic dimensioned type.
Type gSum(const FieldField< Field, Type > &f)
const doubleScalar e
Definition: doubleScalar.H:105
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
dimensionedSymmTensor sqr(const dimensionedVector &dv)
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:251
errorManip< error > abort(error &err)
Definition: errorManip.H:131
const dimensionSet dimless
messageStream Info
layerAndWeight min(const layerAndWeight &a, const layerAndWeight &b)
dimensionedScalar pow(const dimensionedScalar &ds, const dimensionedScalar &expt)
dimensionedScalar sqrt(const dimensionedScalar &ds)
const dimensionSet dimVolume
dimensioned< scalar > mag(const dimensioned< Type > &)
layerAndWeight max(const layerAndWeight &a, const layerAndWeight &b)
static scalar R(const scalar a, const scalar x)
Definition: invIncGamma.C:102
error FatalError
const dimensionSet dimArea
basicSpecieMixture & composition
volScalarField & p
fluidMulticomponentThermo & thermo
Definition: createFields.H:31