eReactingFoam-4.x/YEqn.H

63 lines
1.4 KiB
C

Vc = dimensionedVector("zero", dimLength/dimTime, vector(Zero));
phiC = phi;
forAll(Y, i)
{
Vc += diff.D(i) * fvc::grad(Y[i]);
// Vc -= mu_i * E;
}
forAll(Y, i)
{
phiC += linearInterpolate(rho * diff.D(i)) * fvc::snGrad(Y[i]) * mesh.magSf();
// phiC -= linearInterpolate(rho * mu_i) * snE * mesh.magSf();
}
{
reaction->correct();
dQ = reaction->dQ();
label inertIndex = -1;
volScalarField Yt(0.0*Y[0]);
forAll(Y, i)
{
if (Y[i].name() != inertSpecie)
{
volScalarField& Yi = Y[i];
fvScalarMatrix YiEqn
(
fvm::ddt(rho, Yi)
+ (
thermo.composition().z(i) != 0
? fvm::div(phiC + (linearInterpolate(rho*diff.mu(i,T)*E) & mesh.Sf()),
Yi, "div(phi,Yi_h)")
: fvm::div(phiC, Yi, "div(phi,Yi_h)")
)
- fvm::laplacian(rho * diff.D(i), Yi)
==
reaction->R(Yi)
+ fvOptions(rho, Yi)
);
YiEqn.relax();
fvOptions.constrain(YiEqn);
YiEqn.solve(mesh.solver("Yi"));
fvOptions.correct(Yi);
Yi.max(0.0);
Yt += Yi;
}
else
{
inertIndex = i;
}
}
Y[inertIndex] = scalar(1) - Yt;
Y[inertIndex].max(0.0);
}