33 template<
class ChemistryModel>
36 typename ChemistryModel::reactionThermo& thermo
40 coeffsDict_(this->subDict(
"EulerImplicitCoeffs")),
41 cTauChem_(
readScalar(coeffsDict_.lookup(
"cTauChem"))),
42 eqRateLimiter_(coeffsDict_.lookup(
"equilibriumRateLimiter")),
49 template<
class ChemistryModel>
56 template<
class ChemistryModel>
71 this->reactions_[index];
76 const scalar sl = R.
lhs()[
s].stoichCoeff;
77 RR[si][rRef] -= sl*pr*corr;
78 RR[si][lRef] += sl*pf*corr;
84 const scalar sr = R.
rhs()[
s].stoichCoeff;
85 RR[si][lRef] -= sr*pf*corr;
86 RR[si][rRef] += sr*pr*corr;
91 template<
class ChemistryModel>
110 const scalar cTot =
sum(c);
111 typename ChemistryModel::thermoType
mixture 113 (this->specieThermo_[0].
W()*c[0])*this->specieThermo_[0]
117 mixture += (this->specieThermo_[i].W()*c[i])*this->specieThermo_[i];
119 const scalar ha = mixture.Ha(p, T);
120 const scalar deltaTEst =
min(deltaT, subDeltaT);
122 forAll(this->reactions(), i)
124 scalar pf, cf, pr, cr;
127 const scalar omegai =
128 this->omegaI(i, c, T, p, pf, cf, lRef, pr, cr, rRef);
135 corr = 1/(1 + pr*deltaTEst);
139 corr = 1/(1 + pf*deltaTEst);
143 updateRRInReactionI(i, pr, pf, corr, lRef, rRef, p, T, RR);
159 tMin =
min(tMin, -(c[i] + small)/d);
164 const scalar cm =
max(cTot - c[i], 1
e-5);
165 tMin =
min(tMin, cm/d);
169 subDeltaT = cTauChem_*tMin;
170 deltaT =
min(deltaT, subDeltaT);
175 RR(i, i) += 1/deltaT;
176 RR.
source()[i] = c[i]/deltaT;
189 mixture = (this->specieThermo_[0].W()*c[0])*this->specieThermo_[0];
192 mixture += (this->specieThermo_[i].W()*c[i])*this->specieThermo_[i];
194 T = mixture.THa(ha, p, T);
Field< Type > & source()
Return access to the source.
#define forAll(list, i)
Loop across all elements in list.
An abstract base class for solving chemistry.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
const List< specieCoeffs > & lhs() const
Return the components of the left hand side.
dimensioned< Type > max(const dimensioned< Type > &, const dimensioned< Type > &)
rhoReactionThermo & thermo
Simple extension of ReactionThermo to handle reaction kinetics in addition to the equilibrium thermod...
Macros for easy insertion into run-time selection tables.
dimensioned< Type > sum(const DimensionedField< Type, GeoMesh > &df)
gmvFile<< "tracers "<< particles.size()<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().x()<< " ";}gmvFile<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().y()<< " ";}gmvFile<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().z()<< " ";}gmvFile<< nl;forAll(lagrangianScalarNames, i){ word name=lagrangianScalarNames[i];IOField< scalar > s(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
const dimensionedScalar e
Elementary charge.
Field< Type > LUsolve() const
Solve the matrix using LU decomposition with pivoting.
A simple square matrix solver with scalar coefficients.
virtual void solve(scalarField &c, scalar &T, scalar &p, scalar &deltaT, scalar &subDeltaT) const
Update the concentrations and return the chemical time.
Info<< "Reading field p_rgh\"<< endl;volScalarField p_rgh(IOobject("p_rgh", runTime.timeName(), mesh, IOobject::MUST_READ, IOobject::AUTO_WRITE), mesh);Info<< "Reading field U\"<< endl;volVectorField U(IOobject("U", runTime.timeName(), mesh, IOobject::MUST_READ, IOobject::AUTO_WRITE), mesh);Info<< "Creating phaseChangeTwoPhaseMixture\"<< endl;autoPtr< phaseChangeTwoPhaseMixture > mixture
dimensioned< Type > min(const dimensioned< Type > &, const dimensioned< Type > &)
EulerImplicit(typename ChemistryModel::reactionThermo &thermo)
Construct from thermo.
#define R(A, B, C, D, E, F, K, M)
const scalarList W(::W(thermo))
const scalar RR
Universal gas constant (default in [J/(kmol K)])
void updateRRInReactionI(const label index, const scalar pr, const scalar pf, const scalar corr, const label lRef, const label rRef, const scalar p, const scalar T, simpleMatrix< scalar > &RR) const
virtual ~EulerImplicit()
Destructor.
const List< specieCoeffs > & rhs() const
Return the components of the right hand side.