mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: Further updates relating from vhange from total- to sensible enthalpy
- Added chemical enthalpy access function to top level api. - Re-worked source term for enthalpy equation(s) in chemistry model, and - Re-worked heat release calculation STYLE: Using worded dimensions instead of dimensionSet(...)
This commit is contained in:
@ -343,6 +343,13 @@ Foam::tmp<Foam::scalarField> Foam::basicThermo::hs
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::basicThermo::hc() const
|
||||
{
|
||||
notImplemented("basicThermo::hc()");
|
||||
return volScalarField::null();
|
||||
}
|
||||
|
||||
|
||||
Foam::volScalarField& Foam::basicThermo::e()
|
||||
{
|
||||
notImplemented("basicThermo::e()");
|
||||
|
||||
@ -183,6 +183,9 @@ public:
|
||||
const label patchi
|
||||
) const;
|
||||
|
||||
//- Chemical enthalpy [J/kg]
|
||||
virtual tmp<volScalarField> hc() const;
|
||||
|
||||
//- Internal energy [J/kg]
|
||||
// Non-const access allowed for transport equations
|
||||
virtual volScalarField& e();
|
||||
|
||||
@ -466,7 +466,7 @@ Foam::ODEChemistryModel<CompType, ThermoType>::tc() const
|
||||
this->thermo().rho()
|
||||
);
|
||||
|
||||
tmp<volScalarField> tsource
|
||||
tmp<volScalarField> ttc
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
@ -484,7 +484,7 @@ Foam::ODEChemistryModel<CompType, ThermoType>::tc() const
|
||||
)
|
||||
);
|
||||
|
||||
scalarField& t = tsource();
|
||||
scalarField& tc = ttc();
|
||||
|
||||
label nReaction = reactions_.size();
|
||||
|
||||
@ -517,17 +517,59 @@ Foam::ODEChemistryModel<CompType, ThermoType>::tc() const
|
||||
forAll(R.rhs(), s)
|
||||
{
|
||||
scalar sr = R.rhs()[s].stoichCoeff;
|
||||
t[celli] += sr*pf*cf;
|
||||
tc[celli] += sr*pf*cf;
|
||||
}
|
||||
}
|
||||
t[celli] = nReaction*cSum/t[celli];
|
||||
tc[celli] = nReaction*cSum/tc[celli];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
tsource().correctBoundaryConditions();
|
||||
ttc().correctBoundaryConditions();
|
||||
|
||||
return tsource;
|
||||
return ttc;
|
||||
}
|
||||
|
||||
|
||||
template<class CompType, class ThermoType>
|
||||
Foam::tmp<Foam::volScalarField>
|
||||
Foam::ODEChemistryModel<CompType, ThermoType>::Sh() const
|
||||
{
|
||||
tmp<volScalarField> trhodQ
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"Sh",
|
||||
this->mesh_.time().timeName(),
|
||||
this->mesh_,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE,
|
||||
false
|
||||
),
|
||||
this->mesh_,
|
||||
dimensionedScalar("zero", dimEnergy/dimTime/dimVolume, 0.0),
|
||||
zeroGradientFvPatchScalarField::typeName
|
||||
)
|
||||
);
|
||||
|
||||
if (this->chemistry_)
|
||||
{
|
||||
scalarField& rhodQ = trhodQ();
|
||||
|
||||
forAll(Y_, i)
|
||||
{
|
||||
forAll(rhodQ, cellI)
|
||||
{
|
||||
scalar Ti = this->thermo().T()[cellI];
|
||||
scalar hi = specieThermo_[i].H(Ti);
|
||||
rhodQ[cellI] -= hi*RR_[i][cellI];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return trhodQ;
|
||||
}
|
||||
|
||||
|
||||
@ -545,37 +587,19 @@ Foam::ODEChemistryModel<CompType, ThermoType>::dQ() const
|
||||
this->mesh_.time().timeName(),
|
||||
this->mesh_,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
IOobject::NO_WRITE,
|
||||
false
|
||||
),
|
||||
this->mesh_,
|
||||
dimensionedScalar
|
||||
(
|
||||
"zero",
|
||||
dimensionSet(0, 2, -3 , 0, 0, 0, 0),
|
||||
0.0
|
||||
)
|
||||
dimensionedScalar("dQ", dimEnergy/dimTime, 0.0),
|
||||
zeroGradientFvPatchScalarField::typeName
|
||||
)
|
||||
);
|
||||
|
||||
if (this->chemistry_)
|
||||
{
|
||||
scalarField& dQ = tdQ();
|
||||
|
||||
scalarField rhoEff(dQ.size(), 0.0);
|
||||
|
||||
forAll(Y_, i)
|
||||
{
|
||||
forAll(dQ, cellI)
|
||||
{
|
||||
scalar Ti = this->thermo().T()[cellI];
|
||||
scalar pi = this->thermo().p()[cellI];
|
||||
rhoEff[cellI] += Y_[i][cellI]*specieThermo_[i].rho(pi, Ti);
|
||||
scalar hi = specieThermo_[i].H(Ti);
|
||||
dQ[cellI] -= hi*RR_[i][cellI];
|
||||
}
|
||||
}
|
||||
|
||||
dQ /= rhoEff;
|
||||
volScalarField& dQ = tdQ();
|
||||
dQ.dimensionedInternalField() = this->mesh_.V()*Sh()();
|
||||
}
|
||||
|
||||
return tdQ;
|
||||
@ -678,6 +702,9 @@ Foam::scalar Foam::ODEChemistryModel<CompType, ThermoType>::solve
|
||||
|
||||
scalar deltaTMin = GREAT;
|
||||
|
||||
tmp<volScalarField> thc = this->thermo().hc();
|
||||
const scalarField& hc = thc();
|
||||
|
||||
forAll(rho, celli)
|
||||
{
|
||||
for (label i=0; i<nSpecie_; i++)
|
||||
@ -687,7 +714,7 @@ Foam::scalar Foam::ODEChemistryModel<CompType, ThermoType>::solve
|
||||
|
||||
scalar rhoi = rho[celli];
|
||||
scalar Ti = this->thermo().T()[celli];
|
||||
scalar hi = this->thermo().h()[celli];
|
||||
scalar hi = this->thermo().hs()[celli] + hc[celli];
|
||||
scalar pi = this->thermo().p()[celli];
|
||||
|
||||
scalarField c(nSpecie_);
|
||||
|
||||
@ -182,6 +182,9 @@ public:
|
||||
//- Return the chemical time scale
|
||||
virtual tmp<volScalarField> tc() const;
|
||||
|
||||
//- Return source for enthalpy equation [kg/m/s3]
|
||||
virtual tmp<volScalarField> Sh() const;
|
||||
|
||||
//- Return the heat release, i.e. enthalpy/sec [m2/s3]
|
||||
virtual tmp<volScalarField> dQ() const;
|
||||
|
||||
|
||||
@ -97,7 +97,7 @@ Foam::ODEChemistryModel<CompType, ThermoType>::RR
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
this->mesh(),
|
||||
dimensionedScalar("zero", dimensionSet(1, -3, -1, 0, 0), 0.0),
|
||||
dimensionedScalar("zero", dimMass/dimVolume/dimTime, 0.0),
|
||||
zeroGradientFvPatchScalarField::typeName
|
||||
)
|
||||
);
|
||||
|
||||
@ -120,7 +120,7 @@ public:
|
||||
|
||||
// Fields
|
||||
|
||||
//- Return const access to chemical source terms
|
||||
//- Return const access to chemical source terms [kg/m3/s]
|
||||
virtual tmp<volScalarField> RR(const label i) const = 0;
|
||||
|
||||
|
||||
@ -133,7 +133,10 @@ public:
|
||||
//- Return the chemical time scale
|
||||
virtual tmp<volScalarField> tc() const = 0;
|
||||
|
||||
//- Return the heat release
|
||||
//- Return source for enthalpy equation [kg/m/s3]
|
||||
virtual tmp<volScalarField> Sh() const = 0;
|
||||
|
||||
//- Return the heat release, i.e. enthalpy/sec [m2/s3]
|
||||
virtual tmp<volScalarField> dQ() const = 0;
|
||||
};
|
||||
|
||||
|
||||
@ -128,9 +128,6 @@ public:
|
||||
}
|
||||
|
||||
|
||||
//- Chemical enthalpy [J/kg]
|
||||
virtual tmp<volScalarField> hc() const = 0;
|
||||
|
||||
//- Update properties
|
||||
virtual void correct() = 0;
|
||||
};
|
||||
|
||||
@ -127,8 +127,6 @@ public:
|
||||
return hs_;
|
||||
}
|
||||
|
||||
//- Chemical enthalpy [J/kg]
|
||||
virtual tmp<volScalarField> hc() const = 0;
|
||||
|
||||
//- Update properties
|
||||
virtual void correct() = 0;
|
||||
|
||||
@ -280,7 +280,7 @@ Foam::hPsiMixtureThermo<MixtureType>::Cp() const
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimensionSet(0, 2, -2, -1, 0)
|
||||
dimEnergy/dimMass/dimTemperature
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
@ -94,12 +94,12 @@ public:
|
||||
//- Update properties
|
||||
virtual void correct();
|
||||
|
||||
//- Chemical enthalpy [J/kg]
|
||||
virtual tmp<volScalarField> hc() const;
|
||||
|
||||
|
||||
// Fields derived from thermodynamic state variables
|
||||
|
||||
//- Chemical enthalpy [J/kg]
|
||||
virtual tmp<volScalarField> hc() const;
|
||||
|
||||
//- Enthalpy for cell-set [J/kg]
|
||||
virtual tmp<scalarField> h
|
||||
(
|
||||
|
||||
@ -296,7 +296,7 @@ Foam::hhuMixtureThermo<MixtureType>::Cp() const
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimensionSet(0, 2, -2, -1, 0)
|
||||
dimEnergy/dimMass/dimTemperature
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
@ -205,15 +205,15 @@ Foam::hsPsiMixtureThermo<MixtureType>::hs
|
||||
const labelList& cells
|
||||
) const
|
||||
{
|
||||
tmp<scalarField> th(new scalarField(T.size()));
|
||||
scalarField& hs = th();
|
||||
tmp<scalarField> ths(new scalarField(T.size()));
|
||||
scalarField& hs = ths();
|
||||
|
||||
forAll(T, celli)
|
||||
{
|
||||
hs[celli] = this->cellMixture(cells[celli]).Hs(T[celli]);
|
||||
}
|
||||
|
||||
return th;
|
||||
return ths;
|
||||
}
|
||||
|
||||
|
||||
@ -225,15 +225,15 @@ Foam::hsPsiMixtureThermo<MixtureType>::hs
|
||||
const label patchi
|
||||
) const
|
||||
{
|
||||
tmp<scalarField> th(new scalarField(T.size()));
|
||||
scalarField& hs = th();
|
||||
tmp<scalarField> ths(new scalarField(T.size()));
|
||||
scalarField& hs = ths();
|
||||
|
||||
forAll(T, facei)
|
||||
{
|
||||
hs[facei] = this->patchFaceMixture(patchi, facei).Hs(T[facei]);
|
||||
}
|
||||
|
||||
return th;
|
||||
return ths;
|
||||
}
|
||||
|
||||
|
||||
@ -277,7 +277,7 @@ Foam::hsPsiMixtureThermo<MixtureType>::Cp() const
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimensionSet(0, 2, -2, -1, 0)
|
||||
dimEnergy/dimMass/dimTemperature
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
@ -95,11 +95,11 @@ public:
|
||||
virtual void correct();
|
||||
|
||||
|
||||
//- Chemical enthalpy [J/kg]
|
||||
virtual tmp<volScalarField> hc() const;
|
||||
|
||||
// Fields derived from thermodynamic state variables
|
||||
|
||||
//- Chemical enthalpy [J/kg]
|
||||
virtual tmp<volScalarField> hc() const;
|
||||
|
||||
//- Sensible enthalpy for cell-set [J/kg]
|
||||
virtual tmp<scalarField> hs
|
||||
(
|
||||
|
||||
@ -128,9 +128,6 @@ public:
|
||||
}
|
||||
|
||||
|
||||
//- Chemical enthalpy [J/kg]
|
||||
virtual tmp<volScalarField> hc() const = 0;
|
||||
|
||||
//- Update properties
|
||||
virtual void correct() = 0;
|
||||
};
|
||||
|
||||
@ -128,9 +128,6 @@ public:
|
||||
}
|
||||
|
||||
|
||||
//- Chemical enthalpy [J/kg]
|
||||
virtual tmp<volScalarField> hc() const = 0;
|
||||
|
||||
//- Update properties
|
||||
virtual void correct() = 0;
|
||||
};
|
||||
|
||||
@ -94,12 +94,13 @@ public:
|
||||
//- Update properties
|
||||
virtual void correct();
|
||||
|
||||
//- Chemical enthalpy [J/kg]
|
||||
virtual tmp<volScalarField> hc() const;
|
||||
|
||||
|
||||
// Fields derived from thermodynamic state variables
|
||||
|
||||
//- Chemical enthalpy [J/kg]
|
||||
virtual tmp<volScalarField> hc() const;
|
||||
|
||||
|
||||
//- Sensible nthalpy for cell-set [J/kg]
|
||||
virtual tmp<scalarField> hs
|
||||
(
|
||||
|
||||
Reference in New Issue
Block a user