Loading...
Searching...
No Matches
mixtureKEpsilon.C
Go to the documentation of this file.
1/*---------------------------------------------------------------------------*\
2 ========= |
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4 \\ / O peration |
5 \\ / A nd | www.openfoam.com
6 \\/ M anipulation |
7-------------------------------------------------------------------------------
8 Copyright (C) 2013-2017 OpenFOAM Foundation
9 Copyright (C) 2020-2023 OpenCFD Ltd.
10-------------------------------------------------------------------------------
11License
12 This file is part of OpenFOAM.
13
14 OpenFOAM is free software: you can redistribute it and/or modify it
15 under the terms of the GNU General Public License as published by
16 the Free Software Foundation, either version 3 of the License, or
17 (at your option) any later version.
18
19 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
20 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
21 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22 for more details.
23
24 You should have received a copy of the GNU General Public License
25 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
26
27\*---------------------------------------------------------------------------*/
28
29#include "mixtureKEpsilon.H"
30#include "fvOptions.H"
31#include "bound.H"
32#include "twoPhaseSystem.H"
33#include "dragModel.H"
34#include "virtualMassModel.H"
37#include "fvmSup.H"
38
39// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
40
41namespace Foam
43namespace RASModels
44{
45
46// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
47
48template<class BasicTurbulenceModel>
49mixtureKEpsilon<BasicTurbulenceModel>::mixtureKEpsilon
50(
51 const alphaField& alpha,
52 const rhoField& rho,
53 const volVectorField& U,
54 const surfaceScalarField& alphaRhoPhi,
56 const transportModel& transport,
57 const word& propertiesName,
58 const word& type
59)
60:
62 (
63 type,
64 alpha,
65 rho,
66 U,
67 alphaRhoPhi,
68 phi,
69 transport,
70 propertiesName
71 ),
72
73 liquidTurbulencePtr_(nullptr),
74
75 Cmu_
76 (
78 (
79 "Cmu",
80 this->coeffDict_,
81 0.09
82 )
83 ),
84 C1_
85 (
87 (
88 "C1",
89 this->coeffDict_,
90 1.44
91 )
92 ),
93 C2_
94 (
96 (
97 "C2",
98 this->coeffDict_,
99 1.92
100 )
101 ),
102 C3_
103 (
105 (
106 "C3",
107 this->coeffDict_,
108 C2_.value()
109 )
110 ),
111 Cp_
112 (
114 (
115 "Cp",
116 this->coeffDict_,
117 0.25
118 )
119 ),
120 sigmak_
121 (
123 (
124 "sigmak",
125 this->coeffDict_,
126 1.0
127 )
128 ),
130 (
132 (
133 "sigmaEps",
134 this->coeffDict_,
135 1.3
136 )
137 ),
138
139 k_
140 (
142 (
143 IOobject::groupName("k", alphaRhoPhi.group()),
144 this->runTime_.timeName(),
145 this->mesh_,
148 ),
149 this->mesh_
150 ),
152 (
154 (
155 IOobject::groupName("epsilon", alphaRhoPhi.group()),
156 this->runTime_.timeName(),
157 this->mesh_,
160 ),
161 this->mesh_
162 )
163{
164 bound(k_, this->kMin_);
165 bound(epsilon_, this->epsilonMin_);
166
167 if (type == typeName)
169 this->printCoeffs(type);
170 }
171}
172
173
174template<class BasicTurbulenceModel>
176(
178) const
179{
180 const volScalarField::Boundary& ebf = epsilon.boundaryField();
181
182 wordList ebt = ebf.types();
183
184 forAll(ebf, patchi)
185 {
186 if (isA<fixedValueFvPatchScalarField>(ebf[patchi]))
187 {
188 ebt[patchi] = fixedValueFvPatchScalarField::typeName;
189 }
191
192 return ebt;
193}
194
195
196template<class BasicTurbulenceModel>
198(
199 volScalarField& vsf,
200 const volScalarField& refVsf
201) const
202{
204 const volScalarField::Boundary& refBf =
205 refVsf.boundaryField();
206
207 forAll(bf, patchi)
208 {
209 if
210 (
212 && isA<inletOutletFvPatchScalarField>(refBf[patchi])
213 )
214 {
216 (bf[patchi]).refValue() =
218 (refBf[patchi]).refValue();
219 }
220 }
221}
222
223
224template<class BasicTurbulenceModel>
226{
227 if (rhom_) return;
228
229 // Local references to gas-phase properties
230 const volScalarField& kg = this->k_;
231 const volScalarField& epsilong = this->epsilon_;
232
233 // Local references to liquid-phase properties
234 mixtureKEpsilon<BasicTurbulenceModel>& turbc = this->liquidTurbulence();
235 const volScalarField& kl = turbc.k_;
236 const volScalarField& epsilonl = turbc.epsilon_;
237
238 word startTimeName
239 (
240 this->runTime_.timeName(this->runTime_.startTime().value())
241 );
242
243 Ct2_.reset
244 (
246 (
247 IOobject
248 (
249 "Ct2",
250 startTimeName,
251 this->mesh_,
254 ),
255 Ct2()
256 )
257 );
258
259 rhom_.reset
260 (
262 (
263 IOobject
264 (
265 "rhom",
266 startTimeName,
267 this->mesh_,
270 ),
271 rhom()
272 )
273 );
274
275 km_.reset
276 (
278 (
279 IOobject
280 (
281 "km",
282 startTimeName,
283 this->mesh_,
286 ),
287 mix(kl, kg),
288 kl.boundaryField().types()
289 )
290 );
291 correctInletOutlet(km_(), kl);
292
293 epsilonm_.reset
294 (
296 (
297 IOobject
298 (
299 "epsilonm",
300 startTimeName,
301 this->mesh_,
304 ),
305 mix(epsilonl, epsilong),
306 epsilonBoundaryTypes(epsilonl)
307 )
308 );
310}
311
312
313// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
314
315template<class BasicTurbulenceModel>
317{
319 {
320 Cmu_.readIfPresent(this->coeffDict());
321 C1_.readIfPresent(this->coeffDict());
322 C2_.readIfPresent(this->coeffDict());
323 C3_.readIfPresent(this->coeffDict());
324 Cp_.readIfPresent(this->coeffDict());
325 sigmak_.readIfPresent(this->coeffDict());
326 sigmaEps_.readIfPresent(this->coeffDict());
327
328 return true;
330
331 return false;
332}
333
334
335template<class BasicTurbulenceModel>
337{
338 this->nut_ = Cmu_*sqr(k_)/epsilon_;
339 this->nut_.correctBoundaryConditions();
340 fv::options::New(this->mesh_).correct(this->nut_);
341
342 BasicTurbulenceModel::correctNut();
343}
344
345
346template<class BasicTurbulenceModel>
347mixtureKEpsilon<BasicTurbulenceModel>&
348mixtureKEpsilon<BasicTurbulenceModel>::liquidTurbulence() const
349{
350 if (!liquidTurbulencePtr_)
351 {
352 const volVectorField& U = this->U_;
353
354 const transportModel& gas = this->transport();
355 const twoPhaseSystem& fluid =
357 const transportModel& liquid = fluid.otherPhase(gas);
358
359 liquidTurbulencePtr_ =
360 &const_cast<mixtureKEpsilon<BasicTurbulenceModel>&>
361 (
362 U.db().lookupObject<mixtureKEpsilon<BasicTurbulenceModel>>
363 (
365 (
367 liquid.name()
368 )
369 )
370 );
372
373 return *liquidTurbulencePtr_;
374}
375
376
377template<class BasicTurbulenceModel>
379{
380 const mixtureKEpsilon<BasicTurbulenceModel>& liquidTurbulence =
381 this->liquidTurbulence();
382
383 const transportModel& gas = this->transport();
385 const transportModel& liquid = fluid.otherPhase(gas);
386
387 const volScalarField& alphag = this->alpha_;
388
389 volScalarField magUr(mag(liquidTurbulence.U() - this->U()));
390
392 (
393 (6*this->Cmu_/(4*sqrt(3.0/2.0)))
394 *fluid.Kd()/liquid.rho()
395 *(liquidTurbulence.k_/liquidTurbulence.epsilon_)
396 );
397 volScalarField Ct0((3 + beta)/(1 + beta + 2*gas.rho()/liquid.rho()));
398 volScalarField fAlphad((180 + (-4.71e3 + 4.26e4*alphag)*alphag)*alphag);
399
400 return sqr(1 + (Ct0 - 1)*exp(-fAlphad));
401}
402
403
404template<class BasicTurbulenceModel>
406{
407 const transportModel& gas = this->transport();
409 return fluid.otherPhase(gas).rho();
410}
411
412
413template<class BasicTurbulenceModel>
415{
416 const transportModel& gas = this->transport();
418 const virtualMassModel& virtualMass =
419 fluid.lookupSubModel<virtualMassModel>(gas, fluid.otherPhase(gas));
420 return
421 gas.rho()
422 + virtualMass.Cvm()*fluid.otherPhase(gas).rho();
423}
424
425
426template<class BasicTurbulenceModel>
428{
429 const volScalarField& alphag = this->alpha_;
430 const volScalarField& alphal = this->liquidTurbulence().alpha_;
431
432 return alphal*rholEff() + alphag*rhogEff();
433}
434
435
436template<class BasicTurbulenceModel>
438(
439 const volScalarField& fc,
440 const volScalarField& fd
441) const
442{
443 const volScalarField& alphag = this->alpha_;
444 const volScalarField& alphal = this->liquidTurbulence().alpha_;
445
446 return (alphal*rholEff()*fc + alphag*rhogEff()*fd)/rhom_();
447}
448
449
450template<class BasicTurbulenceModel>
452(
453 const volScalarField& fc,
454 const volScalarField& fd
455) const
456{
457 const volScalarField& alphag = this->alpha_;
458 const volScalarField& alphal = this->liquidTurbulence().alpha_;
459
460 return
461 (alphal*rholEff()*fc + alphag*rhogEff()*Ct2_()*fd)
462 /(alphal*rholEff() + alphag*rhogEff()*Ct2_());
463}
464
465
466template<class BasicTurbulenceModel>
468(
469 const surfaceScalarField& fc,
470 const surfaceScalarField& fd
471) const
472{
473 const volScalarField& alphag = this->alpha_;
474 const volScalarField& alphal = this->liquidTurbulence().alpha_;
475
477 surfaceScalarField alphagf(fvc::interpolate(alphag));
478
479 surfaceScalarField rholEfff(fvc::interpolate(rholEff()));
480 surfaceScalarField rhogEfff(fvc::interpolate(rhogEff()));
481
482 return
483 (alphalf*rholEfff*fc + alphagf*rhogEfff*fvc::interpolate(Ct2_())*fd)
484 /(alphalf*rholEfff + alphagf*rhogEfff*fvc::interpolate(Ct2_()));
485}
486
487
488template<class BasicTurbulenceModel>
490{
491 const mixtureKEpsilon<BasicTurbulenceModel>& liquidTurbulence =
492 this->liquidTurbulence();
493
494 const transportModel& gas = this->transport();
496 const transportModel& liquid = fluid.otherPhase(gas);
497
498 const dragModel& drag = fluid.lookupSubModel<dragModel>(gas, liquid);
499
500 volScalarField magUr(mag(liquidTurbulence.U() - this->U()));
501
502 // Lahey model
503 tmp<volScalarField> bubbleG
504 (
505 Cp_
506 *liquid*liquid.rho()
507 *(
508 pow3(magUr)
509 + pow(drag.CdRe()*liquid.nu()/gas.d(), 4.0/3.0)
510 *pow(magUr, 5.0/3.0)
511 )
512 *gas
513 /gas.d()
514 );
515
516 // Simple model
517 // tmp<volScalarField> bubbleG
518 // (
519 // Cp_*liquid*drag.K()*sqr(magUr)
520 // );
521
522 return bubbleG;
523}
524
525
526template<class BasicTurbulenceModel>
531
532
533template<class BasicTurbulenceModel>
535{
536 return fvm::Su(C3_*epsilonm_()*bubbleG()/(rhom_()*km_()), epsilonm_());
537}
538
539
540template<class BasicTurbulenceModel>
542{
543 const transportModel& gas = this->transport();
545
546 // Only solve the mixture turbulence for the gas-phase
547 if (&gas != &fluid.phase1())
548 {
549 // This is the liquid phase but check the model for the gas-phase
550 // is consistent
551 this->liquidTurbulence();
552
553 return;
554 }
555
556 if (!this->turbulence_)
557 {
558 return;
559 }
560
561 // Initialise the mixture fields if they have not yet been constructed
562 initMixtureFields();
563
564 // Local references to gas-phase properties
565 tmp<surfaceScalarField> phig = this->phi();
566 const volVectorField& Ug = this->U_;
567 const volScalarField& alphag = this->alpha_;
568 volScalarField& kg = this->k_;
569 volScalarField& epsilong = this->epsilon_;
570 volScalarField& nutg = this->nut_;
571
572 // Local references to liquid-phase properties
573 mixtureKEpsilon<BasicTurbulenceModel>& liquidTurbulence =
574 this->liquidTurbulence();
575 tmp<surfaceScalarField> phil = liquidTurbulence.phi();
576 const volVectorField& Ul = liquidTurbulence.U_;
577 const volScalarField& alphal = liquidTurbulence.alpha_;
578 volScalarField& kl = liquidTurbulence.k_;
579 volScalarField& epsilonl = liquidTurbulence.epsilon_;
580 volScalarField& nutl = liquidTurbulence.nut_;
581
582 // Local references to mixture properties
583 volScalarField& rhom = rhom_();
584 volScalarField& km = km_();
585 volScalarField& epsilonm = epsilonm_();
586
587 fv::options& fvOptions(fv::options::New(this->mesh_));
588
589 eddyViscosity<RASModel<BasicTurbulenceModel>>::correct();
590
591 // Update the effective mixture density
592 rhom = this->rhom();
593
594 // Mixture flux
595 surfaceScalarField phim("phim", mixFlux(phil, phig));
596
597 // Mixture velocity divergence
598 volScalarField divUm
599 (
600 mixU
601 (
602 fvc::div(fvc::absolute(phil, Ul)),
604 )
605 );
606
607 tmp<volScalarField> Gc;
608 {
609 tmp<volTensorField> tgradUl = fvc::grad(Ul);
610 Gc = tmp<volScalarField>
611 (
613 (
614 this->GName(),
615 nutl*(tgradUl() && devTwoSymm(tgradUl()))
616 )
617 );
618 tgradUl.clear();
619
620 // Update k, epsilon and G at the wall
621 kl.boundaryFieldRef().updateCoeffs();
622 // Push any changed cell values to coupled neighbours
623 kl.boundaryFieldRef().evaluateCoupled<coupledFvPatch>();
624
625 epsilonl.boundaryFieldRef().updateCoeffs();
626 epsilonl.boundaryFieldRef().evaluateCoupled<coupledFvPatch>();
627
628 Gc.ref().checkOut();
629 }
630
631 tmp<volScalarField> Gd;
632 {
633 tmp<volTensorField> tgradUg = fvc::grad(Ug);
634 Gd = tmp<volScalarField>
635 (
637 (
638 this->GName(),
639 nutg*(tgradUg() && devTwoSymm(tgradUg()))
640 )
641 );
642 tgradUg.clear();
643
644 // Update k, epsilon and G at the wall
645 kg.boundaryFieldRef().updateCoeffs();
646 // Push any changed cell values to coupled neighbours
647 kg.boundaryFieldRef().evaluateCoupled<coupledFvPatch>();
648 epsilong.boundaryFieldRef().updateCoeffs();
649 // Push any changed cell values to coupled neighbours
650 epsilong.boundaryFieldRef().evaluateCoupled<coupledFvPatch>();
651
652 Gd.ref().checkOut();
653 }
654
655 // Mixture turbulence generation
656 volScalarField Gm(mix(Gc, Gd));
657
658 // Mixture turbulence viscosity
659 volScalarField nutm(mixU(nutl, nutg));
660
661 // Update the mixture k and epsilon boundary conditions
662 km == mix(kl, kg);
663 bound(km, this->kMin_);
664 epsilonm == mix(epsilonl, epsilong);
665 bound(epsilonm, this->epsilonMin_);
666
667 // Dissipation equation
668 tmp<fvScalarMatrix> epsEqn
669 (
670 fvm::ddt(epsilonm)
671 + fvm::div(phim, epsilonm)
672 - fvm::Sp(fvc::div(phim), epsilonm)
673 - fvm::laplacian(DepsilonEff(nutm), epsilonm)
674 ==
675 C1_*Gm*epsilonm/km
676 - fvm::SuSp(((2.0/3.0)*C1_)*divUm, epsilonm)
677 - fvm::Sp(C2_*epsilonm/km, epsilonm)
678 + epsilonSource()
679 + fvOptions(epsilonm)
680 );
681
682 epsEqn.ref().relax();
683 fvOptions.constrain(epsEqn.ref());
684 epsEqn.ref().boundaryManipulate(epsilonm.boundaryFieldRef());
685 solve(epsEqn);
686 fvOptions.correct(epsilonm);
687 bound(epsilonm, this->epsilonMin_);
688
689
690 // Turbulent kinetic energy equation
691 tmp<fvScalarMatrix> kmEqn
692 (
693 fvm::ddt(km)
694 + fvm::div(phim, km)
695 - fvm::Sp(fvc::div(phim), km)
696 - fvm::laplacian(DkEff(nutm), km)
697 ==
698 Gm
699 - fvm::SuSp((2.0/3.0)*divUm, km)
700 - fvm::Sp(epsilonm/km, km)
701 + kSource()
702 + fvOptions(km)
703 );
704
705 kmEqn.ref().relax();
706 fvOptions.constrain(kmEqn.ref());
707 solve(kmEqn);
708 fvOptions.correct(km);
709 bound(km, this->kMin_);
710 km.correctBoundaryConditions();
711
712 volScalarField Cc2(rhom/(alphal*rholEff() + alphag*rhogEff()*Ct2_()));
713 kl = Cc2*km;
714 kl.correctBoundaryConditions();
715 epsilonl = Cc2*epsilonm;
716 epsilonl.correctBoundaryConditions();
717 liquidTurbulence.correctNut();
718
719 Ct2_() = Ct2();
720 kg = Ct2_()*kl;
721 kg.correctBoundaryConditions();
722 epsilong = Ct2_()*epsilonl;
723 epsilong.correctBoundaryConditions();
724 nutg = Ct2_()*(liquidTurbulence.nu()/this->nu())*nutl;
725}
726
727
728// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
729
730} // End namespace RASModels
731} // End namespace Foam
732
733// ************************************************************************* //
alphal
Definition alphavPsi.H:3
Bound the given scalar field if it has gone unbounded.
fv::options & fvOptions
twoPhaseSystem & fluid
wordList types() const
Return a list of the patch types.
void evaluateCoupled(const UPstream::commsTypes commsType=UPstream::defaultCommsType)
Evaluate boundary conditions on coupled patches of the given type, using specified or default comms.
void updateCoeffs()
Update the boundary condition coefficients.
Boundary & boundaryFieldRef(const bool updateAccessTime=true)
Return a reference to the boundary field.
GeometricBoundaryField< scalar, fvPatchField, volMesh > Boundary
void correctBoundaryConditions()
Correct boundary field.
const Boundary & boundaryField() const noexcept
Return const-reference to the boundary field.
@ READ_IF_PRESENT
Reading is optional [identical to LAZY_READ].
@ MUST_READ
Reading required.
@ AUTO_WRITE
Automatically write from objectRegistry::writeObject().
Defines the attributes of an object for which implicit objectRegistry management is supported,...
Definition IOobject.H:191
static word group(const word &name)
Return group (extension part of name).
Definition IOobject.C:300
static word groupName(StringType base, const word &group)
Create dot-delimited name.group string.
Templated abstract base class for RAS turbulence models.
Definition RASModel.H:81
Mixture k-epsilon turbulence model for two-phase gas-liquid systems.
BasicTurbulenceModel::alphaField alphaField
virtual tmp< fvScalarMatrix > epsilonSource() const
tmp< volScalarField > DepsilonEff(const volScalarField &nutm) const
Return the effective diffusivity for epsilon.
BasicTurbulenceModel::rhoField rhoField
tmp< volScalarField > Ct2() const
tmp< volScalarField > rhogEff() const
tmp< volScalarField > mixU(const volScalarField &fc, const volScalarField &fd) const
virtual void correct()
Solve the turbulence equations and correct the turbulence viscosity.
tmp< volScalarField > rhom() const
tmp< volScalarField > bubbleG() const
autoPtr< volScalarField > rhom_
tmp< volScalarField > DkEff(const volScalarField &nutm) const
Return the effective diffusivity for k.
void correctInletOutlet(volScalarField &vsf, const volScalarField &refVsf) const
autoPtr< volScalarField > km_
autoPtr< volScalarField > Ct2_
virtual tmp< fvScalarMatrix > kSource() const
BasicTurbulenceModel::transportModel transportModel
tmp< surfaceScalarField > mixFlux(const surfaceScalarField &fc, const surfaceScalarField &fd) const
wordList epsilonBoundaryTypes(const volScalarField &epsilon) const
tmp< volScalarField > rholEff() const
autoPtr< volScalarField > epsilonm_
tmp< volScalarField > mix(const volScalarField &fc, const volScalarField &fd) const
virtual tmp< volScalarField > epsilon() const
Return the turbulence kinetic energy dissipation rate.
virtual bool read()
Re-read model coefficients if they have changed.
An abstract base class for patches that couple regions of the computational domain e....
Generic dimensioned Type class.
static dimensioned< Type > getOrAddToDict(const word &name, dictionary &dict, const dimensionSet &dims=dimless, const Type &deflt=Type(Zero))
Construct dimensioned from dictionary, with default value.
Eddy viscosity turbulence model base class.
eddyViscosity(const word &modelName, const alphaField &alpha, const rhoField &rho, const volVectorField &U, const surfaceScalarField &alphaRhoPhi, const surfaceScalarField &phi, const transportModel &transport, const word &propertiesName)
void correct(GeometricField< Type, PatchField, GeoMesh > &field)
Apply correction to field.
Finite-volume options, which is an IOdictionary of values and a fv::optionList.
Definition fvOptions.H:69
static options & New(const fvMesh &mesh)
Construct fvOptions and register to database if not present otherwise lookup and return.
Definition fvOptions.C:116
Generic thermophysical properties class for a liquid in which the functions and coefficients for each...
Definition liquid.H:53
scalar rho(scalar p, scalar T) const
Liquid density [kg/m^3].
Definition liquidI.H:21
A class for managing temporary objects.
Definition tmp.H:75
void clear() const noexcept
If object pointer points to valid object: delete object and set pointer to nullptr.
Definition tmpI.H:289
T & ref() const
Return non-const reference to the contents of a non-null managed pointer.
Definition tmpI.H:235
Base-class for all transport models used by the incompressible turbulence models.
static const word propertiesName
Default name of the turbulence properties dictionary.
Class which solves the volume fraction equations for two phases.
virtual tmp< volScalarField > Cvm() const =0
Return the virtual mass coefficient.
A class for handling words, derived from Foam::string.
Definition word.H:66
U
Definition pEqn.H:72
thermo correct()
surfaceScalarField phig("phig", -rhorAUf *ghf *fvc::snGrad(rho) *mesh.magSf())
scalar epsilon
Calculate the finiteVolume matrix for implicit and explicit sources.
word timeName
Definition getTimeIndex.H:3
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.
tmp< GeometricField< typename outerProduct< vector, Type >::type, fvPatchField, volMesh > > grad(const GeometricField< Type, fvsPatchField, surfaceMesh > &ssf)
Definition fvcGrad.C:47
tmp< GeometricField< Type, fvPatchField, volMesh > > div(const GeometricField< Type, fvsPatchField, surfaceMesh > &ssf)
Definition fvcDiv.C:42
tmp< surfaceScalarField > absolute(const tmp< surfaceScalarField > &tphi, const volVectorField &U)
Return the given relative flux in absolute form.
Definition fvcMeshPhi.C:183
tmp< fvMatrix< Type > > laplacian(const GeometricField< Type, fvPatchField, volMesh > &vf, const word &name)
tmp< fvMatrix< Type > > div(const surfaceScalarField &flux, const GeometricField< Type, fvPatchField, volMesh > &vf, const word &name)
Definition fvmDiv.C:41
zeroField Su(const Foam::zero, const GeometricField< Type, fvPatchField, volMesh > &)
A no-op source.
tmp< fvMatrix< Type > > ddt(const GeometricField< Type, fvPatchField, volMesh > &vf)
Definition fvmDdt.C:41
zeroField SuSp(const Foam::zero, const GeometricField< Type, fvPatchField, volMesh > &)
A no-op source.
zeroField Sp(const Foam::zero, const GeometricField< Type, fvPatchField, volMesh > &)
A no-op source.
Namespace for OpenFOAM.
Type & refCast(U &obj)
A dynamic_cast (for references) to Type reference.
Definition typeInfo.H:172
List< word > wordList
List of word.
Definition fileName.H:60
dimensionedScalar exp(const dimensionedScalar &ds)
GeometricField< vector, fvPatchField, volMesh > volVectorField
bool read(const char *buf, int32_t &val)
Same as readInt32.
Definition int32.H:127
dimensionedSymmTensor sqr(const dimensionedVector &dv)
dimensionedScalar pow3(const dimensionedScalar &ds)
volScalarField & bound(volScalarField &, const dimensionedScalar &lowerBound)
Bound the given scalar field if it has gone unbounded.
Definition bound.C:29
GeometricField< scalar, fvPatchField, volMesh > volScalarField
SymmTensor< Cmpt > devTwoSymm(const SymmTensor< Cmpt > &st)
Return the deviatoric part of twice the symmetric part of a SymmTensor.
GeometricField< scalar, fvsPatchField, surfaceMesh > surfaceScalarField
dimensionedScalar pow(const dimensionedScalar &ds, const dimensionedScalar &expt)
const word GlobalIOList< Tuple2< scalar, vector > >::typeName("scalarVectorTable")
dimensionedScalar sqrt(const dimensionedScalar &ds)
const Type * isA(const U &obj)
Attempt dynamic_cast to Type.
Definition typeInfo.H:87
dimensioned< typename typeOfMag< Type >::type > mag(const dimensioned< Type > &dt)
volScalarField & nu
volScalarField & alpha
CEqn solve()
Info<< "Reading strained laminar flame speed field Su\n"<< endl;volScalarField Su(IOobject("Su", runTime.timeName(), mesh, IOobject::MUST_READ, IOobject::AUTO_WRITE), mesh);Info<< "Reading field betav\n"<< endl;volScalarField betav(IOobject("betav", mesh.facesInstance(), mesh, IOobject::MUST_READ, IOobject::NO_WRITE), mesh);Info<< "Reading field Lobs\n"<< endl;volScalarField Lobs(IOobject("Lobs", mesh.facesInstance(), mesh, IOobject::MUST_READ, IOobject::NO_WRITE), mesh);Info<< "Reading field CT\n"<< endl;volSymmTensorField CT(IOobject("CT", mesh.facesInstance(), mesh, IOobject::MUST_READ, IOobject::NO_WRITE), mesh);Info<< "Reading field Nv\n"<< endl;volScalarField Nv(IOobject("Nv", mesh.facesInstance(), mesh, IOobject::MUST_READ, IOobject::NO_WRITE), mesh);Info<< "Reading field nsv\n"<< endl;volSymmTensorField nsv(IOobject("nsv", mesh.facesInstance(), mesh, IOobject::MUST_READ, IOobject::NO_WRITE), mesh);IOdictionary PDRProperties(IOobject("PDRProperties", runTime.constant(), mesh, IOobject::MUST_READ_IF_MODIFIED, IOobject::NO_WRITE));autoPtr< PDRDragModel > drag
dimensionedScalar beta("beta", dimless/dimTemperature, laminarTransport)
#define forAll(list, i)
Loop across all elements in list.
Definition stdFoam.H:299