Thermodynamics: Added support for thermodynamics packages based on sensible enthalpy.

This commit is contained in:
henry 2010-02-10 19:08:09 +00:00
parent 0bae7febff
commit d09ddb1acb
18 changed files with 186 additions and 217 deletions

View File

@ -143,7 +143,6 @@ void Foam::basicThermo::eBoundaryCorrection(volScalarField& e)
} }
} }
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::basicThermo::basicThermo(const fvMesh& mesh) Foam::basicThermo::basicThermo(const fvMesh& mesh)
@ -300,6 +299,50 @@ Foam::tmp<Foam::scalarField> Foam::basicThermo::h
} }
Foam::volScalarField& Foam::basicThermo::hs()
{
notImplemented("basicThermo::hs()");
return const_cast<volScalarField&>(volScalarField::null());
}
const Foam::volScalarField& Foam::basicThermo::hs() const
{
notImplemented("basicThermo::hs() const");
return volScalarField::null();
}
Foam::tmp<Foam::scalarField> Foam::basicThermo::hs
(
const scalarField& T,
const labelList& cells
) const
{
notImplemented
(
"basicThermo::hs"
"(const scalarField& T, const labelList& cells) const"
);
return tmp<scalarField>(NULL);
}
Foam::tmp<Foam::scalarField> Foam::basicThermo::hs
(
const scalarField& T,
const label patchi
) const
{
notImplemented
(
"basicThermo::hs"
"(const scalarField& T, const label patchi) const"
);
return tmp<scalarField>(NULL);
}
Foam::volScalarField& Foam::basicThermo::e() Foam::volScalarField& Foam::basicThermo::e()
{ {
notImplemented("basicThermo::e()"); notImplemented("basicThermo::e()");

View File

@ -141,7 +141,7 @@ public:
//- Compressibility [s^2/m^2] //- Compressibility [s^2/m^2]
virtual const volScalarField& psi() const; virtual const volScalarField& psi() const;
//- Enthalpy [J/kg] //- Total enthalpy [J/kg]
// Non-const access allowed for transport equations // Non-const access allowed for transport equations
virtual volScalarField& h(); virtual volScalarField& h();
@ -162,6 +162,27 @@ public:
const label patchi const label patchi
) const; ) const;
//- Sensible enthalpy [J/kg]
// Non-const access allowed for transport equations
virtual volScalarField& hs();
//- Enthalpy [J/kg]
virtual const volScalarField& hs() const;
//- Enthalpy for cell-set [J/kg]
virtual tmp<scalarField> hs
(
const scalarField& T,
const labelList& cells
) const;
//- Enthalpy for patch [J/kg]
virtual tmp<scalarField> hs
(
const scalarField& T,
const label patchi
) const;
//- Internal energy [J/kg] //- Internal energy [J/kg]
// Non-const access allowed for transport equations // Non-const access allowed for transport equations
virtual volScalarField& e(); virtual volScalarField& e();

View File

@ -30,14 +30,9 @@ License
#include "volFields.H" #include "volFields.H"
#include "basicThermo.H" #include "basicThermo.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
fixedEnthalpyFvPatchScalarField::fixedEnthalpyFvPatchScalarField Foam::fixedEnthalpyFvPatchScalarField::fixedEnthalpyFvPatchScalarField
( (
const fvPatch& p, const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF const DimensionedField<scalar, volMesh>& iF
@ -47,7 +42,7 @@ fixedEnthalpyFvPatchScalarField::fixedEnthalpyFvPatchScalarField
{} {}
fixedEnthalpyFvPatchScalarField::fixedEnthalpyFvPatchScalarField Foam::fixedEnthalpyFvPatchScalarField::fixedEnthalpyFvPatchScalarField
( (
const fixedEnthalpyFvPatchScalarField& ptf, const fixedEnthalpyFvPatchScalarField& ptf,
const fvPatch& p, const fvPatch& p,
@ -59,7 +54,7 @@ fixedEnthalpyFvPatchScalarField::fixedEnthalpyFvPatchScalarField
{} {}
fixedEnthalpyFvPatchScalarField::fixedEnthalpyFvPatchScalarField Foam::fixedEnthalpyFvPatchScalarField::fixedEnthalpyFvPatchScalarField
( (
const fvPatch& p, const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF, const DimensionedField<scalar, volMesh>& iF,
@ -70,7 +65,7 @@ fixedEnthalpyFvPatchScalarField::fixedEnthalpyFvPatchScalarField
{} {}
fixedEnthalpyFvPatchScalarField::fixedEnthalpyFvPatchScalarField Foam::fixedEnthalpyFvPatchScalarField::fixedEnthalpyFvPatchScalarField
( (
const fixedEnthalpyFvPatchScalarField& tppsf const fixedEnthalpyFvPatchScalarField& tppsf
) )
@ -79,7 +74,7 @@ fixedEnthalpyFvPatchScalarField::fixedEnthalpyFvPatchScalarField
{} {}
fixedEnthalpyFvPatchScalarField::fixedEnthalpyFvPatchScalarField Foam::fixedEnthalpyFvPatchScalarField::fixedEnthalpyFvPatchScalarField
( (
const fixedEnthalpyFvPatchScalarField& tppsf, const fixedEnthalpyFvPatchScalarField& tppsf,
const DimensionedField<scalar, volMesh>& iF const DimensionedField<scalar, volMesh>& iF
@ -91,7 +86,7 @@ fixedEnthalpyFvPatchScalarField::fixedEnthalpyFvPatchScalarField
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void fixedEnthalpyFvPatchScalarField::updateCoeffs() void Foam::fixedEnthalpyFvPatchScalarField::updateCoeffs()
{ {
if (updated()) if (updated())
{ {
@ -109,7 +104,14 @@ void fixedEnthalpyFvPatchScalarField::updateCoeffs()
const_cast<fvPatchScalarField&>(thermo.T().boundaryField()[patchi]); const_cast<fvPatchScalarField&>(thermo.T().boundaryField()[patchi]);
Tw.evaluate(); Tw.evaluate();
operator==(thermo.h(Tw, patchi)); if (dimensionedInternalField().name() == "h")
{
operator==(thermo.h(Tw, patchi));
}
else
{
operator==(thermo.hs(Tw, patchi));
}
fixedValueFvPatchScalarField::updateCoeffs(); fixedValueFvPatchScalarField::updateCoeffs();
} }
@ -117,10 +119,14 @@ void fixedEnthalpyFvPatchScalarField::updateCoeffs()
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
makePatchTypeField(fvPatchScalarField, fixedEnthalpyFvPatchScalarField); namespace Foam
{
makePatchTypeField
(
fvPatchScalarField,
fixedEnthalpyFvPatchScalarField
);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View File

@ -44,7 +44,7 @@ namespace Foam
{ {
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class fixedEnthalpyFvPatchScalarField Declaration Class fixedEnthalpyFvPatchScalarField Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
class fixedEnthalpyFvPatchScalarField class fixedEnthalpyFvPatchScalarField

View File

@ -30,14 +30,9 @@ License
#include "volFields.H" #include "volFields.H"
#include "basicThermo.H" #include "basicThermo.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
gradientEnthalpyFvPatchScalarField::gradientEnthalpyFvPatchScalarField Foam::gradientEnthalpyFvPatchScalarField::gradientEnthalpyFvPatchScalarField
( (
const fvPatch& p, const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF const DimensionedField<scalar, volMesh>& iF
@ -47,7 +42,7 @@ gradientEnthalpyFvPatchScalarField::gradientEnthalpyFvPatchScalarField
{} {}
gradientEnthalpyFvPatchScalarField::gradientEnthalpyFvPatchScalarField Foam::gradientEnthalpyFvPatchScalarField::gradientEnthalpyFvPatchScalarField
( (
const gradientEnthalpyFvPatchScalarField& ptf, const gradientEnthalpyFvPatchScalarField& ptf,
const fvPatch& p, const fvPatch& p,
@ -59,7 +54,7 @@ gradientEnthalpyFvPatchScalarField::gradientEnthalpyFvPatchScalarField
{} {}
gradientEnthalpyFvPatchScalarField::gradientEnthalpyFvPatchScalarField Foam::gradientEnthalpyFvPatchScalarField::gradientEnthalpyFvPatchScalarField
( (
const fvPatch& p, const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF, const DimensionedField<scalar, volMesh>& iF,
@ -70,7 +65,7 @@ gradientEnthalpyFvPatchScalarField::gradientEnthalpyFvPatchScalarField
{} {}
gradientEnthalpyFvPatchScalarField::gradientEnthalpyFvPatchScalarField Foam::gradientEnthalpyFvPatchScalarField::gradientEnthalpyFvPatchScalarField
( (
const gradientEnthalpyFvPatchScalarField& tppsf const gradientEnthalpyFvPatchScalarField& tppsf
) )
@ -79,7 +74,7 @@ gradientEnthalpyFvPatchScalarField::gradientEnthalpyFvPatchScalarField
{} {}
gradientEnthalpyFvPatchScalarField::gradientEnthalpyFvPatchScalarField Foam::gradientEnthalpyFvPatchScalarField::gradientEnthalpyFvPatchScalarField
( (
const gradientEnthalpyFvPatchScalarField& tppsf, const gradientEnthalpyFvPatchScalarField& tppsf,
const DimensionedField<scalar, volMesh>& iF const DimensionedField<scalar, volMesh>& iF
@ -91,7 +86,7 @@ gradientEnthalpyFvPatchScalarField::gradientEnthalpyFvPatchScalarField
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void gradientEnthalpyFvPatchScalarField::updateCoeffs() void Foam::gradientEnthalpyFvPatchScalarField::updateCoeffs()
{ {
if (updated()) if (updated())
{ {
@ -110,12 +105,24 @@ void gradientEnthalpyFvPatchScalarField::updateCoeffs()
Tw.evaluate(); Tw.evaluate();
gradient() = thermo.Cp(Tw, patchi)*Tw.snGrad() if (dimensionedInternalField().name() == "h")
+ patch().deltaCoeffs()* {
gradient() = thermo.Cp(Tw, patchi)*Tw.snGrad()
+ patch().deltaCoeffs()*
( (
thermo.h(Tw, patchi) thermo.h(Tw, patchi)
- thermo.h(Tw, patch().faceCells()) - thermo.h(Tw, patch().faceCells())
); );
}
else
{
gradient() = thermo.Cp(Tw, patchi)*Tw.snGrad()
+ patch().deltaCoeffs()*
(
thermo.hs(Tw, patchi)
- thermo.hs(Tw, patch().faceCells())
);
}
fixedGradientFvPatchScalarField::updateCoeffs(); fixedGradientFvPatchScalarField::updateCoeffs();
} }
@ -123,10 +130,14 @@ void gradientEnthalpyFvPatchScalarField::updateCoeffs()
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
makePatchTypeField(fvPatchScalarField, gradientEnthalpyFvPatchScalarField); namespace Foam
{
makePatchTypeField
(
fvPatchScalarField,
gradientEnthalpyFvPatchScalarField
);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View File

@ -30,14 +30,9 @@ License
#include "volFields.H" #include "volFields.H"
#include "basicThermo.H" #include "basicThermo.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
mixedEnthalpyFvPatchScalarField::mixedEnthalpyFvPatchScalarField Foam::mixedEnthalpyFvPatchScalarField::mixedEnthalpyFvPatchScalarField
( (
const fvPatch& p, const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF const DimensionedField<scalar, volMesh>& iF
@ -51,7 +46,7 @@ mixedEnthalpyFvPatchScalarField::mixedEnthalpyFvPatchScalarField
} }
mixedEnthalpyFvPatchScalarField::mixedEnthalpyFvPatchScalarField Foam::mixedEnthalpyFvPatchScalarField::mixedEnthalpyFvPatchScalarField
( (
const mixedEnthalpyFvPatchScalarField& ptf, const mixedEnthalpyFvPatchScalarField& ptf,
const fvPatch& p, const fvPatch& p,
@ -63,7 +58,7 @@ mixedEnthalpyFvPatchScalarField::mixedEnthalpyFvPatchScalarField
{} {}
mixedEnthalpyFvPatchScalarField::mixedEnthalpyFvPatchScalarField Foam::mixedEnthalpyFvPatchScalarField::mixedEnthalpyFvPatchScalarField
( (
const fvPatch& p, const fvPatch& p,
const DimensionedField<scalar, volMesh>& iF, const DimensionedField<scalar, volMesh>& iF,
@ -74,7 +69,7 @@ mixedEnthalpyFvPatchScalarField::mixedEnthalpyFvPatchScalarField
{} {}
mixedEnthalpyFvPatchScalarField::mixedEnthalpyFvPatchScalarField Foam::mixedEnthalpyFvPatchScalarField::mixedEnthalpyFvPatchScalarField
( (
const mixedEnthalpyFvPatchScalarField& tppsf const mixedEnthalpyFvPatchScalarField& tppsf
) )
@ -83,7 +78,7 @@ mixedEnthalpyFvPatchScalarField::mixedEnthalpyFvPatchScalarField
{} {}
mixedEnthalpyFvPatchScalarField::mixedEnthalpyFvPatchScalarField Foam::mixedEnthalpyFvPatchScalarField::mixedEnthalpyFvPatchScalarField
( (
const mixedEnthalpyFvPatchScalarField& tppsf, const mixedEnthalpyFvPatchScalarField& tppsf,
const DimensionedField<scalar, volMesh>& iF const DimensionedField<scalar, volMesh>& iF
@ -95,7 +90,7 @@ mixedEnthalpyFvPatchScalarField::mixedEnthalpyFvPatchScalarField
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void mixedEnthalpyFvPatchScalarField::updateCoeffs() void Foam::mixedEnthalpyFvPatchScalarField::updateCoeffs()
{ {
if (updated()) if (updated())
{ {
@ -117,13 +112,27 @@ void mixedEnthalpyFvPatchScalarField::updateCoeffs()
Tw.evaluate(); Tw.evaluate();
valueFraction() = Tw.valueFraction(); valueFraction() = Tw.valueFraction();
refValue() = thermo.h(Tw.refValue(), patchi);
refGrad() = thermo.Cp(Tw, patchi)*Tw.refGrad() if (dimensionedInternalField().name() == "h")
+ patch().deltaCoeffs()* {
( refValue() = thermo.h(Tw.refValue(), patchi);
refGrad() = thermo.Cp(Tw, patchi)*Tw.refGrad()
+ patch().deltaCoeffs()*
(
thermo.h(Tw, patchi) thermo.h(Tw, patchi)
- thermo.h(Tw, patch().faceCells()) - thermo.h(Tw, patch().faceCells())
); );
}
else
{
refValue() = thermo.hs(Tw.refValue(), patchi);
refGrad() = thermo.Cp(Tw, patchi)*Tw.refGrad()
+ patch().deltaCoeffs()*
(
thermo.hs(Tw, patchi)
- thermo.hs(Tw, patch().faceCells())
);
}
mixedFvPatchScalarField::updateCoeffs(); mixedFvPatchScalarField::updateCoeffs();
} }
@ -131,10 +140,14 @@ void mixedEnthalpyFvPatchScalarField::updateCoeffs()
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
makePatchTypeField(fvPatchScalarField, mixedEnthalpyFvPatchScalarField); namespace Foam
{
makePatchTypeField
(
fvPatchScalarField,
mixedEnthalpyFvPatchScalarField
);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View File

@ -156,4 +156,22 @@ Foam::tmp<Foam::fvScalarMatrix> Foam::radiation::radiationModel::Sh
} }
Foam::tmp<Foam::fvScalarMatrix> Foam::radiation::radiationModel::Shs
(
basicThermo& thermo
) const
{
volScalarField& hs = thermo.hs();
const volScalarField cp = thermo.Cp();
const volScalarField T3 = pow3(T_);
return
(
Ru()
- fvm::Sp(4.0*Rp()*T3/cp, hs)
- Rp()*T3*(T_ - 4.0*hs/cp)
);
}
// ************************************************************************* // // ************************************************************************* //

View File

@ -163,7 +163,7 @@ public:
virtual void calculate() = 0; virtual void calculate() = 0;
//- Read radiationProperties dictionary //- Read radiationProperties dictionary
virtual bool read(); virtual bool read() = 0;
// Access // Access
@ -176,6 +176,9 @@ public:
//- Enthalpy source term //- Enthalpy source term
virtual tmp<fvScalarMatrix> Sh(basicThermo& thermo) const; virtual tmp<fvScalarMatrix> Sh(basicThermo& thermo) const;
//- Sensible enthalpy source term
virtual tmp<fvScalarMatrix> Shs(basicThermo& thermo) const;
}; };
@ -189,4 +192,3 @@ public:
#endif #endif
// ************************************************************************* // // ************************************************************************* //

View File

@ -128,9 +128,6 @@ public:
} }
//- Sensible enthalpy [J/kg]
virtual tmp<volScalarField> hs() const = 0;
//- Chemical enthalpy [J/kg] //- Chemical enthalpy [J/kg]
virtual tmp<volScalarField> hc() const = 0; virtual tmp<volScalarField> hc() const = 0;

View File

@ -155,53 +155,6 @@ void Foam::hPsiMixtureThermo<MixtureType>::correct()
} }
template<class MixtureType>
Foam::tmp<Foam::volScalarField>
Foam::hPsiMixtureThermo<MixtureType>::hs() const
{
const fvMesh& mesh = T_.mesh();
tmp<volScalarField> ths
(
new volScalarField
(
IOobject
(
"hs",
mesh.time().timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
h_.dimensions()
)
);
volScalarField& hsf = ths();
scalarField& hsCells = hsf.internalField();
const scalarField& TCells = T_.internalField();
forAll(TCells, celli)
{
hsCells[celli] = this->cellMixture(celli).Hs(TCells[celli]);
}
forAll(T_.boundaryField(), patchi)
{
scalarField& hsp = hsf.boundaryField()[patchi];
const scalarField& Tp = T_.boundaryField()[patchi];
forAll(Tp, facei)
{
hsp[facei] = this->patchFaceMixture(patchi, facei).Hs(Tp[facei]);
}
}
return ths;
}
template<class MixtureType> template<class MixtureType>
Foam::tmp<Foam::volScalarField> Foam::tmp<Foam::volScalarField>
Foam::hPsiMixtureThermo<MixtureType>::hc() const Foam::hPsiMixtureThermo<MixtureType>::hc() const

View File

@ -94,9 +94,6 @@ public:
//- Update properties //- Update properties
virtual void correct(); virtual void correct();
//- Sensible enthalpy [J/kg]
virtual tmp<volScalarField> hs() const;
//- Chemical enthalpy [J/kg] //- Chemical enthalpy [J/kg]
virtual tmp<volScalarField> hc() const; virtual tmp<volScalarField> hc() const;

View File

@ -174,54 +174,6 @@ void Foam::hhuMixtureThermo<MixtureType>::correct()
} }
template<class MixtureType>
Foam::tmp<Foam::volScalarField>
Foam::hhuMixtureThermo<MixtureType>::hs() const
{
const fvMesh& mesh = T_.mesh();
tmp<volScalarField> ths
(
new volScalarField
(
IOobject
(
"hs",
mesh.time().timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
h_.dimensions()
)
);
volScalarField& hsf = ths();
scalarField& hsCells = hsf.internalField();
const scalarField& TCells = T_.internalField();
forAll(TCells, celli)
{
hsCells[celli] = this->cellMixture(celli).Hs(TCells[celli]);
}
forAll(T_.boundaryField(), patchi)
{
scalarField& hsp = hsf.boundaryField()[patchi];
const scalarField& Tp = T_.boundaryField()[patchi];
forAll(Tp, facei)
{
hsp[facei] = this->patchFaceMixture(patchi, facei).Hs(Tp[facei]);
}
}
return ths;
}
template<class MixtureType> template<class MixtureType>
Foam::tmp<Foam::volScalarField> Foam::tmp<Foam::volScalarField>
Foam::hhuMixtureThermo<MixtureType>::hc() const Foam::hhuMixtureThermo<MixtureType>::hc() const

View File

@ -36,8 +36,6 @@ SourceFiles
#ifndef hhuMixtureThermo_H #ifndef hhuMixtureThermo_H
#define hhuMixtureThermo_H #define hhuMixtureThermo_H
//#include "hPsiMixtureThermo.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam namespace Foam
@ -94,9 +92,6 @@ public:
//- Update properties //- Update properties
virtual void correct(); virtual void correct();
//- Sensible enthalpy [J/kg]
virtual tmp<volScalarField> hs() const;
//- Chemical enthalpy [J/kg] //- Chemical enthalpy [J/kg]
virtual tmp<volScalarField> hc() const; virtual tmp<volScalarField> hc() const;

View File

@ -128,9 +128,6 @@ public:
} }
//- Sensible enthalpy [J/kg]
virtual tmp<volScalarField> hs() const = 0;
//- Chemical enthalpy [J/kg] //- Chemical enthalpy [J/kg]
virtual tmp<volScalarField> hc() const = 0; virtual tmp<volScalarField> hc() const = 0;

View File

@ -154,53 +154,6 @@ void Foam::hRhoMixtureThermo<MixtureType>::correct()
} }
template<class MixtureType>
Foam::tmp<Foam::volScalarField>
Foam::hRhoMixtureThermo<MixtureType>::hs() const
{
const fvMesh& mesh = T_.mesh();
tmp<volScalarField> ths
(
new volScalarField
(
IOobject
(
"hs",
mesh.time().timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
h_.dimensions()
)
);
volScalarField& hsf = ths();
scalarField& hsCells = hsf.internalField();
const scalarField& TCells = T_.internalField();
forAll(TCells, celli)
{
hsCells[celli] = this->cellMixture(celli).Hs(TCells[celli]);
}
forAll(T_.boundaryField(), patchi)
{
scalarField& hsp = hsf.boundaryField()[patchi];
const scalarField& Tp = T_.boundaryField()[patchi];
forAll(Tp, facei)
{
hsp[facei] = this->patchFaceMixture(patchi, facei).Hs(Tp[facei]);
}
}
return ths;
}
template<class MixtureType> template<class MixtureType>
Foam::tmp<Foam::volScalarField> Foam::tmp<Foam::volScalarField>
Foam::hRhoMixtureThermo<MixtureType>::hc() const Foam::hRhoMixtureThermo<MixtureType>::hc() const

View File

@ -94,9 +94,6 @@ public:
//- Update properties //- Update properties
virtual void correct(); virtual void correct();
//- Sensible enthalpy [J/kg]
virtual tmp<volScalarField> hs() const;
//- Chemical enthalpy [J/kg] //- Chemical enthalpy [J/kg]
virtual tmp<volScalarField> hc() const; virtual tmp<volScalarField> hc() const;

View File

@ -242,6 +242,9 @@ public:
//- Temperature from Enthalpy given an initial temperature T0 //- Temperature from Enthalpy given an initial temperature T0
inline scalar TH(const scalar H, const scalar T0) const; inline scalar TH(const scalar H, const scalar T0) const;
//- Temperature from sensible Enthalpy given an initial T0
inline scalar THs(const scalar Hs, const scalar T0) const;
//- Temperature from internal energy given an initial temperature T0 //- Temperature from internal energy given an initial temperature T0
inline scalar TE(const scalar E, const scalar T0) const; inline scalar TE(const scalar E, const scalar T0) const;

View File

@ -281,6 +281,17 @@ inline Foam::scalar Foam::specieThermo<thermo>::TH
} }
template<class thermo>
inline Foam::scalar Foam::specieThermo<thermo>::THs
(
const scalar hs,
const scalar T0
) const
{
return T(hs, T0, &specieThermo<thermo>::Hs, &specieThermo<thermo>::Cp);
}
template<class thermo> template<class thermo>
inline Foam::scalar Foam::specieThermo<thermo>::TE inline Foam::scalar Foam::specieThermo<thermo>::TE
( (