36 template<
class ChemistryModel>
39 typename ChemistryModel::reactionThermo&
thermo 43 coeffsDict_(this->subDict(
"EulerImplicitCoeffs")),
44 cTauChem_(coeffsDict_.
get<scalar>(
"cTauChem")),
45 eqRateLimiter_(coeffsDict_.
get<
Switch>(
"equilibriumRateLimiter")),
52 template<
class ChemistryModel>
59 template<
class ChemistryModel>
74 this->reactions_[index];
78 const label si =
R.lhs()[
s].index;
79 const scalar sl =
R.lhs()[
s].stoichCoeff;
80 RR[si][rRef] -= sl*pr*corr;
81 RR[si][lRef] += sl*pf*corr;
86 const label si =
R.rhs()[
s].index;
87 const scalar sr =
R.rhs()[
s].stoichCoeff;
88 RR[si][lRef] -= sr*pf*corr;
89 RR[si][rRef] += sr*pr*corr;
94 template<
class ChemistryModel>
107 for (label i=0; i<
nSpecie; i++)
113 const scalar cTot =
sum(
c);
114 typename ChemistryModel::thermoType
mixture 116 (this->specieThermo_[0].W()*
c[0])*this->specieThermo_[0]
118 for (label i=1; i<
nSpecie; i++)
120 mixture += (this->specieThermo_[i].W()*
c[i])*this->specieThermo_[i];
123 const scalar deltaTEst =
min(deltaT, subDeltaT);
125 forAll(this->reactions(), i)
127 scalar pf, cf, pr, cr;
130 const scalar omegai =
131 this->omegaI(i,
c,
T,
p, pf, cf, lRef, pr, cr, rRef);
138 corr = 1/(1 + pr*deltaTEst);
142 corr = 1/(1 + pf*deltaTEst);
146 updateRRInReactionI(i, pr, pf, corr, lRef, rRef,
p,
T,
RR);
152 for (label i=0; i<
nSpecie; i++)
155 for (label j=0; j<
nSpecie; j++)
162 tMin =
min(tMin, -(
c[i] + SMALL)/d);
167 const scalar cm =
max(cTot -
c[i], 1
e-5);
168 tMin =
min(tMin, cm/d);
172 subDeltaT = cTauChem_*tMin;
173 deltaT =
min(deltaT, subDeltaT);
176 for (label i=0; i<
nSpecie; i++)
178 RR(i, i) += 1/deltaT;
179 RR.source()[i] =
c[i]/deltaT;
186 for (label i=0; i<
nSpecie; i++)
192 mixture = (this->specieThermo_[0].W()*
c[0])*this->specieThermo_[0];
193 for (label i=1; i<
nSpecie; i++)
195 mixture += (this->specieThermo_[i].W()*
c[i])*this->specieThermo_[i];
List< ReturnType > get(const UPtrList< T > &list, const AccessOp &aop)
List of values generated by applying the access operation to each list item.
dimensioned< Type > sum(const DimensionedField< Type, GeoMesh > &f1)
An abstract base class for solving chemistry.
label max(const labelHashSet &set, label maxValue=labelMin)
Find the max value in labelHashSet, optionally limited by second argument.
Info<< "Creating temperaturePhaseChangeTwoPhaseMixture\"<< endl;autoPtr< temperaturePhaseChangeTwoPhaseMixture > mixture
A simple wrapper around bool so that it can be read as a word: true/false, on/off, yes/no, any/none. Also accepts 0/1 as a string and shortcuts t/f, y/n.
Simple extension of ReactionThermo to handle reaction kinetics in addition to the equilibrium thermod...
Macros for easy insertion into run-time selection tables.
#define forAll(list, i)
Loop across all elements in list.
const dimensionedScalar e
Elementary charge.
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
A simple square matrix solver with scalar coefficients.
label min(const labelHashSet &set, label minValue=labelMax)
Find the min value in labelHashSet, optionally limited by second argument.
Basic thermodynamics type based on the use of fitting functions for cp, h, s obtained from the templa...
virtual void solve(scalarField &c, scalar &T, scalar &p, scalar &deltaT, scalar &subDeltaT) const
Update the concentrations and return the chemical time.
EulerImplicit(typename ChemistryModel::reactionThermo &thermo)
Construct from thermo.
#define R(A, B, C, D, E, F, K, M)
const dimensionedScalar c
Speed of light in a vacuum.
const scalar RR
Universal gas constant: default in [J/(kmol K)].
gmvFile<< "tracers "<< particles.size()<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().x()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().y()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.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))
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.