33 namespace laminarFlameSpeedModels
49 Foam::laminarFlameSpeedModels::SCOPE::polynomial::polynomial
51 const dictionary& polyDict
54 FixedList<scalar, 7>(polyDict.lookup(
"coefficients")),
57 llv(polyPhi(ll, *this)),
58 ulv(polyPhi(ul, *this)),
63 Foam::laminarFlameSpeedModels::SCOPE::SCOPE
65 const dictionary& dict,
66 const hhuCombustionThermo& ct
69 laminarFlameSpeed(dict, ct),
71 coeffsDict_(dict.subDict(typeName +
"Coeffs").subDict(fuel_)),
72 LFL_(
readScalar(coeffsDict_.lookup(
"lowerFlamabilityLimit"))),
73 UFL_(
readScalar(coeffsDict_.lookup(
"upperFlamabilityLimit"))),
74 SuPolyL_(coeffsDict_.subDict(
"lowerSuPolynomial")),
75 SuPolyU_(coeffsDict_.subDict(
"upperSuPolynomial")),
78 MaPolyL_(coeffsDict_.subDict(
"lowerMaPolynomial")),
79 MaPolyU_(coeffsDict_.subDict(
"upperMaPolynomial"))
81 SuPolyL_.ll =
max(SuPolyL_.ll, LFL_) + SMALL;
82 SuPolyU_.ul =
min(SuPolyU_.ul, UFL_) - SMALL;
84 SuPolyL_.lu = 0.5*(SuPolyL_.ul + SuPolyU_.ll);
85 SuPolyU_.lu = SuPolyL_.lu - SMALL;
87 MaPolyL_.lu = 0.5*(MaPolyL_.ul + MaPolyU_.ll);
88 MaPolyU_.lu = MaPolyL_.lu - SMALL;
92 Info<<
"phi Su (T = Tref, p = pref)" <<
endl;
94 for (
int i=0; i<n; i++)
96 scalar
phi = (2.0*i)/n;
97 Info<< phi << token::TAB << SuRef(phi) <<
endl;
111 inline Foam::scalar Foam::laminarFlameSpeedModels::SCOPE::polyPhi
117 scalar x = phi - 1.0;
123 + x*(a[1] + x*(a[2] + x*(a[3] + x*(a[4] + x*(a[5] + x*a[6])))))
128 inline Foam::scalar Foam::laminarFlameSpeedModels::SCOPE::SuRef
133 if (phi < LFL_ || phi > UFL_)
138 else if (phi < SuPolyL_.ll)
142 return SuPolyL_.llv*(phi - LFL_)/(SuPolyL_.ll - LFL_);
144 else if (phi > SuPolyU_.ul)
148 return SuPolyU_.ulv*(UFL_ -
phi)/(UFL_ - SuPolyU_.ul);
150 else if (phi < SuPolyL_.lu)
153 return polyPhi(phi, SuPolyL_);
155 else if (phi > SuPolyU_.lu)
158 return polyPhi(phi, SuPolyU_);
162 FatalErrorIn(
"laminarFlameSpeedModels::SCOPE::SuRef(scalar phi)")
164 <<
" cannot be handled by SCOPE function with the "
178 if (phi < MaPolyL_.ll)
183 else if (phi > MaPolyU_.ul)
188 else if (phi < SuPolyL_.lu)
191 return polyPhi(phi, MaPolyL_);
193 else if (phi > SuPolyU_.lu)
196 return polyPhi(phi, MaPolyU_);
200 FatalErrorIn(
"laminarFlameSpeedModels::SCOPE::Ma(scalar phi)")
202 <<
" cannot be handled by SCOPE function with the "
211 inline Foam::scalar Foam::laminarFlameSpeedModels::SCOPE::Su0pTphi
218 static const scalar Tref = 300.0;
219 static const scalar pRef = 1.013e5;
221 return SuRef(phi)*
pow((Tu/Tref), Texp_)*
pow((p/pRef), pexp_);
232 tmp<volScalarField> tSu0
253 Su0[celli] = Su0pTphi(p[celli], Tu[celli], phi);
264 Su0p[facei] = Su0pTphi(pp[facei], Tup[facei], phi);
279 tmp<volScalarField> tSu0
300 Su0[celli] = Su0pTphi(p[celli], Tu[celli], phi[celli]);
331 tmp<volScalarField> tMa
338 phi.time().timeName(),
352 ma[celli] = Ma(phi[celli]);
362 map[facei] = Ma(phip[facei]);
373 if (hhuCombustionThermo_.composition().contains(
"ft"))
381 hhuCombustionThermo_.lookup(
"stoichiometricAirFuelMassRatio")
382 )*ft/(scalar(1) -
ft)
387 const fvMesh&
mesh = hhuCombustionThermo_.p().mesh();
389 return tmp<volScalarField>
396 mesh.time().timeName(),
412 if (hhuCombustionThermo_.composition().contains(
"ft"))
414 const volScalarField& ft = hhuCombustionThermo_.composition().Y(
"ft");
418 hhuCombustionThermo_.p(),
419 hhuCombustionThermo_.Tu(),
422 hhuCombustionThermo_.lookup(
"stoichiometricAirFuelMassRatio")
423 )*ft/(scalar(1) -
ft)
430 hhuCombustionThermo_.p(),
431 hhuCombustionThermo_.Tu(),